sqlmap-较难理解的参数说明记录

Posted 白帽安全技术复现

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlmap-较难理解的参数说明记录相关的知识,希望对你有一定的参考价值。

避免错误请求过多而被屏蔽

参数:--safe-url、--safe-post、--safe-req 和--safe-freq

有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而 Sqlmap 的测试往往会产生大量错误请求,为避免被屏蔽,可以时不时的产生几个正常请求以迷惑服务器。有以下四个参数与这一机制有关:

--safe-url: 隔一会就访问一下的安全 URL

--safe-post: 访问安全 URL 时携带的 POST 数据

--safe-req: 从文件中载入安全 HTTP 请求

--safe-freq: 每次测试请求之后都会访问一下的安全 URL

这里所谓的安全 URL 是指访问会返回 200、没有任何报错的 URL。相应地,Sqlmap 也不会对安全 URL 进行任何注入测试。

关闭 URL 编码

参数:--skip-urlencode

Sqlmap 默认会对 URL 进行 URL 编码,可以使用该参数关闭 URL 编码。

绕过 CSRF 保护

参数:--csrf-token 和--csrf-url

现在有很多网站通过在表单中添加值为随机生成的 token 的隐藏字段来防止 CSRF 攻击,Sqlmap 会自动识别出这种保护方式并绕过。但自动识别有可能失效,此时就要用到这两个参数。

--csrf-token用于指定包含 token 的隐藏字段名,若这个字段名不是常见的防止 CSRF 攻击的字段名 Sqlmap 可能不能自动识别出,需要手动指定。如 Django 中该字段名为csrfmiddlewaretoken,明显与 CSRF 攻击有关。

--csrf-url用于从任意的 URL 中回收 token 值。若最初有漏洞的目标 URL 中没有包含 token 值而又要求在其他地址提取 token 值时该参数就很有用。

在每次请求前执行特定 Python 代码

参数:--eval

直接看例子

Copy

python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

每次发送请求前,Sqlmap 都会依据 id 值重新计算 hash 值并更新 GET 请求中的 hash 值。

随机化参数值

参数:--randomize

使用该参数,Sqlmap 会随机生成每次 HTTP 请求中参数的值,值的类型和长度依照于原始值

身份认证

参数:--auth-type 和--auth-cred

这些参数用于进行身份认证。--auth-type用于指定认证方式,支持以下三种身份认证方式:

Basic

Digest

NTLM

--auth-cred用于给出身份认证的凭证,格式是username:password。

如:

Copy

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"

基于证书的身份认证

参数:--auth-file

若 Web 服务器要求客户端提供证书则可以使用此参数指定一个 PEM 格式的证书文件。我们知道 SSL 协议的客户端认证是可选的,实践中一般都只用服务器端提供自己的证书供客户端验证,很少要求客户端提供自己的证书。

忽略 401

参数:--ignore-401

使用该参数忽略 401 错误(未认证)。

HTTP(S)代理

参数:--proxy、--proxy-cred、--proxy-file 和--ignore-proxy

使用参数--proxy来设置一个 HTTP(S)代理,格式是http(s)://url:port。若代理需要认证,使用参数--proxy-cred来提供认证凭证,格式是username:password。

使用参数--proxy-file指定一个存储着代理列表的文件,Sqlmap 会依次使用文件中的代理,当某个代理有任何连接问题时就会被弃用而换下一个代理。

使用参数--ignore-proxy忽略本地代理设置

Tor 匿名网络

参数:--tor、--tor-type、--tor-port 和--check-tor

不管出于什么原因,如果想要保持匿名状态与其使用单个的 HTTP(S)代理,不如安装类似 Privoxy 这样的软件按照Tor 的安装指导配置一个 Tor 客户端。设置好后使用参数--tor让 Sqlmap 自动设置使用 Tor 代理。

如果想要手动指定 Tor 的类型和端口可以使用参数--tor-type和--tor-port,如:

Copy

--tor-type=SOCKS5 --tor-port 9050

如果要求高度的匿名性可以使用参数--check-tor,加上该参数后 Sqlmap 会确保所有流量都走 Tor 代理,若 Tor 代理失效,Sqlmap 会发出警告并退出。检测方法是访问Are you using Tor?

用正则表达式过滤代理日志

参数:--scope

指定一个 Python 正则表达式对代理日志进行过滤,只测试符合正则表达式的目标,如:

Copy

python sqlmap.py -l burp.log --scope="(www)?.target.(com|net|org)"

强制使用 SSL

参数:--force-ssl

=====================================================================

一键优化

参数:-o

添加此参数相当于同时添加下列三个优化参数:

--keep-alive

--null-connection

--threads=3 (如果没有设置一个好的值)

这些参数具体含义见后文。

HTTP 长连接

参数:--keep-alive

该参数让 Sqlmap 使用 HTTP 长连接。该参数与--proxy矛盾。

HTTP 空连接

参数:--null-connection

有一种特殊的 HTTP 请求类型可以直接获得 HTTP 响应的大小而不用获得 HTTP 响应体。显然这在布尔型盲注中可以节约很大的带宽。当然这一技术是需要服务器端支持的。该参数与--text-only矛盾。

HTTP 并发

参数:--threads

使用该参数指定 Sqlmap 可以达到的最大并发数。从性能和网站承受能力两方面考虑最大并发数不要超过 10

=====================================================================

检测注入点

要测试的注入点

参数:-p 和--skip

默认情况下 Sqlmap 会测试所有 GET 参数和 POST 参数,当 level 大于等于 2 时会测试 cookie 参数,当 level 大于等于 3 时会测试 User-Agent 和 Referer。实际上还可以手动指定一个以逗号分隔的、要测试的参数列表,该列表中的参数不受 level 限制。这就是-p的作用。

举个例子,若想只测试 GET 参数id和 User-Agent,则可以这么写:

-p "id,user-agent"

如果不想测试某一参数则可以使用--skip。如设置了 level 为 5 但不想测试 User-Agent 和 Referer,则可以这么写:

--level=5 --skip="user-agent,referer"

有时会遇到伪静态网页。像动态网页会明目张胆地列出参数,如:

/user.php?id=1

显然参数是 id,值为 1。但若是伪静态网页则可能这样写:

/user/1/

将参数隐藏在 URL 中。通常情况下 Sqlmap 不会对这样的伪静态网页的参数做测试,因为 Sqlmap 无法判断哪个是参数。若想要对这样的伪静态进行测试,只需要加上*,告诉 Sqlmap 哪个是伪静态参数就行,剩下事的和 GET 参数没有什么区别。如:

python sqlmap.py -u "http(s)://target.cc/user/1*/"

 

代理的使用:

--proxy和-proxy-cred的参数:

sqlmap.py --proxy=(http|https|socks4|socks5)://address:port --proxy-cred=username:password

比如:

sqlmap.py -u http://navisec.it/123.asp?id=1 -proxy=socks5://1.2.3.4:3712 --proxy-cred=admin:pass

 

参考:

下面文章写的很好,各种参数实际场景基本都提到过

https://www.tr0y.wang/2018/03/21/sqlmap-guide/

https://liupeng.blog.csdn.net/article/details/104250579  

技术图片
 

以上是关于sqlmap-较难理解的参数说明记录的主要内容,如果未能解决你的问题,请参考以下文章

sqlmap入门

sqlmap 不是dba怎么办

sqlmap

SmartSql Map

深入理解JVM—Java 6 JVM参数配置说明

使用sqlmap时出现了如下问题是为啥