您现在的位置是:休闲 >>正文
使用sqlmap判断sql注入点
休闲2177人已围观
简介sqlmap的判断逻辑其实很直白:它往目标参数里扔各种恶意载荷,然后观察响应是否出现数据库特有的错误、页面内容变化或者时间延迟。但很多人第一步就卡住了——到底该拿哪个URL去试? 拿个真实例子说吧。之 ...
sqlmap的使用判断逻辑其实很直白:它往目标参数里扔各种恶意载荷,然后观察响应是判断否出现数据库特有的错误、页面内容变化或者时间延迟。入点但很多人第一步就卡住了——到底该拿哪个URL去试?使用
拿个真实例子说吧。之前审计一个开源商城系统,判断登录接口的入点username参数直接拼进了SQL查询。我用浏览器抓包看到POST请求长这样:username=admin&password=123456。使用这时候别急着上sqlmap,判断先手动在username后面加个单引号,入点如果页面报错信息里出现You have 使用an error in your SQL syntax,基本就实锤了。判断但这只是入点第一步,sqlmap要确认的使用是“可注入”而非“有报错”。
确认可注入后,判断命令就简单了:sqlmap -u "http://target.com/login" --data="username=admin&password=123456" -p username。入点注意-p参数指定了测试点,否则sqlmap会把password也测一遍,浪费时间。这里有个细节——如果目标站点有WAF,你得加--tamper=space2comment或者--random-agent来绕过,但初次判断注入点用不着这些花活,裸测就够了。
跑起来之后观察输出。sqlmap会依次测试布尔盲注、时间盲注、报错注入和联合查询。如果屏幕上出现Parameter 'username' is vulnerable,恭喜,注入点确认。但注意,有时候它会提示unable to connect to the target,多半是网络问题或者目标限速,这时候加个--delay=1就能缓解。
有个坑必须提——sqlmap默认会发大量请求,生产环境容易把业务打挂。我习惯加--level=1 --risk=1只做基础检测,再配合--current-user快速验证权限。如果目标是POST接口且参数值有特殊字符,记得用--data传原始报文,别用-u硬拼URL,否则百分百报错。
判断注入点这事,本质是验证“参数是否被数据库解析”。sqlmap只是自动化了这个过程,但你要理解它的输出。比如它报boolean-based blind,说明页面存在真假条件差异;报time-based blind,说明有延迟函数返回。这两种情况都算注入点,但利用难度不同——时间盲注需要配合--time-sec=3调整超时,否则误判率很高。
最后说个反直觉的经验。有时候sqlmap报not injectable,不代表真的没漏洞。可能是目标参数经过了编码,或者后端用了参数化查询。我遇到过把JSON格式的POST数据直接拼进SQL的奇葩案例,sqlmap默认检测不了,得用--json-data='{ "username":"*"}'指定注入位置。所以判断注入点,工具只是辅助,核心还是看代码逻辑——如果开发写了拼接语句,那注入点必然存在,只是藏得深不深的问题。
Tags:
相关文章
ruby是什么意思
休闲Ruby这个词,你问十个程序员,九个会告诉你是一种编程语言。但你要是问一个珠宝商,他会说是红宝石。问一个英国人,他可能会想起深红色。这个词在技术圈和现实世界里,含义是割裂的。 1993年,日本人松本行 ...
【休闲】
阅读更多webshell后门
休闲2023年夏天,某电商平台的安全团队在例行巡检时发现了一台服务器上多了一个叫cache.php的文件。文件不大,内容看起来像是正常的缓存逻辑,但其中一行被注释掉的代码里藏着一句eval($_POST[ ...
【休闲】
阅读更多51计划网飞艇网页版
休闲打开“51计划网飞艇网页版”的页面,第一眼看到的是个极简的登录框,背景是深蓝色渐变,中间浮着一行白色小字:“实时数据同步中”。没有广告弹窗,没有花哨的动画,连注册按钮都藏得很深——得把鼠标移到右上角一 ...
【休闲】
阅读更多