目录
- 1. 指定输出级别
- 2. 指定目标
- 2.1 直接连接数据库
- 2.2 指定目标URL
- 2.3 从代理日志中解析目标
- 2.4 从远程站点地图文件(.xml)中解析目标
- 2.5 从文本中解析目标
- 2.6 从文件加载HTTP请求
- 2.7 将google搜索结果作为攻击目标
- 2.8 从配置INI文件获取目标
- 3. 请求
- 3.1 指定HTTP方法
- 3.2 指定HTTP数据
- 3.3 指定参数分割符
- 3.4 指定cookie
- 3.5 指定HTTP User-Agent
- 3.6 指定HTTP Host
- 3.7 指定HTTP Referer
- 3.8 指定额外字段
- 3.9 HTTP协议认证
- 3.10 HTTP协议私钥认证
- 3.11 忽略401错误(未授权)
- 3.12 使用HTTP(S)代理
- 3.13 Tor匿名网络
- 3.14 设定每个HTTP请求之间的延迟
- 3.15 设置超时时间
- 3.16 连接超时后的最大重试次数
- 3.17 随机更改参数
- 3.18 用正则表达式过滤代理日志中的目标
- 3.19 避免过多错误请求而被屏蔽
- 3.20 关闭参数值的URL编码
1. 指定输出级别
参数:-v
值:
值 | 作用 |
---|---|
0 | 只显示Python回源(tracebacks),错误(error)和关键(criticle)信息。 |
1 | 同时显示信息(info)和警告信息(warning)(默认为1) |
2 | 同时显示调试信息(debug) |
3 | 同时显示注入的有效载荷(payloads) |
4 | 同时显示http请求 |
5 | 同时显示http响应头 |
6 | 同时显示http响应内容 |
使用:默认为1,一般用3即可。
2. 指定目标
2.1 直接连接数据库
参数:-d
背景:针对单个数据库实例,可以用以下两种方式连接。
分类 | 命令 |
---|---|
数据库是MySQL,Oracle,Microsoft SQL Server,PostgreSQL等时 | DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME |
数据库是SQLite,Microsoft Access,Firebird等时 | DBMS://DATABASE_FILEPATH |
使用:
用root用户(密码为root)连接本地mysql上面的数据库testdb:
sqlmap -d "mysql://root:root@127.0.0.1:3306/testdb"
2.2 指定目标URL
参数:-u 或者 —url
背景:直接对单个网站进行注入检测。
值:https://www.xxx.com:9999/index.html
使用:sqlmap -u "http://www.target.com/vuln.php?id=1"
2.3 从代理日志中解析目标
参数:-l(小写L)
背景:指定一个Burp或WebScarab的代理日志文件,Sqlmap将从日志文件中解析出可能的攻击目标,并逐个尝试进行注入。
值:表示日志文件的路径。
2.4 从远程站点地图文件(.xml)中解析目标
参数:-x
背景:为了提高收录或者方便rss订阅,很多站点都有站点地图。Sqlmap可以直接解析xml格式的站点地图。
值:站点的xml链接。
使用:sqlmap -x http://www.target.com/sitemap.xml
2.5 从文本中解析目标
参数:-m
背景:提供URL列表文件,sqlmap将逐一扫描每个URL。
值:URL列表文件路径。
使用:sqlmap -m url.txt
2.6 从文件加载HTTP请求
参数:-r
背景:可以将一个HTTP请求保存在文件中,然后使用参数“-r”加载该文件,这样,你可以跳过其他一些选项的使用(例如设置Cookie,发布数据等),以该文件中HTTP请求目标为攻击目标进行测试。
值:http请求的文件。
使用:sqlmap -r get.txt
2.7 将google搜索结果作为攻击目标
参数:-g
背景:将google搜索的前一百条结果作为目标进行检测,需要科学上网。
值:google hack语句
使用:sqlmap -g "inurl:\".php?id=1\""
2.8 从配置INI文件获取目标
参数:-c
背景:从配置INI文件获取目标。例如sqlmap下载目录下面的文件sqlmap.conf,该配置文件可以指定目标地址,代理等各种参数,看一下配置模板文件即可理解。
值:配置文件。
使用:sqlmap -c a.conf
3. 请求
指定http请求的相关参数。
3.1 指定HTTP方法
参数:–method=
背景:一般情况下,会自动检测请求的方法。在某些特定的情况下需要强制指定方法。
值:方法
使用:sqlmap -u “https://www.baidu.com/a.php?id=1” --method=put
3.2 指定HTTP数据
参数:–data=
背景:默认情况下,用于执行HTTP请求的方法是GET,但是当我们使用data参数,则HTTP会使用post方法将参数当作HTTP data提交,同时也会检测此参数有没有注入漏洞。
值:post提交的数据
使用:sqlmap -u "http://www.target.com/vuln.php" --data="id=1"
3.3 指定参数分割符
参数:–param-del=
背景:一般情况下,网站会用&作为参数的分隔符,这也是SQLMAP默认使用的分隔符,如果有些web application不使用&作为分隔符的话,那么就使用–param-del去告诉sqlmap分隔符是什么。
使用:sqlmap -u “http://www.xxxxx.com/a.php?id=1;food=2” --param-del=”;”
3.4 指定cookie
背景:
- 指定cookie可以用于两种情况:
- web应用程序需要基于cookie的身份认证,并且你含有cookie
- 你想要检测并利用cookie注入。(当–level设置为2或者更高的时候,sqlmap会检测cookie是否存在注入漏洞。)
- cookie的字符分隔通常是分号。
参数:
参数 | 作用 |
---|---|
–cookie | 指定cookie的内容 |
–cookie-del | 指定cookie的分隔符 |
–load-cookies | 也可以把cookie保存在Netscape / wget格式的文件中,通过此参数来调用 |
–drop-set-cookie | 如果在通信过程中的任何时候,Web应用程序都会响应Set-cookie标题,则sqlmap会自动使用其他的HTTP请求中的值作为cookie,使用此参数sqlmap将会忽略使用cookie。 |
3.5 指定HTTP User-Agent
参数:
参数 | 作用 |
---|---|
–user-agent | 自定义User-Agent |
–random-agent | 从sqlmap自带的文本文件中随机选择一个user-agent。这个文件是 ./txt/user-agents.txt |
背景:默认情况下,sqlmap使用的User-Agent是sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
。(当 --level设置为3或者更高时,sqlmap会自动检测user-agent是否存在注入漏洞)
3.6 指定HTTP Host
参数:–host
背景:默认情况下,HTTP Host是从提供的目标URL中分析的,也可以手动设置Host。(当–level设置为5,则会对HTTP Host进行SQL注入测试)
3.7 指定HTTP Referer
参数:–referer
背景:默认情况下,没有HTTP Referer报头在HTTP请求发送。但是可以伪造HTTP Referer标头值。(当–level设置为3或者更高时,则会对HTTP Referer进行注入测试)
3.8 指定额外字段
参数:–headers
使用:sqlmap -u “http://www.xxx.com/a.php?id=1” --headers=”X-A : A \nX-B : B”
背景:可以在sqlmap发送的HTTP请求报文头部添加额外的字段。若添加多个字段,用”\n”分隔。
3.9 HTTP协议认证
参数:
参数 | 说明 |
---|---|
–auth-type | 用于指定认证方式。认证方式有三种:Basic,Digest,NTLM。 |
–auth-cred | 用于给出身份认证的凭证。格式:username:password |
背景:用于进行http协议认证。
使用:sqlmap -u “http://www.xxxxx.com/a.php?id=1” --auth-type Basic --auth-cred “admin:admin”
3.10 HTTP协议私钥认证
参数:–auth
背景:当Web服务器需要客户端证书和用于身份验证的私钥时,应使用此选项。提供的值应该是PEM格式的key_file,包含你的证书和私钥。
3.11 忽略401错误(未授权)
参数:–ignor-401
背景:如果你在测试返回401错误的站点时想忽略它并继续测试,则可以使用开关--ignore-401
,这是个开关参数,后面不需要加其他的数据。
3.12 使用HTTP(S)代理
参数:
参数 | 作用 |
---|---|
–proxy | 设置代理,格式为:http://url:port |
–proxy-cred | 当http(s)需要认证时,可以使用这个参数来提供凭证,格式:username:password |
–proxy-file | 指定一个包含有代理列表的文件,在连接时,会依次使用文件里面的代理,当代理无效时,会自动调到下一个代理 |
–ignor-proxy | 忽略代理设置 |
3.13 Tor匿名网络
背景:如果需要匿名,除了通过定义HTTP(S)代理服务器,还可以安装类似Privoxy这样的软件按照Tor的安装指导配置一个Tor客户端。
参数:
参数 | 作用 |
---|---|
–tor | 设置好Tor客户端后,使用这个参数让sqlmap自动设置使用Tor代理。 |
–tor-type | 自定义代理的类型。 |
–to-port | 自定义代理的端口。 |
–check-tor | 使用这个开关,可以保证所有的配置都正确,sqlmap会检查是否一切数据都走的匿名代理,如果检查失败,sqlmap会警告你并退出。 |
3.14 设定每个HTTP请求之间的延迟
参数:–delay
背景:默认情况下,不设置延迟。可以指定每个HTTP(S)请求之间等待的秒数。有效值是一个浮点数,例如0.5意味着半秒。
3.15 设置超时时间
参数:–timeout
背景:默认的超时时间是30s。可以通过这个参数手动设置超时时间,有效值为一个浮点数,比如10.5意味着十秒半。
3.16 连接超时后的最大重试次数
参数:–retries
背景:连接超时后sqlmap会重试连接,默认情况下,重试次数为3次。使用这个参数可以指定HTTP(S)连接超时时的最大重试次数。
3.17 随机更改参数
参数:–randomize
背景:可以指定请求参数名称,这些参数在请求期间根据原始长度和类型随机更改。
3.18 用正则表达式过滤代理日志中的目标
参数:–scope
背景:指定一个Python正则表达式对代理日志进行过滤,只测试符合正则表达式的目标。
使用:python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
3.19 避免过多错误请求而被屏蔽
背景:有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的盲注测试会产生大量错误请求。为了避免被限制,我们可以每隔一段时间来访问正确的url。使用以下参数,sqlmap将会每隔一段时间访问一个正确的URL,并且不会对其进行任何注入。
参数:
参数 | 作用 |
---|---|
–safe-url | 隔段时间就访问一下正确的URL |
–safe-post | 访问正确URL时携带的POST数据 |
–safe-req | 从文件中载入安全HTTP请求 |
–safe-freq | 每次测试请求之后都会访问一下安全的URL |
3.20 关闭参数值的URL编码
参数:–skip-urlencode
背景:默认情况下sqlmap会对参数进行编码。但是又的服务端只接受未编码的参数,这时候可以使用这个参数来停止sqlmap的自动编码。