0x00 基本信息
简介
74cms_SE版,就是6.0的升级版本,现在不让下载6.0了
文件hash
必选项
97db77486974910c21ba608e1709e092
文件存储
必选项
https://pan.baidu.com/s/1JMui8MLYcHNg2VZm24qD2w
cms指纹
可选项,后期必选
源码相关
- 官方网站:
https://www.74cms.com/
cms名字
必选项,实际名字或者化名
- 骑士cms3.5.1
- 最新版3.9.0
关联平台
类似第三方支付平台
0x01 基本流程
基于tp35框架的,其他信息就不多说了
0x02 代码审计
任意文件读取
前台任意文件读取
这里没有什么限制,直接读就可以
1 | index/download/index?url=../../application/config.php |
此漏洞已经被修复,修复方式如下
可以看到是检查了../
,如果在windows下还可以用..\
来进行文件读取
这里可以配合读取配置文件,获取safe_code,这个参数是jwt加密用的,可以直接伪造进入后台
后台任意文件读取
这里并非直接可控的
但是此参数可以在后台设置
利用也挺简单,不展示
任意文件删除
代码处于model文件中,
在controller中调用,完全可控
SQL注入
记录前台,后台不记录
keyword参数SQL注入
此参数的注入存在多处
- index/Jobfairol/resumelist
- v1_0/home/Jobfairol/resumelist
- index/Resume/index
- …
以index/Jobfairol/resumelist
为例,代码如下
可以看到的是最好别有空格,
构造payload
1 | /index.php/index/jobfairol/resumelist?jobfair_id=1&keyword=1'))/**/or/**/(select/**/updatexml(1,concat(0x7e,user()),1))%23 |
此漏洞官方已修复
修复方式如下
tag参数SQL注入
看看下面的处理,首先对tag进行分组
继续跟进代码
在这个类的初始化方法中会逐步调用到_set_tag方法
在此方法中进行拼接
漏洞复现
这里对路由进行了定义
1 | /index.php/job/tag/aaa',`tag`)) or updatexml(1,concat(0x7e,user()),1)%23 |
注意的是,这里是thinkphp5.0.24版本,如下写法是不存在注入的哪怕数据完全可控
1 | where('id',$id) |
相关的地方有
会报如下错误
还有一处在base中
后台getshell
文件上传
后台可以修改后缀直接上传
0x03 end
这是对之前74cms的补充