一年前开发公司的扫描器时, 我选用 sqlmap 来扫描 sql 注入.
当用 sqlmap 连续扫描同一域名的多个 url 后, 经常会返回:
[CRITICAL] connection timed out to the target URL or proxy. sqlmap is going to retry the request
因为对 server 端如何防御扫描不清楚, 我以为是 server 端对一个时间段内连接数达到某一值的 source_ip 采取拒绝连接操作. 因此我用 sqlmap 扫描时, 对连续的 N 个 url 用 “–proxy=PROXY” 设置一个不同的代理. 为了保证代理的数量和可用, 又实现了一个代理更新程序.
这样的确在很大程度上减少 “connection timed out” 的出现率, 但是今天发现了另外一个更为简单和有效的方法, 让我在心里直骂自己当初 SB.
方法很简单, 在用 sqlmap 扫描时, 添加选项 “–random-agent” 即可. 它会在每次连接时采用随机的 User-Agent .
可参考今年二月份 stackoverflow 上问的问题. : Getting ‘connection time out’ error each time on the same step in sqlmap
个人实测 “–random-agent” 是非常有效的. 由此可以推测, server 端应该是对同一 (source_ip, User-Agent) 的连接有限制, 一段时间内超过某个值则会拒绝链接.