sqlmap使用手册(详细)

Posted 思源湖的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlmap使用手册(详细)相关的知识,希望对你有一定的参考价值。

目录

前言

sqlmap的用法整理,也作为自己的使用参考手册

可与Kali linux 学习笔记(五十一)Web渗透——sqlmap自动注入 2020.3.28相互印证参照使用

相关链接:

一、sqlmap简介

1、检测并利用SQL注入

比方说,你在审计一个Web应用程序,发现一个接受动态用户提供的【GET】,【POST】值或【Cookie参数】或者【User-Agent请求头】的网页。你现在要测试这些参数是否存在SQL注入漏洞,如果存在,则利用这些注入点从数据库管理系统检索尽可能多的信息,甚至能够访问底层文件系统和操作系统。

举一个简单的例子,假设目标网址是:

http://192.168.136.131/sqlmap/mysql/get_int.php?id=1

假设:

http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=1

与原始网页相同,但是

http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=2

与原始网页不同,这可能意味着当前页面id GET参数中存在SQL注入漏洞。另外,在将SQL语句发送到后端数据库管理系统之前,不会发生对用户输入的保护。

这是动态Web应用程序中的一个常见缺陷,它不依赖后端数据库管理系统或Web应用程序编程语言。从2013年开始,在开放Web应用安全项目已经将SQL注入列为最常见和严重的web应用漏洞的前十。

现在你已经找到了易受攻击的参数,你可以通过操纵HTTP请求中的id参数值来利用它。

回到场景中,我们可以对get_int.php网页中的SQL语句的语法做出有根据的猜测。在伪PHP代码中:

$query = "SELECT [column name(s)] FROM [table name] WHERE id=" . $_REQUEST['id'];

如你所见,在参数id的值之后追加一个语法有效的SQL语句(True,例如 id=1 AND 1=1)将导致Web应用程序返回与原始请求中相同的网页。前面的例子描述了一个简单的基于bool的盲注漏洞。但是,sqlmap能够检测到任何类型的SQL注入漏洞并相应地调整其工作流程。

在这种简单的情况下,它还可以附加,不仅仅是一个或多个SQL条件,还可以是(依赖于DBMS)堆叠的SQL查询。例如:

[...]&id=1;ANOTHER SQL QUERY#。

sqlmap可以自动识别和利用这种类型的漏洞。将原始地址http://192.168.136.131/sqlmap/mysql/get_int.php?id=1给sqlmap,该工具将自动:

  • 确定可注入的参数(id在本例中)
  • 确定可以使用哪种SQL注入技术来注入
  • 识别出哪种数据库
  • 根据用户的选择,读取哪些数据

2、直接连接到数据库管理系统

直到sqlmap版本0.8,该工具已经彻底进化,已经被Web应用程序渗透测试人员等广泛使用。事情继续前进,随着它们的发展,我们也做得很好。现在它支持这个新的功能【-d】,它允许你从你的机器连接到数据库管理系统,并执行你在SQL注入时要做的任何操作。

二、支持的技术

1、支持的数据库

MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM,DB2,SQLite,Firebird,Sybase,SAP MaxDB和HSQLDB数据库管理系统。

2、支持的注入模式

sqlmap能够检测和利用五种不同的SQL注入类型:

  • 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  • 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  • 基于UNION查询,sqlmap将UNION ALL SELECT+有效的SQL语句附加到受影响的参数以后实现查询。
  • 联合查询注入,可以同时执行多条语句的执行时的注入。

三、用法

1、指定输出级别

参数 -v

该选项用来设置输出的详细级别。有七个级别的详细程度。

  • 0:只显示Python回源(tracebacks),错误(error)和关键(criticle)信息。
  • 1:同时显示信息(info)和警告信息(warning)(默认为1)
  • 2: 同时显示调试信息(debug)
  • 3:同时显示注入的有效载荷(payloads)
  • 4:同时显示http请求
  • 5:同时显示http响应头
  • 6:同时显示http响应内容

