安全小课堂第132期【代码审计&黑白盒测试】

2019-03-14 18,118

从代码审计的环境基础开始,层层的拆解开,如何快速的搭建并审计java应用,怎么审计最快,怎么能在黑盒测试的时候站在白盒开发的角度想漏洞。

JSRC 安全小课堂第132期,邀请到jkgh006师傅就代码审计&黑白盒测试为大家进行分享。同时感谢白帽子们的精彩讨论。


京安小妹:代码审计前期环境要怎么准备?

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的审计入门和深入的过程

jkgh006:

因为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框架太多,你想要进阶,就必须得动框架

  1. dorado5开发框架

  2. DWR开发框架

  3. Apache-solr框架

  4. Hessian开发框架

  5. EOS开发框架


京安小妹:黑盒和白盒怎样结合能事半功倍?

jkgh006:

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

比如这四大接口

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

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

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

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

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

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

第二类是框架类的注入

第三类是orm类型的注入

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

我大致总结了一些点

jkgh006:

互动问答环节:

1. Java的安全性相对较好,jk师傅平时审出来的大都是什么类型的洞?

jkgh006::其实java的安全性是最差的,你能想到的漏洞类型都有,java的漏洞都是简单粗暴。

2.怎么构造注入链接啊?

jkgh006::最终构造的payload,就是这样

页面直接回显到filename里面。

3.审计代码的基础条件有哪些? 比如java水平达到什么样的可以入手搞了 是否需要先去搞搞java开发?

jkgh006::至少要有开发程序的经验。

4.代码审计怎么知道搜索哪些方法?可能会存在漏洞?

jkgh006::建议还是一行一行看,65万行代码我就是一点点看的,审计本身就是体力活。


本期jkgh006:还为大家准备了【2018漏洞盒子FIT】【审计java案例】

  1. 网盘链接:

    https://pan.baidu.com/s/1WfawPJKFSL_thETWF-rsEA 

    提取码:0w1z 



本文作者:京东SRC

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/101368.html

Tags:
评论  (0)
快来写下你的想法吧!

京东SRC

文章数:73 积分: 129

京东安全应急响应中心

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号