Java Web安全之Java代码审计-IntelliJ IDEA技巧

Java Web安全之Java代码审计-IntelliJ IDEA技巧

Java 代码审计

通俗的说Java代码审计就是通过审计Java代码来发现Java应用程序自身中存在的安全问题,由于Java本身是编译型语言,所以即便只有class文件的情况下我们依然可以对Java代码进行审计。对于未编译的Java源代码文件我们可以直接阅读其源码,而对于已编译的class或者jar文件我们就需要进行反编译了。

Java代码审计其本身并无多大难度,只要熟练掌握审计流程和常见的漏洞审计技巧就可比较轻松的完成代码审计工作了。但是Java代码审计的方式绝不仅仅是使用某款审计工具扫描一下整个Java项目代码就可以完事了,一些业务逻辑和程序架构复杂的系统代码审计就非常需要审计者掌握一定的Java基础并具有具有一定的审计经验、技巧甚至是对Java架构有较深入的理解和实践才能更加深入的发现安全问题。

本章节讲述Java代码审计需要掌握的前置知识以及Java代码审计的流程、技巧。

准备环境和辅助工具

在开始Java代码审计前请自行安装好Java开发环境,建议使用MacOS、Ubuntu操作系统。

所谓“工欲善其事,必先利其器”,合理的使用一些辅助工具可以极大的提供我们的代码审计的效率和质量!

强烈推荐下列辅助工具:

类型名称
IDEJetbrains IDEAEclipseNetBeans
编辑器Visual Studio CodeSublime text
反编译工具JD-GUIRecafIDEA FernflowerBytecode-Viewer/FernflowerJADJBECafebabeJByteMod
商业审计工具FortifyCodePecker
Java Web安全之Java代码审计-IntelliJ IDEA技巧

IntelliJ IDEAJetbrains出品的一款非常强大的Java IDE,IDEA提供了强大的代码搜索、反编译、动态调试等功能可以最大程度的辅助我们代码审计。

IntelliJ IDEA技巧

1. IDEA搜索技巧

IDEA的搜索快捷键是:⇧⌘F,使用IDEA提供的搜索功能可以非常快速的定位漏洞点信息。

Java Web安全之Java代码审计-IntelliJ IDEA技巧

IDEA可以通过自定义搜索范围来精确查找我们需要审计的代码。默认搜索的是所有的位置,不过我们可以点击红色箭头指向的...按钮来细化我们的搜索范围。

1.1 自定义范围搜索

Java Web安全之Java代码审计-IntelliJ IDEA技巧

自定义搜索范围示例:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

自定义搜索范围后就可以在搜索时使用自定义的配置进行范围搜索了,有助于我们在挖漏洞的时候缩小代码定位范围。

Java Web安全之Java代码审计-IntelliJ IDEA技巧

1.2. 标记搜索

搜索快捷键: ⌘O,标记搜索支持类名方法名搜索(包括class或jar文件中的方法也支持搜索)。

Java Web安全之Java代码审计-IntelliJ IDEA技巧

2. Java调用链搜索

当我们审计代码的时候发现某个方法或类有漏洞时我们需要定位到漏洞的请求地址(触发点),复杂业务系统往往会让我们很难定位到漏洞的触发点。借助IDEA的方法调用链搜索功能就可以很轻松的找出方法的调用链和触发点。

选择类或者方法名–>右键–>Find Useages或者使用快捷键⌥F7

Java Web安全之Java代码审计-IntelliJ IDEA技巧

3. 显示类所有方法

如果某个类有非常多的方法,我们无法快速找到想看的方法时可以使用快捷键⌘F12

Java Web安全之Java代码审计-IntelliJ IDEA技巧

如果想显示父类方法可以把Inherited members勾上,反之去掉。

4. 显示类继承关系

某些类实现的非常复杂,继承和实现了非常多的类,比较影响我们分析业务,这个时候我们可以在某个类的空白处右键->Diagrams->Show Diagram或者使用快捷键⌥⇧⌘U

Java Web安全之Java代码审计-IntelliJ IDEA技巧

示例RequestFacade类的继承关系图:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

点击左上角的小图标FM❤MPI分别会展示详细的:成员变量构造方法方法属性内部类

如果想显示多个类的继承关系,可以将任意类文件拖拽到右图就会生成多类之间的继承关系,如Tomcat中的HttpServletRequest类和ApplicationHttpRequest类都实现了HttpServletRequest接口,那么拖拽到一起就可以看到它们俩之间的如下关联关系:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

5. 自动反编译

IDEA的反编译效果非常的不错,大部分时间都可以直接使用IDEA的反编译功能来代替反编译工具。

5.1 自动反编译class文件

将任意的class文件丢到IDEA的源码目录就可以立即看到反编译之后的文件,这样就可以省去打开反编译工具的时间了,如图:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

请注意,直接在IDEA中粘贴是会出错的,应该以文件的形式拷贝到对应目录。如果嫌打开目录IDEA中的文件所在目录过于麻烦,可以点击文件名或在已打开的文件中右键->Reveal in Finder

Java Web安全之Java代码审计-IntelliJ IDEA技巧

如果不想鼠标点击可以设置个自己喜欢的快捷键,这样就会非常方便了:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

5.2 jar文件反编译

IDEA反编译jar文件也是非常的方便,只需把jar包丢到任意目录,然后右键->Add as library就可以了。

Java Web安全之Java代码审计-IntelliJ IDEA技巧

jar反编译示例:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

6. Http请求测试

很多人为了测试API接口总喜欢使用Burp或者Postman之类的工具去发送Http请求,殊不知IDEA就内置了非常方便的Http请求工具。在项目的任意位置:右键->new->File->test.http,然后就会创建出一个叫test.http的文件。

Java Web安全之Java代码审计-IntelliJ IDEA技巧

Http环境变量配置文件不是必须的,如需配置,需点击右上角的Add Environment File,然后自行添加变量,如:

{
  "dev": {
    "url": "http://localhost:8080",
    "json": "application/json"
  }
}

7. 本地历史记录

在调试IDEA的时候如果不小心误删了文件或者改某个文件时都改一半了发现改错了,而且还没有git之类的版本提交记录。这个时候我们可以使用IDEA的本地文件历史编辑记录功能,选择任意文件或者目录右键->Local History->Show History

Java Web安全之Java代码审计-IntelliJ IDEA技巧

查看本地修改文件记录:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

也可直接选择时间点,点击Revert还原文件到指定时间修改的版本:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

8. 文件比较

IDEA不仅可以很方便的比较版本控制中的修改文件,还自带了一个文件比较功能。

8.1 粘贴板文件比较

复制一个文件的内容到粘贴板,然后打开需要比较的文件后点击右键->Compare with Clipboard

Java Web安全之Java代码审计-IntelliJ IDEA技巧

文件对比:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

8.2 文件比较

如果嫌比较粘贴板比较麻烦,可以直接选中需要比较的文件右键->Compare With...,如下:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

然后在本地文件中选择一个需要比较的文件即可:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

8.3 VCS文件比较

版本控制的文件比较方式非常简单,配置好VCS(Version Vontrol System,版本控制系统)后本地修改的文件和远程的文件可以直接比较,如图:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

9. 类/资源文件热更新

IDEA中默认不会将修改的文件和资源自动同步到Web Server或者SpringBoot,需要我们手动设置当类文件或资源文件发生修改后同步更新。

Web容器热更新:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

SpringBoot热更新:

Java Web安全之Java代码审计-IntelliJ IDEA技巧

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。