避免错误请求过多而被屏蔽
参数:--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