Java代码审计 基础工具准备
通俗的说Java代码审计就是通过审计Java代码来发现Java应用程序自身中存在的安全问题,由于Java本身是编译型语言,所以即便只有class文件的情况下我们依然可以对Java代码进行审计。对于未编译的Java源代码文件我们可以直接阅读其源码,而对于已编译的class或者jar文件我们就需要进行反编译了。
Java代码审计其本身并无多大难度,只要熟练掌握审计流程和常见的漏洞审计技巧就可比较轻松的完成代码审计工作了。但是Java代码审计的方式绝不仅仅是使用某款审计工具扫描一下整个Java项目代码就可以完事了,一些业务逻辑和程序架构复杂的系统代码审计就非常需要审计者掌握一定的Java基础并具有具有一定的审计经验、技巧甚至是对Java架构有较深入的理解和实践才能更加深入的发现安全问题。
准备环境和辅助工具¶
在开始Java代码审计前请自行安装好Java开发环境,建议使用MacOS、Ubuntu操作系统。
所谓“工欲善其事,必先利其器”,合理的使用一些辅助工具可以极大的提供我们的代码审计的效率和质量!
强烈推荐下列辅助工具:
| 类型 | 名称 |
|---|---|
| IDE | Jetbrains IDEA、Eclipse、NetBeans |
| 编辑器 | Visual Studio Code、Sublime text |
| 反编译工具 | JD-GUI、Recaf、IDEA Fernflower、Bytecode-Viewer/Fernflower、JAD、JBE、Cafebabe、JByteMod |
| 商业审计工具 | Fortify、CodePecker |
macos Jd-gui打不开问题解决¶

需要注意的是,jd-gui最多支持jdk10,所以如果你的mac上存在多个jdk,那么你需要更改此处代码,并注意选择jdk<=10的版本
Bash
# check for specified JVMversion in "/usr/libexec/java_home" symlinks
elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then
if /usr/libexec/java_home -F -v ${JVMVersion}; then
JAVACMD="`/usr/libexec/java_home -F -v ${JVMVersion} 2> /dev/null`/bin/java"
else
# display error message with applescript
osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'\n\nNo suitable Java version found on your system!\nThis program requires Java ${JVMVersion}\nMake sure you install the required Java version.\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)"
# exit with error
exit 3
fi
# otherwise check "/usr/libexec/java_home" symlinks
elif [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then
JAVACMD="`/usr/libexec/java_home 2> /dev/null`/bin/java"
# otherwise check Java standard symlink (old Apple Java)
elif [ -h /Library/Java/Home ]; then
JAVACMD="/Library/Java/Home/bin/java"
随后在sh脚本中去除这一段

都配置好后可以正常打开jd-gui
参考链接:Mac 安装 Java 反编译工具 JD-GUI_mac java 反编译-CSDN博客
IntelliJ IDEA技巧¶
[IntelliJ IDEA技巧 · 攻击Java Web应用-Java Web安全]
IntelliJ IDEA Java程序调试¶
[IntelliJ IDEA Java程序调试 · 攻击Java Web应用-Java Web安全]