本文主要是介绍攻防世界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__);
}
这里要传入一个数组,并且要和 a r r a y = [ ′ a d m i n ′ , ′ u s e r ′ ] 相 同 , 但 是 又 要 满 足 array = ['admin', 'user']相同,但是又要满足 array=[′admin′,′user′]相同,但是又要满足stuff[0] != ‘admin’,这里需要用到php的一个数组溢出漏洞
也就是说数组中键值为0的元素与键值为4294967296 //0x100000000 的元素是同一个
所以构造payload
stuff[4294967296]=admin&stuff[1]=user&num=111
发现可以绕过
然后就是要绕过对num的检测,从而可以执行命令这里用%0a
最后需要绕过黑名单执行命令,读取flag
由于过滤了flag,?,*等字符,这里用inode索引节点,先找到flag的inode
然后用tac读取得到flag
这篇关于攻防世界favorite_number的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!