百科

使用sql对端口进行渗透测试

时间:2010-12-5 17:23:32  作者:知识   来源:探索  查看:  评论:0
内容摘要: 凌晨两点,我盯着终端里那条报错记录——某政府门户的搜索接口返回了完整的SQL异常堆栈。这不是什么高深漏洞,只是开发忘了过滤单引号。但就是这一条报错,让整个数据库结构像摊开的病历本一样暴露在眼前。端口

凌晨两点,使用渗透我盯着终端里那条报错记录——某政府门户的对端口搜索接口返回了完整的SQL异常堆栈。这不是进行什么高深漏洞,只是测试开发忘了过滤单引号。但就是使用渗透这一条报错,让整个数据库结构像摊开的对端口病历本一样暴露在眼前。端口扫描只是进行敲门砖,SQL注入才是测试真正撬开保险柜的撬棍。

先别急着上sqlmap。使用渗透手工探测才是对端口基本功。我用nmap扫出3306端口开放时,进行第一反应不是测试直接连,而是使用渗透先看版本信息。MySQL 5.5.20——这版本存在UDF提权漏洞,对端口但前提是进行得拿到数据库权限。端口本身不会说话,但结合中间件指纹和响应头里的X-Powered-By,能推断出后端语言和框架。比如ThinkPHP的报错页面会泄露数据库配置信息,Laravel则会把.env文件路径吐出来。

真正有意思的是绕过WAF。某次渗透测试,目标网站装了安全狗,我试了十几次经典payload全被拦截。后来发现参数值被URL解码两次——安全狗只检查第一次解码后的内容。我把payload编码成%2527,服务器端第二次解码后变成单引号,直接绕过。这种攻防对抗的细节,比工具扫描有趣多了。

端口渗透不是孤立的。3306开放往往意味着同网段还有其他服务。我习惯先扫全端口,把80、443、8080这些web端口和数据库端口关联起来看。有一次发现目标只开了3306和22,但22端口是SSH。尝试用弱口令爆破,root/123456居然直接进去了。数据库端口没攻破,倒是从系统端口撕开了口子。别小看这种土办法,很多内网服务器密码简单得吓人。

说到SQL注入的实际操作,最怕遇到过滤了空格的情况。用/**/代替空格,或者用括号包裹表达式,都是老套路。但碰上过滤了注释符的,就得另辟蹊径。比如用MySQL的版本号特性:select*from(select(version()))x——这招能绕过多数过滤规则。当然,前提是能确定目标数据库类型。Oracle和SQL Server的语法差异很大,盲目套payload只会浪费时间。

提权阶段才是真正考验耐心的时候。MySQL低权限用户读不了文件,但可以通过load_file()读取/etc/passwd。如果恰好web应用有文件上传功能,可以把UDF写到插件目录。某次测试,目标用了阿里云的RDS,权限隔离做得严实,折腾两小时没提权成功。最后发现同服务器的另一个站点用了老版本phpMyAdmin,直接通过它的SQL执行功能获取了系统shell。端口渗透从来不是单点突破,而是组合拳。

写这篇的时候,我看了眼时间——凌晨三点十五分。窗外有只野猫在叫,像极了那些没被发现的注入点。渗透测试就是这样,90%的时间在踩坑,10%的瞬间让你觉得一切都值得。下次再遇到开放3306的端口,别急着跑脚本。先泡杯咖啡,手工测几个参数,说不定能发现比sqlmap更有意思的东西。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap