当给sqlmap这么一个url的时候,它会:
1. 判断可注入的参数 2. 判断可以用那种SQL注入技术来注入 3. 识别出哪种数据库 4. 根据用户选择,读取哪些数据sqlmap支持五种不同的注入模式:
1. 基于布尔的盲注,即可以根据返回页面判断条件(真\|假)的注入。 2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。 3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。 4. 联合查询注入,可以使用union的情况下的注入。 5. 堆查询注入,可以同时执行多条语句的执行时的注入。(使用;分隔开多条语句,最为灵活,可以自己构造select(含)外的其他语句)sqlmap支持的数据库管理系统有:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB可以提供一个简单的URL,Burp或WebScarab请求日志文件,文本文档中的完整http请求或者Google的搜索,匹配出结果页面,
也可以自己定义一个正则来判断那个地址去测试。
测试GET参数,POST参数,HTTP Cookie参数,HTTP User-Agent头和HTTP Referer头来确认是否有SQL注入,
它也可以指定用逗号分隔的列表的具体参数来测试。可以设定HTTP(S)请求的并发数,来提高盲注时的效率。
用来连接数据库这是一个比较实用的功能,用来连接数据库格式为
设置显示信息的详细度:使用-v参数,共有七个等级:
0. 只显示python错误以及严重的信息。 1. 同时显示基本信息和警告信息。(默认) 2. 同时显示debug信息。 3. 同时显示注入的payload。 4. 同时显示HTTP请求。 5. 同时显示HTTP响应头。 6. 同时显示HTTP响应页面。可以通过学习sqlmap的payload来学习sql注入,这时需要使用3级。
获取目标方式目标URL
参数:-u或者–url
格式:http(s)://targeturl[:port]/[…]
例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs --users
从Burp或者WebScarab代理中获取日志
参数:-l
可以直接吧Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入。
从文本中获取多个目标扫描
参数:-m
文件中保存url格式如下,sqlmap会一个一个检测
?q=foobar ?id=1 *从文件中加载HTTP请求
参数:-r
sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
比如文本文件内如下:
POST /vuln.php HTTP/1.1 Host: User-Agent: Mozilla/4.0 id=1当请求是HTTPS的时候你需要配合这个–force-ssl参数来使用,或者你可以在Host头后面加上:443
处理Google的搜索结果
参数:-g
sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
例子:
python sqlmap.py -g "inurl:\".php?id=1\""此外可以使用-c参数加载sqlmap.conf文件里面的相关配置。
请求http数据
参数:–data
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
例子:
python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users参数拆分字符
参数:–param-del
当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数(默认是&)。
例子:
python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --usersHTTP cookie头
参数:–cookie,–load-cookies,–drop-set-cookie
这个参数在以下两个方面很有用:
web应用需要登陆的时候。
你想要在这些头参数中测试SQL注入时。
可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。
在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。
当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。
当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。
HTTP User-Agent头
参数:–user-agent,–random-agent
默认情况下sqlmap的HTTP请求头中User-Agent值是:
sqlmap/1.0-dev-xxxxxxx ()(这可能直接会被过滤掉或是触发警报,可以使用真实浏览器的useragent,百度一下就有了)
可以使用–user-anget参数来修改,同时也可以使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。
当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。
HTTP Referer头
参数:–referer
sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。
额外的HTTP头
参数:–headers
可以通过–headers参数来增加额外的http头
HTTP认证保护
参数:–auth-type,–auth-cred
这些参数可以用来登陆HTTP的认证保护支持三种方式:
1. Basic 2. Digest 3. NTLM例子:
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"HTTP协议的证书认证
参数:–auth-cert
当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file。
key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。
HTTP(S)代理
参数:–proxy,–proxy-cred和–ignore-proxy
使用–proxy代理是格式为::port。
当HTTP(S)代理需要认证是可以使用–proxy-cred参数:username:password。
–ignore-proxy拒绝使用本地局域网的HTTP(S)代理。
HTTP请求延迟
参数:–delay
可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。
设定超时时间
参数:–timeout
可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。
设定重试超时
参数:–retries
当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。
设定随机改变的参数值
参数:–randomize
可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。
利用正则过滤目标网址
参数:**–scope**
例如:
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com\|net\|org)"避免过多的错误请求被屏蔽
参数:–safe-url,–safe-freq