java代码审计

0x01 代码审计前期环境

java审计我认为是神器,首先看看这个工具怎么构建审计环境,一个工具打天下,可能群里有人用的是mac,我是用windows讲的,有些快捷键可能对应不上,大家不要太在意。

今天我拿泛微的e-moblie举例子

这个地方选择eclipse,这样就完美继承了eclipse的所有快捷键。

一般对于源码审计,都是通过mv导入,或者其他方式,但是我要说的是发布站点的类似war包审计,强大的idea天生具有很强的反编译功能。首先

这样我们就创建了一个工程

工程的目录是

为什么要这样去做,就是为了完整的关联类似war包这样的发布程序

今天要看的就是e-mobile,这个就是他发布时候的代码结构

直接全部copy到这个web目录底下

结构就是这样的,但是这个时候还是不能用的,我们要添加环境依赖,方便以后能用快捷键搜索

把该项目相关依赖的包都引入进来,这里选择目录就可以,然后点击确定后,整个jar就会被反编译,然后就可以读取源码。这快捷键一定要牢记

【ctrl+shift+t】这个是搜索类

【ctrl+shift+alt+n】这个是搜索函数名

【ctrl+t】鼠标放到函数上,可以看到具体实现该方法的所有类

搜索文件直接点击 这就是完整的一个环境!

0x02 java的审计入门

因为java 的框架五花八门,太多了,一般审计的入口文件就是web.xml

比如这个配置内容,它属于一个拦截器,这里是通过拦截器找到对应的调用,当然了,这个不是我们要说的重点,因为这个框架是spring-boot编写的,也就是我们通常所说的注解模式

web.xml

基于这个我点开classes目录

ClientAction 和 installAction,还有mainAction,最后一个pushAction,直接点击ClientAction

当然了这里是根路径,我们就直接http://www.site.com/

这个就属于它里面的一个方法,根据st2的结尾标志,所以这里应该是个client.do,那么url就变成了http://www.site.com/client.do,这样一来,这个函数的入口我们就对应

根据这一段代码,我们可以看出他其中一个参数method做路由用的,如果是login就是登陆,通过往常测试中遇到的一般client.do都是手机应用的对接口,这里我们看其中一个主要方法getupload

Map var1 = MobileManager.getInstance().getUpload(this.uploadID);这里传入了一个this.uploadID,如果有对sping的映射参数了解的话uploadID其实就是一个http参数,跟进去

以上就是【典型的sql注入漏洞】

我们再翻过头来看,另外一个action

从这个效果来看,这个就是一个任意文件读取

0x03 黑盒和白盒结合

因为我平常不做src的测试,所以不明白规则。在众测里面要求,比如注入,只要拿到user即可,但是即便是这样user也是很难拿到的,因为有各种各样的限制,各种各样的拦截,java的远程调用,最常见的有四大类接口,这个也是跟审计分不开的。

比如这四大接口

第一个最常见,通过审计你会发现通常webservice的猜测目录,概率最高的四个为service,serivces,ws,webservice(不是绝对的,这个是我自己的统计)dwr通常是两个,/dwr/index.html/exec/index.html

后面两个比较复杂,前面两个我们在黑盒测试的时候就可以暴力猜测他的api,一般会回显到页面,比如webservice

这个基本涵盖了主流的调用,方便黑盒测试

测试的时候可以去留意一下,还有这个dwr接口

要站在开发的角度想问题,这些问题都是默认配置导致测试人员可猜测。

接下来我们要说注入跟审计的关联,我把注入分为三大类,一类是普通的字符串拼接注入,举个栗子(普通的拼接)

第二类是框架类的注入

第三类是orm类型的注入

这三类分清楚了,那么注入还有一层拦截问题,怎么获取user。

我大致总结了一些点

3.1 怎么构造注入链接啊?

最终构造的payload,就是这样

页面直接回显到filename里面。

转自:jsrc

-------------本文结束感谢您的阅读-------------