可以看出级别越高,信息越详细,我们可以根据需要来选择输出级别,如果不指定输出级别,则默认级别为1。

一般来说,我们使用级别3即可。

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

python2 sqlmap.py -d "mysql://root:root@127.0.0.1:3306/testdb" 

提示我这个过程需要python2安装pymysql库。安装完就成功连接了。

E:\\sqlmap>python2 sqlmap.py -d "mysql://root:root@127.0.0.1:3306/testdb"
        ___
       __H__
 ___ ___[(]_____ ___ ___  {1.2.5.13#dev}
|_ -| . [)]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V          |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting at 19:55:19

[19:55:22] [INFO] connection to mysql server 127.0.0.1:3306 established
[19:55:22] [INFO] testing MySQL
[19:55:22] [INFO] confirming MySQL
[19:55:22] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL >= 5.0.0
[19:55:22] [INFO] connection to mysql server 127.0.0.1:3306 closed

[*] shutting down at 19:55:22

可以看出只是显示了数据库版本,连接上之后就自动断开了,关于怎么操作数据库,需要更多的参数来控制操作。

(2)指定目标url

参数 -u 或 --url

目标网站格式 :http(s)://targeturl[:port]/[...]
这种是直接对单个网站就行注入检测。例如

python sqlmap.py -u "http://www.target.com/vuln.php?id=1" 

(3)从Burp或WebScarab代理日志中解析目标

参数 -l

使用参数“-l”指定一个Burp或WebScarab的代理日志文件,Sqlmap将从日志文件中解析出可能的攻击目标,并逐个尝试进行注入。该参数后跟一个表示日志文件的路径。

(4)从远程站点地图(.xml)文件中解析目标

参数 -x

为了提高收录或者方便rss订阅,很多站点都有站点地图
Sqlmap可以直接解析xml格式的站点地图,例如:

python sqlmap.py -x http://www.target.com/sitemap.xml

(5)从文本中获取目标

参数 -m

提供url列表文件,sqlmap将逐一扫描每个URL。

比如url.txt如下

www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*

我们可以批量扫描文件里的所有url:

python sqlmap.py -m url.txt

(6)从文件加载HTTP请求

参数 -r

可以将一个HTTP请求保存在文件中,然后使用参数“-r”加载该文件,这样,你可以跳过其他一些选项的使用(例如设置Cookie,发布数据等)。

假设http请求保存在如下文件中(http.txt):

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: BAIewD=E47869416FeqCBD231ED9C1ewqeF83C:FG=1; BIDUPSID=E47869416F8BE5026CBD231ED9C1F83C; PSTM=w1526868067; BDORZ=B490B5EBF6Fsaf3CD402E5eqDA1598; H_PS_PSSID=1437_21120_20928; PSINO=3
Host: baidu.com
Pragma: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36

则使用如下命令让sqlmap解析该文件,以该文件中HTTP请求目标为攻击目标进行测试:

python sqlmap.py -r get.txt

(7)将Google搜索结果作为攻击目标

参数 -g

sqlmap可以将google搜索的前一百条结果作为目标进行检测,当然前提是需要科学上网。

举例:

python sqlmap.py -g "inurl:\\".php?id=1\\""

(8)从配置INI文件获取目标

参数 -c

sqlmap可以从配置INI文件获取目标,例如sqlmap下载目录下面的文件sqlmap.conf。

该配置文件可以指定目标地址,代理等各种参数,看下配置模板文件就可以理解了。

3、请求

http不仅需要目标url,同时也需要很多额外的参数,这些参可用于指定如何连接到目标URL,比如方法(get post),cookies,user-Agent等等。

(1)指定HTTP方法

参数 --method

一般情况下,sqlmap会自动检测HTTP请求的正确方法。不过,在某些情况下(比如put方法)需要强制指定方法,这时可以使用这个选项(例如–method=PUT)。

(2)指定HTTP数据

参数 --data

默认情况下,用于执行HTTP请求的方法是GET,但是当我们使用data参数,则HTTP会使用post方法将参数当作HTTP data提交,同时也会检测此参数有没有注入漏洞。

比如:

python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" 

(3)指定参数分割字符

参数 --param-del

有些情况下,我们需要指定的HTTP数据不止一个,例如

http://www.target.com/vuln.php?id=1&name=python

这时候的data其实是两个参数id=1name=python他们之间的分隔符是&,如果我们想要指定分隔符,这时就可以使用--param-del。例如

python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";"

(4)指定cookie

参数 --cookie , --cookie-del , --load-cookies , --drop-set-cookie

这些参数可用于两种情况:

  • web应用程序需要基于cookie的身份认证,并且你含有cookie
  • 你想要检测并且利用cookie注入

关于如何获取cookie这里就不做说明了,cookie的字符分隔通常是;,而不是&,如果分隔字符不是;,则可以通过使用--cookie-del指定分隔符。

假定我们的cookie为

AU=583;BAIDUID=E47869416F8BE5026CB;

那么我们可以使用--cookie参数指定cookie

python sqlmap.py -u "http://www.target.com/vuln.php" --cookie "AU=583;BAIDUID=E47869416F8BE5026CB"

如果在通信过程中的任何时候,Web应用程序都会响应Set-cookie标题,则sqlmap会自动使用其他的HTTP请求中的值作为cookie,使用参数--drop-set-cookie,sqlmap将会忽略使用cookie。

我们也可以把cookie保存在Netscape / wget格式的文件中,通过--load-cookies参数来调用。

注:当-–level设置为2或更高时,sqlmap会检测cookie是否存在注入漏洞,详情请阅读下文。

(5)指定HTTP User-Agent

参数 --user-agent 和random-agent

默认情况下,sqlmap使用的User-Agent为:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

但是我们可以通过--user-agent来自定义User-Agent。也可以使用--random-agent来从sqlmap自带的文本文件中随机选择一个User-Agent。这个文件是./txt/user-agents.txt,打开看下就懂了。

-–level设置为3或更高时,sqlmap自动会检测User-Agent是否存在注入漏洞,详情请阅读下文。

(6)指定HTTP Host

参数 --host

默认情况下,HTTP Host是从提供的目标URL中分析的。但是你可以手动设置HOST。

注意:如果--level设置为5,则会对HTTP Host进行SQL注入测试。详情请阅读下文。

(7)指定HTTP Referer

参数 --referer

默认情况下,没有 HTTP Referer报头在HTTP请求发送,但是通过--referer我们可以伪造HTTP Referer标头值。

注意:如果--level设置为3或更高,则sqlmap将针对HTTP Referer进行SQL注入测试。详情请阅读下文。

(8)额外的HTTP头

参数 --headers

使用该参数可以在Sqlmap发送的HTTP请求报文头部添加额外的字段,若添加多个字段,用“\\n”分隔。例如:

python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --headers="X-A :A\\nX-B: B"

发送的请求包为

  GET / HTTP/1.1
  Host: 192.168.21.128
  Accept-encoding: gzip,deflate
  X-A: A
  X-B: B
  Accept: */*
  User-agent: sqlmap/1.1.10#stable (http://sqlmap.org)
  Connection: close

(9)HTTP协议认证

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

这些参数用于进行http协议认证,关于http协议这里不作说明。
其中–auth-type用于指定认证方式,有以下三种方式:

  • Basic
  • Digest
  • NTLM

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

举例:

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

(10)HTTP协议私钥认证

参数 --auth

当Web服务器需要客户端证书和用于身份验证的私钥时,应使用此选项。提供的值应该是PEM格式的key_file,包含你的证书和私钥。

(11)忽略401错误(未授权)

参数 --ignore-401

如果你在测试返回401错误的站点时想忽略它并继续测试,则可以使用开关--ignore-401,这是个开关参数,后面不需要加其他的数据。

(12)使用HTTP(S)代理

参数 --proxy, --proxy-cred, --proxy-file 和 --ignore-proxy

可以使用--proxy来使用代理,格式为http://url:port,当http(s)需要认证时,可使用--proxy-cred来提供凭证,格式是username:password

--proxy-file可以指定一个包含有代理列表的文件,在连接时,便会依次使用文件里面的代理,当代理无效时可自动调到下一个代理。

--ignore-proxy用来忽略代理设置

(13)Tor匿名网络

参数 --tor,--tor-port,--tor-type和--check-tor

如果你需要匿名,除了通过定义HTTP(S)代理服务器,你可以安装类似Privoxy这样的软件按照Tor的安装指导配置一个Tor客户端,设置好后使用参数--tor让Sqlmap自动设置使用Tor代理。

你还可以使用参数--tor-type--tor-port 自定义代理的类型和端口。

】例如:

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

建议使用参数--check-tor来保证你所有的配置都正确,使用这个开关,slqmap会检查是否一切数据都走的匿名代理,如果检查失败,sqlmap会警告你并退出。

(14)设定每个HTTP请求之间的延迟

参数 --delay

可以指定每个HTTP(S)请求之间等待的秒数。有效值是一个浮点数,例如0.5意味着半秒。默认情况下,不设置延迟。

(15)设置超时时间

参数 --timeout

默认设置的超时时间为30s,我们也可以通过这个参数手动设置超时时间,有效值为一个浮点数,比如10.5意味着十秒半。

(16)连接超时后的最大重试次数

参数 --retries

连接超时后sqlmap会重试连接,可以指定HTTP(S)连接超时时的最大重试次数。默认情况下,重试次数为三次。

(17)随机更改参数

参数 --randomize

可以指定请求参数名称,这些参数在请求期间根据原始长度和类型随机更改。

(18)用正则表达式过滤代理日志中的目标

参数 --scope

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

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

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

参数 --safe-url,--safe-post,--safe-req和--safe-freq

有时服务器检测到某个客户端错误请求过多会对其进行屏蔽,而Sqlmap的盲注测试会产生大量错误请求。

为了避免被限制,我们可以每隔一段时间来访问正确的url,使用以下参数

--safe-url: 隔段时间就访问一下的正确URL
--safe-post: 访问正确URL时携带的POST数据
--safe-req: 从文件中载入安全HTTP请求
--safe-freq: 每次测试请求之后都会访问一下的安全URL

这样,sqlmap将每隔一段时间访问一个正确的 URL,当然不会对其进行任何注入。

(20)关闭参数值的URL编码

开关 --skip-urlencode

sqlmap默认会对参数进行编码,有的服务器端只接受未编码的参数,则可以使用这一开关来停止sqlmap自动编码

(21)绕过防CSRF保护

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

现在有很多网站通过在表单中添加值为随机生成的token的隐藏字段来防止CSRF攻击。SqlMap的会自动尝试识别并绕过这种保护。但也有选项--csrf-token,并--csrf-url可以用来进一步微调它。

--csrf-token可用于指定隐藏字段名称。这对于网站使用非标准名称的情况很有用。

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

(22)强制使用SSL/HTTPS

开关 --force-ssl

如果用户想强制对目标使用SSL/HTTPS请求,可以使用此开关。

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

参数 --eval

如果用户想要更改(或添加新的)参数值,最有可能是因为某些已知的依赖关系,他可以使用–eval向sqlmap提供一个自定义Python代码,该代码将在每个请求之前被执行。
例如:

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值。

4、优化

这些参数可以用来优化sqlmap的性能。

(1)一键优化

开关 -o

打开此开关则自动打开以下开关:

--keep-alive
--null-connection
--threads=3 (如果没有设置为更高的值。)

每个开关的详细信息见下文。

(2)预测输出

开关 --predict-output

此开关用于推理算法顺序检索的值的字符统计预测,预测常见的查询输出。

注意,此开关与--threads开关不兼容。

(3)HTTP长连接

开关 --keep-alive

此开关指示sqlmap使用持久HTTP(s)连接。

注意,此开关与--proxy开关不兼容。

(4)HTTP空连接

开关 --null-connection

有一些特殊的HTTP请求类型可用于检索HTTP响应的大小而不需要获取HTTP主体。这种情况可以在盲注检测中被用来区分True和False。当打开此开关时,sqlmap将尝试测试并利用两种不同的NULL连接技术:Range和HEAD。如果目标网络服务器支持其中任何一项,则将明显节省使用的带宽。

注意,此开关与开关--text-only不兼容

(5)HTTP并发

参数 --threads

可以指定sqlmap执行的并发HTTP(S)请求的最大数量。类似于多线程的原理。

出于性能和站点可靠性原因,最大并发请求数设置为10。

注意,该选项与开关--predict-output不兼容

5、注入

这些参数可用于指定要测试的参数、提供自定义攻击负载和可选的篡改脚本。

(1)指定测试参数

参数 -p,--skip和--param-exclude

默认情况下,sqlmap会测试所有的GET参数和POST参数。当值--level大于等于2时,它也会测试HTTP Cookie标头值。当该值大于等于3时,它还会测试SQL注入的HTTP User-Agent和HTTP Referer标头值。但是,可以手动指定你希望sqlmap测试的参数的逗号分隔列表。这将会忽略--level

例如,仅要测试GET参数id和User-Agent

-p "id,user-agent"

--skip用户指定忽略检测的参数。例如在--level=5跳过测试HTTP User-Agent和HTTP Referer:

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

--param-exclude参数可以使用正则表达式来排除参数,例如,要跳过对token和session的测试:

--param-exclude="token|session"

当我们需要伪静态网页时,网址可能是

http://targeturl/param1/value1/param2/value2/

除非手动指向,否则sqlmap不会对URI路径执行任何自动测试,当注入点位于URI本身内部时,我们可以在URI点之后附加一个*来指定url注入点。
比如:

http://targeturl/param1/value1*/param2/value2/

和指定url注入点类似,*还可以用来指定GET,POST或HTTP头中的任意注入点。
例如:

python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"

(2)指定数据库管理系统

参数 --dbms

如果由于某种原因,sqlmap无法检测到后端数据库管理系统(DBMS),或者你希望避免指纹数据库时,你可以自己提供后端数据库管理系统的名称(例如postgresql)
例如:

--dbms postgresql

对于MySQL 和Microsoft SQL Server数据库,我们还需要提供版本,例如

--dbms MySQL <version>
--dbms Microsoft SQL Server <version>

只有在我们很确定数据库时才会这么做,否则还是交给sqlmap比较好。

(3)指定数据库管理系统操作系统

参数 --os

默认情况下Sqlmap会自动检测运行数据库管理系统的操作系统,目前完全支持的操作系统有:

  • Linux
  • Windows

如果你已经知道它,可以强制操作系统名称,但是只有在你确实了解后端数据库管理系统的操作系统的时才使用它。

(4)强制使用大数生成无效参数

开关 --invalid-bignum

在sqlmap需要使原始参数值无效的情况下,一般Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。通过这个开关,可以强制使用大整数来实现相同的目标(例如id=99999999)。

(5)强制使用逻辑操作生成无效参数

开关 –invalid-logical

在sqlmap需要使原始参数值无效的情况下,一般Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。通过这个开关,可以强制使用布尔操作来实现相同的目标(例如id=13 AND 18=19)。

(6)强制使用随机字符串生成无效参数

开关 --invalid-string

在sqlmap需要使原始参数值无效的情况下,一般Sqlmap会取已有参数(如:id=13)的相反数(如:id=-13)作为无效参数。通过这个开关,可以强制使用布尔操作来实现相同的目标(例如id=akewmc)。

(7)关闭payload转换

开关 --no-cast

当检索结果时,sqlmap会将所有条目都被转换为字符串类型,其中NULL替换为空白字符,这是为了防止任何错误状态(例如,将NULL值与字符串值串联)以及简化数据检索过程本身。然而,有报告的案例(例如较早版本的MySQL DBMS)使用此机制会发生数据检索的问题(例如None返回值),需要关闭此机制(使用此开关)。

(8)关闭字符串转义

开关 --no-escape

如果sqlmap需要在payload(例如SELECT 'foobar')内使用(单引号分隔)字符串值,那么这些值将自动被转义(例如SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114)),这可以混淆payload还能避免一些后台查询转义机制的问题(例如magic_quotesmysql_real_escape_string)。

