从代码审计的环境基础开始,层层的拆解开,如何快速的搭建并审计java应用,怎么审计最快,怎么能在黑盒测试的时候站在白盒开发的角度想漏洞。
JSRC 安全小课堂第132期,邀请到jkgh006师傅就代码审计&黑白盒测试为大家进行分享。同时感谢白帽子们的精彩讨论。
京安小妹:代码审计前期环境要怎么准备?
今天主要讲java,因为我最早写java是09年,那时候用的是eclipse,今天我要讲的是另外一个工具 idea intelij。
这个对于java审计我认为是神器,首先看看这个工具怎么构建审计环境,一个工具打天下,可能群里有人用的是mac,我是用windows讲的,有些快捷键可能对应不上,大家不要太在意。
今天我拿泛微的e-moblie举例子
这个地方选择eclipse,这样就完美继承了eclipse的所有快捷键。
一般对于源码审计,都是通过mv导入,或者其他方式,但是我要说的是发布站点的类似war包审计,强大的idea天生具有很强的反编译功能。首先
选择如下
这样我们就创建了一个工程
工程的目录是
为什么要这样去做,就是为了完整的关联类似war包这样的发布程序
今天要看的就是e-mobile,这个就是他发布时候的代码结构
直接全部copy到
这个web目录底下
copy完
结构就是这样的,但是这个时候还是不能用的,我们要添加环境依赖,方便以后能用快捷键搜索
把该项目相关依赖的包都引入进来,这里选择目录就可以,然后点击确定后,整个jar就会被反编译,然后就可以读取源码。这快捷键一定要牢记
【ctrl+shift+t】这个是搜索类
【ctrl+shift+alt+n】这个是搜索函数名
【ctrl+t】鼠标放到函数上,可以看到具体实现该方法的所有类
搜索文件直接点击
然后搜索关键在直接ctrl+h
这就是完整的一个环境!
京安小妹:java的审计入门和深入的过程
因为java 的框架五花八门,太多了,一般审计的入口文件就是web.xml
比如这个配置内容,它属于一个拦截器,这里是通过拦截器找到对应的调用,当然了,这个不是我们要说的重点,因为这个框架是spring-boot编写的,也就是我们通常所说的注解模式
基于这个我点开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
从这个效果来看,这个就是一个任意文件读取
这个原理就跟我刚才讲解的差不多。事实上,这套代码的注入还是很多的,到这里java审计的入门我就说完了。
提升阶段,我不打算细讲,但是,我发几个文章,大家可以学习一下,因为java框架太多,你想要进阶,就必须得动框架
dorado5开发框架
DWR开发框架
Apache-solr框架
Hessian开发框架
EOS开发框架
京安小妹:黑盒和白盒怎样结合能事半功倍?
因为我平常不做src的测试,所以不明白规则。在众测里面要求,比如注入,只要拿到user即可,但是即便是这样user也是很难拿到的,因为有各种各样的限制,各种各样的拦截,java的远程调用,最常见的有四大类接口,这个也是跟审计分不开的。
比如这四大接口
第一个最常见,通过审计你会发现通常webservice的猜测目录,概率最高的四个为service,serivces,ws,webservice(不是绝对的,这个是我自己的统计)dwr通常是两个,/dwr/index.html,/exec/index.html。
后面两个比较复杂,前面两个我们在黑盒测试的时候就可以暴力猜测他的api,一般会回显到页面,比如webservice
这个基本涵盖了主流的调用,方便黑盒测试
测试的时候可以去留意一下,还有这个dwr接口
要站在开发的角度想问题,这些问题都是默认配置导致测试人员可猜测。
接下来我们要说注入跟审计的关联,我把注入分为三大类,一类是普通的字符串拼接注入,举个栗子(普通的拼接)
第二类是框架类的注入
第三类是orm类型的注入
这三类分清楚了,那么注入还有一层拦截问题,怎么获取user。
我大致总结了一些点
互动问答环节:
1. Java的安全性相对较好,jk师傅平时审出来的大都是什么类型的洞?
jkgh006::其实java的安全性是最差的,你能想到的漏洞类型都有,java的漏洞都是简单粗暴。
2.怎么构造注入链接啊?
jkgh006::最终构造的payload,就是这样
页面直接回显到filename里面。
3.审计代码的基础条件有哪些? 比如java水平达到什么样的可以入手搞了 是否需要先去搞搞java开发?
jkgh006::至少要有开发程序的经验。
4.代码审计怎么知道搜索哪些方法?可能会存在漏洞?
jkgh006::建议还是一行一行看,65万行代码我就是一点点看的,审计本身就是体力活。
本期 jkgh006: 还为大家准备了【2018漏洞盒子FIT】【审计java案例】
网盘链接:
https://pan.baidu.com/s/1WfawPJKFSL_thETWF-rsEA
提取码:0w1z