此次审计DSmall多商户B2B2C开源商城源码,2020年1月3日更新,版本号V5.0.6。下载地址http://down.chinaz.com/soft/38901.htm,下载量还挺大。
这个cms也是tp5.0框架。
1、打开cms,先是提示安装。跳转到install模块。注意到:
//配置数据库 file_put_contents(PATH_ROOT . ‘/../application/database.php‘, $config);
F4追踪下$config。没有过滤,在数据库前缀处输入payload,发现只要带有特殊符号,就无法安装成功,因为必须要绕过insert语句:
$insert_error = mysqli_query($link,"INSERT INTO {$db[‘prefix‘]}admin (admin_name, admin_password, admin_is_super, admin_gid) VALUES(‘{$user[‘username‘]}‘, ‘{$password}‘, ‘1‘, ‘0‘)"); if(!$insert_error){ die(‘<script type="text/javascript">alert("管理员账户注册失败.");history.back();</script>‘); }
一直无法绕过。
2、全局搜索=‘{$ 查找注入
全局搜索正则\bdb\(.*?\).*?\‘.*?=\‘.*?\. 继续查找注入
跟踪变量看了半天,没发现注入。
3、全局搜索 unlink( ,发现一处任意文件删除漏洞
www\application\home\controller\MemberAuth.php 93行
file_name参数可以直接传 ,但是被带入了member_info数组 ,我们先看看这个数组有哪些 信息, 92行下断点,直接请求index.php/home/member_auth/image_drop/file_name/1.html
这个数组就是会员的基本信息,可以想一下是否能把nickname参数改为文件名 ,然后删除它呢,
public目录下有个robots.txt,我们就拿他来做试验。
保存成功,然后我们提交: /index.php/home/member_auth/image_drop/file_name/member_nickname.html
再次打到断点,
F8向后执行两步,发现文件成功被删除
4、总结:
文件删除漏洞,全局搜索 unlink(
tp框架下注入还可以搜索 sql = 、 < 、 > 、 \bdb\(.*?\).*?\‘.*?=\‘.*?\. ,可以先看看开发着是怎么使用sql查询语句的,再利用正则表达式定位快速找拼接语句
该漏洞已通知厂商修改,并已完成修复。