用户可以使用此开关将其关闭。(比如为了减少payload的长度)

(9)定制payload

参数 --prefix和--suffix

在某些情况下,只有当用户提供参数的后缀后才能对参数进行注入,但是当用户已经知道该查询语法时,可直接指定payload,来对payload的前缀和后缀进行注入。

假设这里我们已经知道源代码:

$query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

对此情况可以指定检测边界,例如:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"

这将导致所有的sqlmap请求在查询中结束,如下所示:

$query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";

这使得查询在语法上正确。

在这个简单的例子中,sqlmap可以自动检测,而无需提供自定义边界,但有时在实际应用中很复杂,例如当注入点位于嵌套JOIN查询中时,有必要提供它。

(10)指定注入数据

参数 --tamper

sqlmap只会对CHAR()字符串进行混淆,对其他的payload不会进行任何混淆。当我们需要绕过IPS设备或Web应用程序防火墙(WAF)时,我们可以使用此选项。

参数后面接一个逗号分隔的脚本列表(例如--tamper="between,randomcase"

sqlmap在tamper/目录中有许多可用的tamper脚本。tamper脚本的作用是对payload进行混淆。 有效的脚本格式如下:

# 需要的库
from lib.core.enums import PRIORITY

# 定义tamper脚本顺序
__priority__ = PRIORITY.NORMAL

def tamper(payload):
    '''
    对tamper的说明
    '''

    retVal = payload

    # tamper代码

    # 返回修改后的payload
    return retVal

以下是一个针对MySQL目标的示例,在该示例中>字符,空格字符和开头的SELECT字符串是被禁止的。

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

输出

[hh:mm:03] [DEBUG] cleaning up configuration parameters
[hh:mm:03] [INFO] loading tamper script 'between'
[hh:mm:03] [INFO] loading tamper script 'randomcase'
[hh:mm:03] [INFO] loading tamper script 'space2comment'
[...]
[hh:mm:04] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1)/**/And/**/1369=7706/**/And/**/(4092=4092
[hh:mm:04] [PAYLOAD] 1)/**/AND/**/9267=9267/**/AND/**/(4057=4057
[hh:mm:04] [PAYLOAD] 1/**/AnD/**/950=7041
[...]
[hh:mm:04] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[hh:mm:04] [PAYLOAD] 1/**/anD/**/(SELeCt/**/9921/**/fROm(SELeCt/**/counT(*),CONC
AT(cHar(58,117,113,107,58),(SELeCt/**/(case/**/whEN/**/(9921=9921)/**/THeN/**/1/
**/elsE/**/0/**/ENd)),cHar(58,106,104,104,58),FLOOR(RanD(0)*2))x/**/fROm/**/info
rmation_schema.tables/**/group/**/bY/**/x)a)
[hh:mm:04] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
 HAVING clause' injectable 
[...]

6、检测

这些选项可用于自定义检测阶段。

(1)检测级别

参数 --level

该参数用来指定要执行的测试级别。有1-5五个级别,默认级别为1,级别越高将对更多的payload和边界进行测试。

sqlmap使用的payload在xml/payloads.xml文件中指定。按照文件顶部的说明,如果sqlmap错过了一次注入

以上是关于sqlmap使用手册(详细)的主要内容,如果未能解决你的问题,请参考以下文章

SQLMap用户手册超详细

SQLMap用户手册超详细

SQLMap用户手册超详细

SQLMap用户手册超详细

Sqlmap使用手册

sqlmap使用手册