0x00 代码审计概念
代码审计是一种以发现安全漏洞、程序错误和违反程序规范为目标的源代码分析。在实践时,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议
0x01 代码审计常见思路
接口排查
- 先找出接口从外部接收的参数,并追踪其传递过程,观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞
按照如下的Java的业务逻辑处理顺序,逐层做审计
- Controller
- service接口
- servicempl
- dao接口
- daolmpl
- mapper
- db
小tips
- 在Java中,传参时,使用拼接即
$
会出现注入问题,如果使用#
进行预编译,基本上就不存在这种问题
- 在Java中,传参时,使用拼接即
危险方法溯源
- 检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控并且已经过严格的过滤
功能点定向审计
- 根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码
- 根据经验判断该类应用通常会在哪些功能中出现漏洞,直接审计该类功能的代码
第三方组建、中间件版本比对
- 检查Web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响
补丁比对
- 通过补丁做比对,反推漏洞出处
- 黑盒测试+白盒测试
- 代码静态扫描工具+人工研判
开发框架安全审计
- 审计Web应用所使用的开发框架是否存在自身安全性问题或者有着由用户不当使用而引入的安全风险
小tips:
- 调试Tomcat需要在
catalina.sh
文件中加入这一句
调试前需要将5005端口映射出来
JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
加入后docker restart
重新启动即可
- 调试Weblogic
调试前需要将8453端口映射出来
0x02 审计环境搭建
以Vulhub中的环境为例
一、Tomcat
修改docker-compose.yml
如下
version: '2'
services:
tomcat:
build: .
ports:
- "8080:8080"
- "5005:5005"
这里的5005
端口为调试端口
使用docker compose up -d
启动
创建一个空文件夹,使用IDEA打开
将容器中的/usr/local/tomcat/lib/
和/usr/local/tomcat/bin/
使用docker cp
命令拷贝到空白文件夹中
将lib导入到idea中
修改bin目录下的catalina.sh
文件,在第二行添加如下代码
JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
复制回容器中,使用docker restart
命令重新启动容器
在IDEA中添加调试配置如下
在catalina.jar/org.apache/catalina/connector/Request
的165行处打断点,点击debug,访问localhost:8080
如果出现如下显示,证明搭建成功
二、Weblogic
修改docker-compose.yml
如下
这里的8453
端口为调试端口
使用docker compose up -d
启动
创建一个空文件夹,使用IDEA打开
将容器中的/root/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh
、/root/Oracle/Middleware/modules/
和/root/Oracle/Middleware/wlserver_10.3
使用docker cp
命令拷贝到空白文件夹中
修改setDomainEnv.sh
文件,在文件中添加
debugFlag="true"
export debugFlag
修改文件如下图所示
将其复制回原处,使用docker restart
命令重启容器。
在idea中将w1server_10.3/server/lib
和modules
文件添加到依赖文件中
在IDEA中添加调试配置如下
在wlserver_10.3/server/lib/weblogic.jar!/weblogic/wsee/jaxws/WLSServletAdapter.class
的hadle
方法处设置断点
点击Debug
按钮运行Debug
模式,然后使用浏览器访问http://localhost:7001/wls-wsat/CoordinatorPortType
,同时查看IDEA是否如下图所示。
0x03 参考文献
Java代码审计(入门篇)-许焱