代码审计-某TP6对接U支付系统
代码审计-某TP6对接U支付系统
Sherlock前言
本次审计的是一个基于tinkphp6框架的U支付系统
在fofa上面搜索:"/usdtmerchant/login/reg.html"
便可以找到相关的网站,要注意的是有些网站已经进行了改进,再也不能利用该文章中的漏洞了
前台sql注入漏洞
身为一个普通用户,我们能够访问的也就只有index.php,所以我们要从app/index/controller/Index.php开始进行审计
我是在已经知道有该漏洞的情况下进行复现的,所以在该文件中我直接搜索关键字Db
,查查是否有可以利用的函数,如下:
1 | public function send(){ $dd = Db::query(urldecode($_REQUEST['query']));} |
该方法允许直接对变量query进行赋值,输入相关的搜索语句,直接运行
该方法并没有对输入的内容进行验证,所以可以尝试是否存在sql注入漏洞
正是因为语句是我们自己输入的,所以并不存在联合注入漏洞,无法报错注入
尝试后可知该方法只要搜索语句正确状态码便是200,错误的话就是400,所以无法利用布尔盲注,因此就剩一个时间盲注
输入:/index/index/send?query=select+if(length(database())=3,sleep(3),1)
由图可知数据库名字长度为3,存在时间盲注
剩下来的步骤可以利用脚本来进行,也可以利用sqlmap来进行
sqlmap的语句如下:
1 | python sqlmap.py -u "http://127.0.0.1:81/index/index/send?query=*" --level=3 --dbms=mysql |
前台任意文件写入漏洞
首先搜索一下thinkphp封装的文件上传方法,无果
接着尝试搜索一下文件上传的危险函数,有果,为函数get_trc20()
,如下:
1 | public function get_trc20(){ |
该函数中存在file_put_contents方法,可以任意写入内容,没有任何过滤,并且文件名后缀还是php(纯纯后门我觉得)
由该函数可知,我们只需要对变量key赋值base64编码后的php文件内容,然后对变量name赋值一个文件名便可以了
上传成功,访问该文件:/fw.php
,如下:
结语
这个代码审计其实相比于其他几个都更加简单,没多大困难