漏洞点
定位到Application/Home/Controller/AppUploadController.class.php:
文件上传漏洞
接受到文件后,没有过滤的直接进行了move_uploaded_file
。
因此直接构造表单,以commentUpload
为例:
直接上传phpinfo.php,之后访问 http://127.0.0.1/Uploads/show/phpinfo.php
官网demo
SQL注入漏洞
观察一下上面代码中的sql查询语句,在headerUpload函数中:
首先user_id
是可控的。我们跟进tp的where
方法,定义在 Core/Library/Think/Model.class.php:1783
此时传入的参数parse
即可控的$user_id
,然后通过vsprintf($where,$parse)
将其格式化输出到where语句中。这里并没有严格的对数据类型进行检验,虽然前面存在escapeString
的过滤,但只要不引入引号即可。
要进入该if判断中,需要满足!empty($find)
,也即数据库里已存在头像。因此可以先前台注册一个用户,登陆后在cookie字段获取到对应的user_id,如图所示user_id=275。
在个人资料处先上传一张头像
确保上传成功后。选择打开下面的exp.html上传,并抓包:
在user_id后添加payload,比如or updatexml(1,concat(0x7e,(user())),0)
查看sql日志: