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

892

积分

0

好友

118

主题
发表于 4 天前 | 查看: 12| 回复: 0

在对某医疗系统进行纯黑盒测试时,由于目标未对WAF添加任何白名单策略,导致IP在发送恶意字符时频繁被封禁。测试过程需采用“飞行模式-访问网站-飞行模式”的间歇性连接策略,以规避检测。幸运的是,其中一个子系统拦截机制相对宽松,得以开展后续测试。

首先映入眼帘的是系统登录框,抓包发现登录过程为明文传输,省去了寻找加解密函数的麻烦。

登录界面

随意输入“1111”作为用户名和密码,系统返回了明确的“用户名或密码错误”提示,这为用户名枚举创造了条件。

错误提示

利用自定义用户名字典进行爆破,同时将爆破速率降至每秒一次,避免触发封禁。

Burp爆破设置

最终成功枚举出两个有效用户名。在后续使用数万条密码字典进行慢速爆破时,竟发现其中一个账号存在弱口令,成功登录。

弱口令登录成功

该账号权限较低,仅具备订单查询功能。在查询框尝试基础SQL注入探测,如 or 1=1,发现未触发IP封禁,便深入进行测试。

抓取查询请求数据包,初步测试发现单引号被过滤,导致无法构造闭合。尝试使用CHR()函数绕过未果。在耗时两小时后,转换测试思路,对数据包中另一个未使用百分号和括号的参数进行探测,此时仅需解决单引号问题。

因AI生成的Payload持续包含单引号,故转向测试基于时间盲注的Payload。初次尝试的延迟语句导致数据库连接失败并再次触发封禁。调整策略后,通过资料检索获得了有效的Oracle数据库时间盲注Payload:

' AND CASE WHEN ((SUBSTR((SELECT user FROM dual),1,1))='A') THEN DBMS_PIPE.RECEIVE_MESSAGE('rds',3) ELSE 0 END=0 AND '1'='1

其原理是,利用SUBSTR函数截取当前数据库用户的第一个字符,判断是否等于‘A’,若条件为真则执行DBMS_PIPE.RECEIVE_MESSAGE函数引发3秒延迟,否则无延迟。使用Burp Suite对此Payload进行遍历爆破。

时间盲注爆破

通过时间差成功判断出数据库用户信息,证实了SQL注入漏洞的存在。值得注意的是,直接使用SQLmap或代理池测试在此场景下均告失败。

成功登录的两个账号中,账号A无任何功能菜单,账号B具有订单查询功能。这引发了越权测试的构想:将低权限账号A的Cookie,替换到高权限账号B的查询接口请求中,以验证是否存在水平越权。测试结果表明,系统在此处做了有效的权限校验,越权未成功。

账号A无功能
账号B有功能

在对账号B的功能进行深入探索时,发现一处文件上传点。

上传点

根据经验,此类功能常为前端校验。通过抓包修改文件扩展名,尝试上传JSP文件。

上传JSP文件

上传成功,这导致了严重的文件上传漏洞,并最终实现了getshell。初步上传的Webshell因特征明显被拦截,后续通过多层Base64编码等方式进行混淆免杀,成功绕过防护。




上一篇:英伟达H200入华前景分析:安全审查与供应链平衡的关键
下一篇:星图云开发者平台解析:全栈可视化数字孪生开发与工业互联应用
您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2025-12-17 16:18 , Processed in 0.154752 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

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