凌晨两点,我盯着屏幕上的渗透数据MySQL错误日志,第17次尝试爆破root密码失败。渗透数据目标是渗透数据个政府遗留系统,数据库端口暴露在公网,渗透数据但密码强度高得离谱——这反而激起了我的渗透数据兴趣。kali里躺着几十个工具,渗透数据真正管用的渗透数据往往就那几个。
先扫端口,渗透数据nmap -sV 确认3306开着。渗透数据指纹识别显示MySQL 5.7,渗透数据老版本,渗透数据有已知漏洞。渗透数据但直接打metasploit的渗透数据exp太粗暴,容易被日志记录。渗透数据我选择先摸清业务逻辑——用hydra跑弱口令字典,顺便用sqlmap探测注入点。真正有意思的是,这套系统的web后台有个搜索框,参数过滤不严,sqlmap --risk=3 --level=5 直接拖出了库名和表前缀。
但光有注入不够。拿到数据库权限只是开始,真正难的是提权。我翻出/etc/passwd,发现web服务跑在www-data用户下,数据库却用root启动——典型的运维偷懒。这给了我机会:通过sqlmap的--os-shell参数,尝试向服务器写webshell。写入php后门,反弹shell到kali,一气呵成。整个过程没触发任何告警,因为目标压根没装入侵检测。
有个细节值得说:很多新手以为数据库渗透就是狂扫端口、暴力破解。实际上,最脆弱的环节往往是应用层的逻辑漏洞。我在这个案例里根本没碰密码,纯粹靠SQL注入的UNION查询绕过了认证。数据库的user表里存着明文密码——管理员连hash都懒得做,这比什么0day都实在。
提权成功后,我查看了binlog和慢查询日志。有意思的是,这个系统居然记录着所有SQL操作,包括管理员半夜手动执行的备份命令。顺着日志找到了备份脚本,里面硬编码了服务器root密码——和数据库密码是同一个。这下彻底沦陷了。
整个过程耗时4小时,真正花在技术上的时间不到一半。其余时间都在等响应、试错、翻文档。kali的工具再强大,也替代不了对目标系统的理解。有人迷信msf的自动化攻击链,但现实中的渗透更像解谜——每个系统都有独特的破绽,工具只是放大镜。
最后说句实话:这种政府遗留系统防护薄弱得可笑。防火墙规则形同虚设,数据库端口直接暴露,连基本的访问控制都没做。但反过来想,如果运维稍微认真点,比如用非root用户跑数据库、定期更换密码、装个WAF,我可能就得换思路了。渗透测试的本质,就是和人类的懒惰与疏忽赛跑。