在半年前的市级护网行动中,首次接触到一套教育系统的SSO登录平台。当时由于目标学校部署了Web应用防火墙(WAF)且安全防护较完善,虽发现注入点但未能成功利用。近期在对自有学校的系统进行内部安全评估时,重新发现了同款系统,并借此机会深入挖掘出多处SQL注入漏洞。
信息收集
本次测试目标为日常使用的校内系统,因此信息收集阶段主要聚焦于熟悉的功能模块。通过将浏览器流量代理至Burp Suite,逐个测试请求参数以寻找潜在攻击面。
第一处注入点
在教务系统的一个查询功能中,发现某个参数提交单引号会引发数据库报错,初步判断存在SQL注入漏洞。



通过数据库特有函数判断后端数据库类型:
'||+exp(290)+||'

'||+exp(291)+||'

当exp()函数参数为291时触发错误,符合Oracle数据库特性(其他数据库如MySQL在参数710左右报错)。进一步使用Oracle特有函数验证:
'||+length2(1)+||'

确认数据库为Oracle后,利用除零错误构造注入Payload:
'||+1/1+||''||+1/0+||'


判断当前数据库用户名的长度:
'||+1/(length(user)-4)+||'

'||+1/(length(user)-5)+||'

当长度减5时未报错,说明用户名为5个字符。随后逐字符猜解用户名:
'||+1/(ascii(substr(user,1,1))-78)+||'


第一位ASCII码为78,对应字母‘N’。使用Burp Suite的Intruder模块爆破剩余字符即可获取完整用户名。关于Oracle数据库的更多特性与安全知识可进一步深入。
第二处注入点
为挖掘更多漏洞,通过指纹识别横向探查了同架构的其他系统。在另一个后台模块中发现新的查询接口,同样存在无过滤的单引号报错:


注入验证Payload:
'||+1/(ascii(substr(user,1,1))-78)+||'


将该接口路径替换回原始系统进行测试,确认同样存在注入,成功标记第二处漏洞点。
第三处与WAF绕过
测试过程中发现多个类似接口均存在注入。以其中某个部署了WAF的证书申请站点为例,直接使用user函数会被拦截:

但length2等函数可正常使用。尝试多种常见绕过手法均告失败:
- 大小写转换:无效
- 插入脏数据:无效
- URL编码:无效
- 反引号包裹:无效
最终通过修改HTTP请求的字符编码头实现绕过。原请求头为:
Content-Type: application/x-www-form-urlencoded; charset=utf-8
将其更改为WAF可能不处理的编码格式:
Content-Type: application/x-www-form-urlencoded; charset=ibm037


服务器能够解析该编码,而WAF未正确识别,从而成功绕过防护。注入语句:
'||+1/(instrb(user,'Nxxxx')-1)+||'


成功获取数据库用户名。这种WAF绕过技术利用了中间件与服务器对编码处理的差异,是渗透测试中常用的技巧之一。
总结
通过本次对教育系统的深度测试,成功挖掘出多处基于Oracle数据库的SQL注入漏洞,并实践了通过修改HTTP编码头绕过WAF的实战方法。整个过程强调了在熟悉环境中结合工具进行持续测试的重要性,也为企业级系统的安全加固提供了参考思路。