1.1 Fastjson反序列化
代码审计
本项目引入的Fastjson版本为1.2.58,该版本存在反序列化漏洞。
已确定了Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。
我们关注两个函数JSON.parse()
和JSON.parseObject()
,并且执行函数内参数用户可控
Edit-Find->Find in path
全局搜索两个关键字,发现本项目存在JSON.parseObject()
,如下图所示:
在ProductController.java
中使用到了上诉关键词
在151、257、281行均调用了JSON.parseObject()
方法,则这几处均存在反序列化。
黑盒验证:
够着url及参数:
方法一: 通过对各个页面的访问并抓包,找到propertyAddJson参数
方法二: 通过抓包,观察数据格式构造url
这里我们优先结合方法一,方法二更适合get请求
构造url:通过代码中的admin/product http://127.0.0.1:8088/tmall/admin/product
结合上述访问在网站中快速定位到页面
”添加一件产品“功能处是调用上述product方法
下面属性值就是json数据
定位位置后,尝试payload
虽然响应包报错,但是dnslog已经出现访问
上面是可以出网的情况,下面则是不出网漏洞验证
在内网环境中,无法利用互联网的DNSlog进行漏洞验证。我们可以使用BurpSuite中的Burp Collaborator client
功能来进行验证。该功能需使用BurpSuite专业版本。
①、打开BurpSuite,点击左上角Burp-Burp Collaborator client
进入该功能,如下图所示:
②、点击Copy to clipboar
后,你会获取到一个测试地址,拼凑成漏洞验证POC:{"@type":"java.net.Inet4Address","val":"mlbqit7ocev29vd3k5w205zqchi86x.burpcollaborator.net"}
,然后将其粘贴到propertyJson
字段中,点击发送数据包。稍等一会,多点几次poll now
,可以看到Burp Collaborator client
接收到了探测信息,如下图所示:
至此,Fastjson漏洞验证之旅已结束,通过DNSLog方式,我们证明了该地方存在Fastjson反序列化漏洞。