在一次安全测试过程中,发现了一个看起来挺有意思的系统。

01. 信息收集与参数发现
首先,通过浏览器的开发者工具(F12)检查网络请求,从中提取出关键的请求链接进行仔细观察。

02. 初步注入测试与异常响应
发现请求中包含id参数,立刻尝试进行SQL注入测试。

初步测试表明存在注入的可能性。

然而,当尝试使用and 1=1时,页面却返回了“数据库连接出错”的提示。这显然不正常——如果数据库真的连接出错,那么正常的id=5请求也应该失败才对。因此,初步判断这很可能是一个简单的WAF(Web应用防火墙)规则,拦截了特定关键字后返回了自定义的错误页面。

03. WAF规则分析与验证
为了验证猜想,开始尝试删减或变换测试Payload中的字符。


测试发现,问题很可能出在and这个关键字上。


同时确认了这是一个数字型注入点。
04. 编写tamper脚本绕过WAF
既然and被拦截,可以尝试编写sqlmap的tamper脚本进行绕过。一个常见的思路是使用&&替代and。

使用sqlmap配合tamper脚本进行测试。


测试过程中遇到了302状态码跳转,这可能是导致自动化工具识别困难的原因。于是转为手工验证,尝试利用报错注入获取信息,例如xp_cmdshell的执行权限。

结果显示没有权限。

05. 手工注入获取管理员数据
既然自动化工具遇到阻碍,就继续深入进行手工渗透测试。首先尝试获取后台管理员表的数据。

成功爆出了管理员表的字段名。

06. 利用报错包引导sqlmap与密码破解
如何让sqlmap重新有效工作呢?一个技巧是:直接在浏览器的响应包中触发一个SQL报错,然后将这个包含报错信息的请求包保存下来,交给sqlmap识别。 sqlmap会以这个报错页面作为识别基准,从而绕过302跳转的干扰。

使用这个方法,成功利用sqlmap跑出了管理员表的哈希密码。

密码是乱码(可能是编码问题或加密),直接查询MySQL数据库中的密码明文字段。

发现管理员权限字段的值为0。

批量查询用户表,发现只有一个管理员账户。同时,测试发现系统存在大量弱口令账户。成功登录一个具有管理员权限的弱口令账户,点到为止。

在后台发现可以修改用户密码,于是直接修改最高权限admin账户的密码,完成权限获取。


(注:以上涉及的系统漏洞均已提交至教育行业安全应急响应中心并完成修复。)
07. 经验总结
- 权限获取思路要灵活:不一定要直接拿到
admin账户,只要能获取到具有管理员权限的账户即可达成目标。
- 准确判断错误信息:“数据库连接错误”未必是真正的数据库故障,很可能是WAF或应用层的自定义拦截提示,需要结合上下文逻辑进行判断。
- 处理工具识别障碍:对于存在验证码、302跳转等干扰,导致sqlmap无法正常识别注入点的情况,可以手动构造一个触发SQL报错的请求包,让sqlmap基于此报错页面进行注入检测,这是一个有效的绕过技巧。
免责声明:本文所涉及的测试案例均已合法提交至相关漏洞平台并确认修复,内容仅限于技术研讨与经验分享,严禁用于任何非法用途。任何个人或组织利用本文所述技术造成的违法行为,均由其自行承担全部责任。
|