渗透测试|某单位从敏感三要素泄露到接管管理员的漏洞挖掘之旅
字数 2237 2025-09-01 11:26:17
渗透测试实战:从敏感信息泄露到管理员接管
0x1 前言
一、渗透测试概述
本次渗透测试项目是与市网信办合作进行的,测试范围涵盖多个政企单位和学校。由于资产数量庞大,测试相对容易。本文分享几个典型漏洞案例,为新手渗透测试人员提供实战经验。
重要声明:所有渗透测试均已获得合法授权,文中涉及漏洞均已修复。请勿进行未授权测试。
二、资产整理方法
- 将项目相关文件、资产和漏洞报告模板汇总在一个文件夹中
- 分类整理Web资产、APP和小程序漏洞
- 常见资产提供形式:
- Excel表格
- TXT文本文件(适用于少量Web资产)
0x2 漏洞一:短信轰炸漏洞
一、纵向轰炸(单手机号绕过)
测试目标:人力资源管理局微信小程序
测试步骤:
- 在登录口输入手机号,使用Burp Suite抓取短信验证码发送数据包
- 第一次发送正常,第二次显示"短时间内不能重复发送"错误
- 尝试绕过限制:
- 使用特殊字符:
@、空格、+86、逗号等 - 示例:
13888888888@、13888888888,
- 使用特殊字符:
危害扩大:
- 使用Burp Intruder模块进行批量爆破
- 添加多个绕过字符作为payload
- 实现每分钟发送大量验证码,消耗系统资源
二、横向轰炸(多手机号绕过)
测试方法:
- 尝试多种多手机号格式:
phone=13888888888,phone=13999999999 phone=13888888888&phone=13999999999 phone=13888888888,13999999999 phone=13888888888&13999999999 - 成功实现双手机号同时接收相同验证码
- 利用此漏洞可越权登录其他账号(只需知道目标手机号)
三、短信轰炸总结
思维导图要点:
- 测试点:登录口、注册口、找回密码等短信验证功能
- 绕过方法:
- 特殊字符追加
- 多手机号格式
- 修改请求参数名
- 危害评估标准(企业SRC通常要求):
- 每分钟15-30条以上视为有效漏洞
0x3 漏洞二:SessionKey三要素泄露
一、未授权登录
工具准备:
- 独立解密工具:wx_sessionkey_decrypt
- Burp Suite插件:BurpAppletPentester
测试步骤:
- 在大学校园小程序中找到手机号快捷登录功能
- 抓取登录数据包,发现包含SessionKey三要素
- 使用工具解密SessionKey
- 替换数据包中的手机号为管理员号码
- 重新加密并发送,实现未授权登录
二、弱口令+信息泄露
后续利用:
- 将小程序host放到Web端访问,发现若依系统后台
- 使用获取的手机号尝试弱口令(如123456)
- 成功登录后台,获取大量学校个人敏感信息
0x4 漏洞三:JWT攻击
一、JWT密钥爆破
测试步骤:
- 在小程序数据包中发现JWT令牌
- 使用jwt.io解析令牌内容:
- role: appUser(用户角色)
- exp: 过期时间(Unix时间戳)
- userId: 用户唯一标识
- user_key: 用户密钥
- username: 手机号
- 使用自定义脚本爆破JWT密钥(成功爆破出密钥"123456")
- 构造新的JWT令牌,修改:
- 过期时间(延长有效期)
- username(替换为目标手机号)
- role(尝试改为admin)
- 替换原始数据包中的JWT值,实现越权访问
二、None算法绕过
工具使用:
- 使用jwt_tool测试None算法漏洞
- 生成4种None算法变体:
python jwt_tool.py <JWT值> -X a - 响应分析:
- 401 Unauthorized:签名校验失败
- 200 OK:攻击成功
- {"error":"alg not allowed"}:服务端禁用None算法
0x5 漏洞四:OAuth2.0漏洞
案例参考:先知社区文章
漏洞原理:
- 第三方授权登录(如微信扫码登录)
- 扫码后无需二次确认,直接绑定账号
- 可构造钓鱼攻击:诱导用户扫描恶意二维码
利用方法:
- 在后台找到"微信绑定"功能
- 获取绑定二维码
- 制作钓鱼页面,诱导用户扫描
- 用户扫描后,攻击者账号与用户微信号绑定
0x6 漏洞五:Jeecg框架漏洞
一、框架简介
JeecgBoot是基于SpringBoot的低代码开发平台,常见漏洞包括:
- 默认接口信息泄露
- SQL注入
- 权限绕过
官网:jeecg.com
二、综合利用工具
推荐工具:jeecg-利用工具
三、接口信息泄露
测试步骤:
- 在大学缴费小程序中发现
tableName关键字 - 尝试常见表名(如
information_schema.tables) - 将host放到Web端访问,使用FindSomething插件扫描接口
- 发现敏感接口泄露400+数据表信息
- 获取大量身份证、手机号、姓名等敏感信息
四、SQL注入
Payload示例:
updatexml(1,concat(0x7e,user(),0x7e),1)
五、账号提权
操作流程:
- 使用register接口注册普通账号
- 查询管理员admin的账户ID
- 查询自己账号的ID
- 使用提权POC:
POST xxxxx/jeecg-boot/sys/user/addSysUserRole Content-Type: application/json {"roleId":"管理员角色ID","userIdList":["自己账号ID"]} - 成功将普通账号提升为管理员
六、Jeecg小技巧
-
常见泄露接口:
/v2/api-docs /swagger-ui.html /env/ /actuator/mappings /actuator/metrics -
关键字识别:
- jeecg
- /api/sys/
- /sys/user
-
默认弱口令:
- admin/123456
- jeecg/123456
0x7 总结
本次渗透测试共提交40-50个漏洞报告,主要发现:
- 框架系统默认弱口令
- 已知Nday漏洞(老系统未修复)
- 资产量大导致出洞率高
关键经验:
- 小程序与Web端联动测试
- 接口FUZZ的重要性
- 合理使用自动化工具提高效率
- 漏洞链利用(如信息泄露→弱口令→提权)
防御建议:
- 严格验证短信发送频率和格式
- 加强SessionKey保护机制
- JWT使用强密钥并禁用None算法
- OAuth2.0实现二次确认
- 自定义Jeecg默认接口和密码