检测注入点统一格式:
sqlmap -u "http://www.code521.com/market1/index.php?market_id=1089" --random-agent --delay=0.5 --batch -v "4" --level=3
sqlmap -r "/root/url.t" --random-agent --delay=0.5 --batch -v "4" --level=3
sqlmap -u "http://www.code521.com/market1/index.php?market_id=1089" --random-agent --delay=0.5 --batch -v "4" --crawl=2 --level=3
sqlmap.py -g "inurl:\".php?id=1\""
加载目标的地址
-u 测试是否存在注入的动态或者伪静态的url地址。
-g 测试注入Google的搜索结果中的GET参数(只获取前100个结果)。like python sqlmap.py -g "inurl:\".php?id=1\""
此外可以使用-c参数加载sqlmap.conf文件里面的相关配置。
-l 可以直接吧Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入。
从文本中获取多个目标扫描
-m 文件中保存url格式,sqlmap会一个一个检测
-r sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数。
注意: 1:常用的是 2个 -u 。 跑cookie post的话直接抓包 结果-r 读取进来即可!
2:以上5个参数不能同时存在,选择了种方式不能再选择另外的方式,例如选择了-r 那么就不能使用-u
提交方式的整理
GET 通过-u 指定URL地址 -p 指定要测试的get请求参数
POST -u --data (-r 抓包的数据)
cookies -u --cookie (-r 抓包数据) --level(2 cookies开始测试)
User-Agent/Referer -u --level(3 Agent/Referer开始测试)
附加参数的调整
--data=DATA Data string to be sent through POST
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
例如: sqlmap.py -u "http://www.code521.com/index.php" --data="id=1" -f --banner --dbs --users
注意:项目实战中,post提交的数据中只是测试单个的参数是否存在sql注入的话这样用,测试所有的post用-r 结合抓包获取的数据做测试
--param-del 当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。
例如:sqlmap.py -u "http://www.code521.com/index.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users
注意:该参数当get 或者POST全球的参数比较多,而只是想测试众多参数中的几个参数的话需要使用该选项做分割
--user-agent
--random-agent
默认情况下sqlmap的HTTP请求头中User-Agent值是:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
可以使用--user-anget参数来修改,同时也可以使用--random-agnet参数来随机的从./txt/user-agents.txt中获取。
注意:强烈建议一定要加上--random-agent 参数,现在好多web防火墙检测到提交的请求数据包中包含sqlmap数据包直接就抛弃了。
--delay 可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的,针对防火墙限制快速访问有很大的作用
注意:强烈建议一定要加上 --delay 来限制请求间隔
--timeout 可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。
注意:超时时间30秒
--retries 当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
注意:可以不用修改
--randomize 可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。
注意:某种条件之下,这个是必须要用到的。抓包多次请求查看,现在这些情况越来越多,一定要注意。
--scope burp 抓取的结果很多,可以通过该参数指定的正则表达式来匹配内容,
例如:sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
第三方扫描器,爬行出来的目标可以通过正则来指定跑,例如爬行的内容好多静态的文件可以通过该参数指定过滤的静态内容之来扫描动态的参数
--safe-url 有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。
提供一个安全不错误的连接,每隔一段时间都会去访问一下。
注意:不要怀疑该参数的作用,在不知道防火墙策略的时候这种办法有时间效果很好
--safe-freq 有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。
提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。
注意:不要怀疑该参数的作用,在不知道防火墙策略的时候这种办法有时间效果很好
--eval 在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用--eval参数在每次请求时根据所写python代码做完修改后请求。
例如:sqlmap.py -u "http://www.code521.com/index.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
注意:现在这种情况遇到很多,每次请求后面的里面的参数动态变化。
--prefix
--suffix 在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。
发现0day自己编写payload需要是该参数
--tamper sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用--tamper参数对数据做修改来绕过WAF等设备。
注意:转换注入字符过防火墙,自带很多脚本,mysql mssql等,有专门的介绍,地址:::
详细提交信息查阅
-v VERBOSE Verbosity level: 0-6 (default 1) 如果你想看到sqlmap发送的测试payload最好的等级就是3。
0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。