渗透(二)
字数 1375 2025-08-05 12:50:26
渗透测试实战教学:从SQL注入到验证码漏洞利用
1. 案例背景分析
本次渗透测试案例展示了从发现漏洞到实际利用的全过程,主要涉及两种漏洞类型:
- SQL注入漏洞(在登录处)
- 验证码逻辑缺陷(在移动APP密码找回功能)
攻击者通过学校系统的渗透测试开始,逐步扩展到厂商其他系统,最终发现移动APP的严重漏洞。
2. SQL注入漏洞分析
2.1 漏洞发现
- 注入点位置:系统登录处的
newpass参数 - 检测工具:使用sqlmap进行自动化测试
- 特殊发现:系统支持堆叠注入(stacked queries),但常规命令执行受阻
2.2 深入利用尝试
- 尝试使用
sp_oacreate函数进行命令执行未果 - 可能原因:
- 数据库权限限制
- 安全防护机制拦截
- 函数被禁用
2.3 信息收集
- 通过页面底部版权信息识别厂商
- 使用FOFA搜索引擎进行资产发现:
- 语法示例:
app="厂商名称" - 发现同厂商其他系统存在类似注入漏洞
- 语法示例:
3. 移动APP验证码漏洞分析
3.1 测试环境搭建
- 使用安卓模拟器运行目标APP
- 配置Burp Suite进行流量拦截和修改
3.2 漏洞发现过程
- 测试密码找回功能
- 关键参数发现:
codeNum控制验证码长度- 默认值为6(生成6位验证码)
- 修改测试:
- 将
codeNum改为1 → 验证码变为1位 - 爆破可能性大幅提高(从10^6降到10^1)
- 将
3.3 漏洞利用
- 拦截密码找回请求
- 修改
codeNum=1 - 系统返回1位验证码
- 轻松爆破完成任意用户密码重置
4. 渗透测试技巧总结
4.1 信息收集技巧
- 版权信息利用:页面底部信息往往透露关键厂商信息
- FOFA资产发现:通过已知特征发现关联系统
- 历史经验复用:相似系统可能存在相同漏洞
4.2 漏洞挖掘技巧
-
参数篡改测试:
- 特别关注控制业务逻辑的参数(如
codeNum) - 尝试修改看似"只读"的参数
- 特别关注控制业务逻辑的参数(如
-
验证码漏洞挖掘方法论:
- 测试验证码长度是否可控
- 检查验证码复杂度是否可降级
- 验证码是否可预测或重放
-
SQL注入深入利用:
- 即使无法直接执行命令,也应尝试:
- 数据窃取
- 权限提升
- 跳板攻击内网
- 即使无法直接执行命令,也应尝试:
4.3 移动APP测试要点
- 必须配置中间人代理(Burp/Fiddler)
- 关注非UI参数(隐藏在请求中的业务参数)
- 模拟器环境要配置证书以解密HTTPS流量
5. 防御建议
5.1 针对SQL注入
- 使用参数化查询
- 最小权限原则配置数据库账户
- 禁用危险函数(如
sp_oacreate)
5.2 针对验证码漏洞
- 服务端严格控制验证码生成逻辑
- 禁止客户端控制验证码属性(长度、复杂度)
- 增加验证码使用的一次性token
- 实施合理的尝试次数限制
5.3 通用防御措施
- 敏感操作多重验证
- 定期安全审计
- 建立漏洞响应机制
6. 扩展思考
-
漏洞联动利用:
- 结合SQL注入获取用户手机号
- 利用APP漏洞重置这些用户的密码
- 形成完整攻击链
-
企业级安全影响:
- 同厂商多产品存在相似漏洞
- 反映开发过程中缺乏安全SDLC
- 需要建立统一的代码安全标准
-
自动化漏洞挖掘:
- 可编写脚本批量检测
codeNum类参数 - 自动化FOFA资产收集与漏洞验证
- 可编写脚本批量检测
本案例展示了从简单漏洞发现到深入利用的过程,强调了渗透测试中细致观察和勇于尝试的重要性,同时也提醒开发者在设计验证机制时需要从攻击者角度思考问题。