游客发表
一个下午,入漏我拿刚写好的洞扫扫描器对着自家测试站跑了一遍,屏幕上滚过几百条告警。描工真正能用的入漏,三条。洞扫其余全是描工误报——把普通表单参数当成注入点,把数字型字段的入漏报错当成SQL异常。这行当就这样,洞扫工具满地跑,描工靠谱的入漏没几个。
Sqlmap当然是洞扫最出名的那个。它确实强,描工能自动检测、入漏注入、洞扫拖库一条龙。描工但正因为强,反而容易让人偷懒。很多新手拿到手就对着目标一顿乱扫,结果被WAF拦得死死的,或者把生产库搞挂了。我见过不止一次,有人拿Sqlmap默认参数去打带防护的站点,最后连自己IP都被封了。工具是死的,注入点是活的,你得知道它背后在干什么。
自己写扫描器反而更可控。核心逻辑其实不复杂:先找参数入口,再往里面塞恶意载荷,最后看响应差异。比如你给`id=1`后面加个单引号,如果页面报错信息里带出SQL语句片段,那基本就能确认有注入了。再进阶一点,用布尔盲注——`id=1 and 1=1`返回正常,`id=1 and 1=2`页面空白,这就是典型的可探测特征。
但真正麻烦的是绕过过滤。现在的应用没几个裸奔的,多少都做了点防护。有的过滤关键字,有的转义特殊字符,有的直接上WAF。这时候就得拼细节了。注释符`--`被过滤了,试试`#`;空格被过滤了,用`/**/`代替;`union select`被拦,拆成`union all select`或者用十六进制编码。这些手段说穿了不值钱,但组合起来变化无穷。我见过最野的写法,是把整个payload用`%00`截断来绕过某些老旧网关的检测。
还有一类坑藏在编码里。有些开发者以为对参数做了urlencode就安全了,其实后端如果自动解码一次,你的注入照样能成。更阴的是那种把用户输入拼进`order by`子句的,这地方没法用union,只能靠报错或者时间盲注一点点磨。时间盲注最烦人,一个请求要等五秒才知道结果,扫几百个参数得跑半小时。但有时候它就是唯一的路。
说实话,扫描器这东西,七分在写,三分在用。写的时候你得懂数据库语法差异——MySQL和Oracle的报错信息格式完全不一样,注入语句也不通用。用的时候你得会看结果——一条告警里带着`mysql_fetch_array()`的报错,和一条只是页面显示`500`的告警,可信度天差地别。前者几乎实锤,后者八成是参数类型不对触发了异常。
最后提醒一句,别拿公共工具打你没授权的目标。我自己就吃过亏——早年学艺不精,拿扫描器扫了个小网站练手,结果对方服务器崩了,人家顺着IP找上门来。赔礼道歉折腾了一星期。工具本身没善恶,但用的人要心里有数。扫描器的价值不在扫出多少漏洞,在于你能不能从一堆噪音里认出真正的风险点。这活儿,急不得。
友情链接