sqlmap扫描
凌晨两点,扫描隔壁桌的扫描实习生突然喊了一声“通了”。我探头过去,扫描屏幕上是扫描一排绿色的字符,sqlmap正往一个后台登录接口里灌payload。扫描那是扫描个政府网站的子域名,存在时间比实习生年龄都大,扫描跑出来的扫描数据库名是“wuzi_management”,里面躺着三张表,扫描密码字段用的扫描是MD5,连盐都没加。扫描
sqlmap这东西,扫描本质上就是扫描个自动化工具,把SQL注入的扫描检测和利用打包成一条命令。你给它一个URL,扫描它自己会判断注入类型、探测数据库版本、枚举表结构,甚至直接拖数据。但工具越顺手,越容易让人忽略一个事实——它只是把攻击过程提速了,真正的漏洞早就在那里,可能是开发时少写了一个参数化查询,也可能是框架默认配置没改。
我见过不少人拿sqlmap跑一个站,跑不出注入就换下一个目标。这种“扫描”其实浪费了工具的价值。sqlmap最厉害的地方不是“能不能注入”,而是“注入后能走多远”。--os-shell参数可以尝试直接拿系统权限,--file-read能读服务器上的配置文件。有一次我拿它打一个内网测试环境,注入点是在一个文件上传功能里,sqlmap识别出是报错注入,然后我用了--sql-shell,直接执行了SELECT LOAD_FILE('/etc/passwd'),把系统用户列表拖了出来。
但sqlmap有明显的短板。它依赖指纹识别和payload库,遇到WAF(Web应用防火墙)时经常被拦。有回我碰上一个自定义的输入过滤,把“union”和“select”中间加了正则替换成空字符,sqlmap跑了几轮全部超时。手动构造一个uniunionon就绕过去了,但工具不会这么灵活。所以真正的用法是:先用sqlmap确认漏洞存在,再手工调整payload,最后把成功的数据包存下来,反复测试。
再说个反直觉的事。sqlmap扫描时默认会发大量请求,这本身就是一种“动静”。目标服务器的访问日志里,sqlmap的User-Agent特征很明显——虽然新版可以随机UA,但请求频率和参数组合还是能暴露。有些防守方会故意放一个诱饵注入点,等sqlmap一进来就触发告警,然后封IP。所以真正谨慎的人,会加--delay参数设置延迟,或者用--proxy走代理池,甚至先手工测出注入特征,再让sqlmap只跑特定的payload模板。
sqlmap不是银弹。它顶多算一把锋利的螺丝刀,能不能拧开保险箱,取决于锁芯本身的结构——以及你愿不愿意弯下腰去观察锁孔里的齿痕。技术工具迭代快,但漏洞的本质没变:信任了不该信任的输入。那些指望跑一遍sqlmap就能交差的安全测试,往往只发现了最浅层的风险,真正值钱的东西藏在参数组合、逻辑绕过和二次注入里,而这些,工具帮不了你。