1. 目标发现与信息搜集:从茫茫网海中定位目标
说实话,这类站点的发现过程,很多时候带点偶然性。我那天其实是在做常规的资产测绘,用FOFA这类网络空间搜索引擎,尝试寻找一些特定CMS的站点。这类站点通常有非常明显的特征,比如特定的标题、特定的JS文件路径,或者一些独特的响应头信息。我用的搜索语法其实不复杂,主要是围绕一些棋牌类系统的关键词,比如 title="棋牌"、body="真人娱乐",再结合一些特定的后台路径特征,比如 body="/admin/login.php" 或者 header="Server: Microsoft-IIS/8.5" 这类组合。
很快,结果列表里就出现了几十个看起来“同宗同源”的站点。点开几个看看,界面布局、功能模块,甚至一些前端代码的注释都一模一样,基本可以断定是同一套源码部署的多个分站。这种“批量生产”的站点,往往有一个共同点:安全配置高度一致。一个站有漏洞,其他站大概率也跑不掉。这为我们后续的批量测试提供了极大的便利。
我随便选了一个作为切入点。第一步永远是信息搜集,这活儿就像侦探查案,细节决定成败。我习惯先用浏览器插件看看它的技术栈:前端框架、引用的第三方库、有没有暴露的API接口。然后用 nmap 或者 masscan 快速扫一下端口,看看除了80/443的Web服务,还开了哪些端口,比如数据库的1433(MSSQL)、3306(MySQL),或者远程桌面的3389。这一步能帮我们快速勾勒出目标的网络轮廓。
2. 漏洞探测与确认:SQL注入的发现与利用
信息搜集完,就该找入口了。这类站点最常见的入口点就是登录框、搜索框、订单查询这些和数据库有交互的地方。我习惯先用 Burp Suite 抓个登录请求包,保存成 login.txt,然后丢给 sqlmap 去跑。
这里有个小技巧,直接用 -r 参数指定请求文件,sqlmap 会自动解析里面的参数进行测试。命令很简单:
python sqlmap.py -r login.txt --batch --level 3 --risk 2
--batch 是让它自动选择默认选项,别老问我;--level 和 --risk 调高一点,测试会更全面,当然也可能触发更多的WAF规则。
跑了一会儿,结果出来了,提示存在堆叠注入(Stacked Injection)。这可是个“好东西”。普通的注入可能只能查询数据,但堆叠注入允许我们在一次查询中执行多条SQL语句,这意味着我们能做的就多了,比如直接调用数据库的存储过程来执行系统命令。
为了确认漏洞的可用性,我手动构造了一个Payload测试延时:
admin'; WAITFOR DELAY '0:0:5' --
在密码框里输入这个(或者通过Burp改包),提交后页面响应明显延迟了5秒,这说明我们的延时语句被执行了,漏洞真实存在。而且,因为是堆叠注入,我们可以尝试更“危险”的操作,比如开启 xp_cmdshell。这是MSSQL里一个非常强大的扩展存储过程,能直接执行操作系统命令。很多管理员会禁用它,但我们可以试试:
admin'; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; --
如果执行成功,我们基本上就拿到了一个通往系统命令行的“后门”。
3. 初步权限获取:从数据库到系统命令执行
确认 xp_cmdshell 能开启后,事情就简单了。

643

被折叠的 条评论
为什么被折叠?



