对某黑产微盘交易系统的漏洞挖掘
附上源码#
链接: https://pan.baidu.com/s/1KDISzDnOFlThR9CD4AjQJQ 提取码: 6rsw
安装好是这样的:
登录后台:
http://192.168.190.147/admin/index/index.html
admin 2807016..
进后台 添加了一个用户名为123 密码为test1234的用户 方便我们测试。
这次从功能测试到审计
0x01 注入漏洞
随便点击一个进去 测试后发现这个pid参数存在注入
http://192.168.190.147/index/goods/goods/pid/23'/token/6f2a0b00bceb07ed7a327f392d7f0755.html
这里用的thinkphp框架的路由 入口文件+模块/控制器/操作
所以此处注入对应的文件在 index模块(aplication应用目录)下的goods控制器的goods操作(函数)
这里因为我们是功能测试出来pid这个变量貌似有注入,所以我们关注这个变量走向即可
Input方法是接收这个参数变量 不多讲
可以看到在接收了PID变量后带入了GetProData函数,看看这个函数怎么定义的
在GetProData函数中的235行开始到237行进行了数据库查询操作,可以看到变量pid在237直接带入where函数作为pi.pid参数的值进行查询,没有任何过滤导致注入,直到这里我们才确定是真的有注入
关于tp5自带的数据库查询方法函数大佬们可以多看看手册即可
0x02 后台登录绕过漏洞
后台地址:http://192.168.190.147/admin/index/index.html
我们先登录正常管理账号。
抓包分析
发现有两个请求的包
第一个:
Forward第一个后,抓取到第二个:
测试发现第一个包发送后第二个包中的cookie里面有个denglu 里面带着有个参数uid,很有可能是用户的标号,极有可能后台通过第二个包判断登录权限,我们重新打开一个没有登录的页面
denglu=think%3A%7B%22otype%22%3A%223%22%2C%22userid%22%3A%221%22%2C%22username%22%3A%22admin%22%2C%22token%22%3A%223c341b110c44ad9e7da4160e4f865b63%22%7D
我们带上那个正常包的cookie字段中的denglu这个参数
登录成功,但是不确定是否有漏洞,因为这里的uid和username可以伪造,但是有个token参数,如果是随机生成那么是不存在越权,所以我们继续看源码确定漏洞。
找到admin下的login控制器
往下找 可以看到这处
这里的token只是对一个字符串”nimashabi”进行md5加密,也就说是固定的,所以我们cookie加那个固定的denglu参数直接可以越权,存在漏洞
0x03 后台Getshell
Getshell部分我们重点关心上传点和写入文件之类的功能。后台发现此处有个上传点,这里是修改前台相关信息和图标的。
我们查看元素,看看接收文件上传的php在什么位置
/admin/setup/editconf.html
Admin模块下的setup控制器的editconf函数,找到对应位置
可以看到这里没有任何类型判断 直接上传
我们来测试一下,上传一个一句话后访问前台
0x04前台越权改密码
我们首先注册两个用于来测试,一个账号名为”客户”,一个为”黑阔”
我们来前台修改密码,尝试csrf漏洞
先登录”客户”账号,登录成功后点击修改密码,抓包
来到这里修改
因为格式问题 填写账号手机号的时候先改成手机号的长度,抓包
这里手机号就代表用户名,我们这里登录的是手机号为1的”客户”帐号,尝试把手机号改成2(另一个名为“黑阔”账号的手机号就为2),新密码改成111111,关于手机验证码在真实环境中爆破即可
我们来看下源码,确认漏洞。
因为刚才那个修改的密码的包请求的是这个html,我们看看这个模块里表单提交的地址是什么
找到了修改密码操作的位置 login/repass
关键代码 首先是接收post过来的值 里面包含我们手机号,先带入数据库查询手机号是否存在
其次对验证码校验,这个我们可以爆破,最后直接修改密码,存在漏洞。
0x05 前台getshell
因为前面0x02可以绕过登录,只需要cookie加上那个管理的信息就可以,加上0x02可以直接上传 ,我们直接构造管理员的上传包可以直接getshell