目录
- 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编码
- 3.21 绕过CSRF防护
- 3.22 强制使用SSL/HTTPS
- 3.23 在每次请求前执行特定的python代码
- 4. 优化
- 4.1 预测输出
- 4.2 HTTP长连接
- 4.3 HTTP空连接
- 4.4 HTTP并发
- 4.5 一键优化
- 5. 注入
- 5.1 指定测试参数
- 5.2 指定数据库管理系统
- 5.3 指定数据库管理系统的操作系统
- 5.4 强制使用大数生成无效参数
- 5.5 强制使用逻辑操作生成无效参数
- 5.6 强制使用随机字符串生成无效参数
- 5.7 关闭payload转换
- 5.8 定制payload
- 5.9 指定注入数据
- 6. 检测
- 6.1 检测级别
- 6.2 风险级别
- 6.3 页面对比
- 7. 技术
- 7.1 SQL注入测试技术
- 7.2 指定基于时间盲注的延迟时间
- 7.3 指定联合查询注入中的列数
- 7.4 指定联合查询注入的字符
- 7.5 指定联合查询注入的表名
- 7.6 DNS漏洞攻击
- 7.7 二阶攻击
- 7.8 指纹
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的自动编码。
3.21 绕过CSRF防护
背景:现在有很多网站通过在表单中添加值为随机生成的token的隐藏字段来防止CSRF攻击。SqlMap的会自动尝试识别并绕过这种保护。
参数:
参数 | 作用 |
---|---|
–csrf-token | 可用于指定隐藏字段名称。这对于网站使用非标准名称的情况很有用。 |
–csrf-url | 用于从任意的URL中回收token值。若最初有漏洞的目标URL中没有包含token值,而在其他地址包含token值时该参数就很有用。 |
3.22 强制使用SSL/HTTPS
参数:–force-ssl
背景:如果用户想强制对目标使用SSL/HTTPS请求,可以使用这个参数开关。
3.23 在每次请求前执行特定的python代码
参数:–eval
背景:用户想要更改或者添加新的参数值,这些参数值有某些依赖关系。则可以使用这个参数向sqlmap提供一段自定义的python代码,这段代码在每个请求之前都会被执行。
使用:sqlmap -u "http://www.xxx.com/vuln.php?id=1&hash=c4ca4238a0b9238\ 20dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
,每次请求前,Sqlmap都会依据id值重新计算hash值并更新GET请求中的hash值。
4. 优化
4.1 预测输出
参数:–predict-output
作用:开关参数。此参数用于推理算法顺序检索的值的字符统计预测,预测常见的查询输出。此开关与 --threads 开关不兼容。
4.2 HTTP长连接
参数:–keep-alive
作用:开关参数。此开关可以让sqlmap使用HTTP(S)持久连接。此开关与 --proxy 开关不兼容。
4.3 HTTP空连接
参数:–null-connection
背景:开关参数。一些特殊的HTTP请求类型可以用于检索HTTP响应的大小,而不需要获取HTTP主体,这种情况可以在盲注检测中被用来区分true和false。使用此开关参数时,sqlmap将尝试测试并利用两种不同的NULL连接技术:Range和Head,如果目标服务器支持其中任何一项,则将明显节省使用的带宽。此开关与 --text-only 开关不兼容。
4.4 HTTP并发
参数:–threads
作用:可以指定sqlmap执行的并发HTTP(S)请求的最大数量,类似于多线程的原理。处于性能和站点可靠性的原因,并发请求数最大设置为10。此参数与 – predict-output 开关不兼容
4.5 一键优化
参数:-o
作用:开关参数。打开此开关时,会自动打开:–keep-alive,–null-connection,–threads=3(如果没有设置为更高的值)。
5. 注入
5.1 指定测试参数
背景:默认情况下,sqlmap会测试所有的get和post参数。并且当 --level=2 时,也会测试HTTP Cookie标头的值;当 --level=3 或者大于3 时,sqlmap还会测试 HTTP User-Agent 和 HTTP Referer 的标头值。我们可以通过一些参数手动指定我们希望测试的参数,这时候会忽略 --level 参数。
参数:
参数 | 作用 |
---|---|
-p “id,user,password” | 手动指定希望测试的参数,多个参数时用逗号分隔开。例如这里是指定测试GET参数id,user,password。 |
–skip=”user-agent,referer” | 手动指定希望跳过的检测的参数。例如这里是指跳过测试HTTP User-Agent 和 HTTP Referer 的标头值。 |
–param-exclude=”token | session” |
sqlmap -u “http://www.xxx.com/param1/value1*/param2/value2” | 注入点位于URI本身内部,用指定URI内部的注入点。对于伪静态网页,例如http://www.xxx.com/param1/value1/param2/value2。默认情况下,sqlmap不会对URI路径执行任何自动测试。当注入点位于URI本身内部时,可以在URI中要注入的点之后附加来指定注入点。比如:http://www.xxx.com/param1/value1*/param2/value2 |
sqlmap -u “http://targeturl” --cookie=“param1=value1*;param2=value2” | 用*指定GET,POST或者HTTP头中的任意注入点。 |
5.2 指定数据库管理系统
背景:由于一些原因,sqlmap无法检测到后端数据库管理系统(DBMS),或者我们希望避免指纹数据库时,我们可以通过 --dbms 参数自己提供后端数据库管理系统的名称。只有在很确定是什么dbms的时候,才会这样做,否则还是让sqlmap自行检测。
参数:
参数 | 作用 |
---|---|
–dbms postgresql | 自己提供后端数据库管理系统的名称是postgresql |
–dbms MySQL | |
–dbms Microsoft SQL Server | 对于 MySQL 和 SQL Server 数据库,还需要提供版本 |
5.3 指定数据库管理系统的操作系统
背景:默认情况下,sqlmap会自动检测运行数据库管理系统的操作系统,目前完全支持的操作系统有Linux和Windows。如果已经确定是什么操作系统,则可以强制指定操作系统名称,否则还是让sqlmap自行检测。
参数:–os
5.4 强制使用大数生成无效参数
背景:当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用大整数(如:id=999999)来实现相同的目标。
参数:–invalid-bignum
5.5 强制使用逻辑操作生成无效参数
背景:当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用布尔操作(如:id=10 AND 18=19)来实现相同的目标。
参数:–invalid-logical
5.6 强制使用随机字符串生成无效参数
背景:当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用随机字符串操作(如:id=asdfg)来实现相同的目标。
参数:–invalid-string
5.7 关闭payload转换
背景:如果sqlmap需要在payload(例如:SELECT ‘foobar’)内使用 单引号 分隔字符串值,那么这些值将自动被转义(例如:SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114)),这可以混淆payload还能避免一些后台查询转义机制的问题(例如magic_quotes或mysql_real_escape_string)。
参数:–no-escape,用户可以使用此开关将其关闭,比如为了减少payload的长度。
5.8 定制payload
参数:–prefix(指定payload前缀),–sufix(指定payload后缀)。
背景:有时只有在 payload 后添加用户指定的后缀才能注入成功。另一种场景是用户已经知道查询语句怎么写的,此时可以直接指定 payload 的前缀和后缀来完成检测和注入。在简单的测试环境下 SQLMap 不需要被提供定制的边界范围就能够自动检测并完成注入,但在真实世界中某些应用可能会很复杂如嵌套JOIN查询,此时就需要为 SQLMap 指明边界范围。
使用:
假设我们已经知道源码为:
$query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";
上面这句的意思是查询指定id。对于这种情况,我们可以让sqlmap自动检测边界范围,也可以手动指出边界范围。手动指出边界范围的话,就可以执行下面的语句:
sqlmap -u "http://xxx.com/sqlmap/mysql/get_str_brackets.php\ ?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
这时,最终的源码会变成:
$query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";
这样查询的语法可以正确的执行,payload也可以正常执行.
5.9 指定注入数据
参数:–tamper
值:逗号分隔的脚本列表,sqlmap在 tamper/ 目录下有许多可用的tamper脚本。tamper脚本的作用是对payload进行混淆。
背景:sqlmap只会对CHAR()字符串进行混淆,对其他的payload不会进行任何混淆。当我们需要绕过IPS或者web应用程序防火墙(WAF)时,可以使用这个选项。
使用:--tamper=”between,randomcase”
6. 检测
Detection:
These options can be used to customize the detection phase
--level=LEVEL Level of tests to perform (1-5, default 1)
--risk=RISK Risk of tests to perform (1-3, default 1)
--string=STRING String to match when query is evaluated to True
--not-string=NOT.. String to match when query is evaluated to False
--regexp=REGEXP Regexp to match when query is evaluated to True
--code=CODE HTTP code to match when query is evaluated to True
--smart Perform thorough tests only if positive heuristic(s)
--text-only Compare pages based only on the textual content
--titles Compare pages based only on their titles
6.1 检测级别
参数:–level=LEVEL
背景:Level of tests to perform (1-5, default 1)。该参数用来指定要执行的测试级别。有1-5五个级别,默认级别为1,级别越高将对更多的payload和边界进行测试。此选项不仅会影响payload,还会影响注入点。
sqlmap使用的payload在xml/payloads.xml文件中指定,如果sqlmap错过了一次注入,也可以添加自己的payload来进行测试。
值:任何级别都会测试GET和POST参数。
值 | 作用 |
---|---|
–level=1 | 默认为1 |
–level=2 | 大于等于级别2时测试HTTP Cookie标头值 |
–level=3 | 大于等于3级时测试HTTP User-Agent / Referer头的值 |
–level=4 | |
–level=5 | 检测 HOST 头。5级包含的payload最多,会自动破解出cookie、XFF等头部注入,相对应他的速度也比较慢。 |
检测SQL注入越困难,–level必须设置的越高,建议在无法检测到某个注入点时将此值提高。
6.2 风险级别
参数:–risk=RISK
作用:Risk of tests to perform (1-3, default 1)。该参数用于指定测试执行的风险,有三个风险值。
值:
值 | 作用 |
---|---|
1 | 默认值是1,这对大多数SQL注入点无害。 |
2 | 风险值2添加了大量基于时间盲注的检测。 |
3 | 风险值3增加了基于OR的盲注测试。 |
6.3 页面对比
背景:默认情况下,sqlmap判断true还是false的方法是比较注入的请求页面内容与原始未注入页面内容。但是这个方法并不总是有效,因为有的页面只要刷新就会发生变化,即使你没有注入任何payload,比如页面中含有动态广告。遇到这样的情况,slqmap会尽力判断响应体的片段并处理。但是sqlmap有时并不能正确处理。
参数:
参数 | 作用 |
---|---|
–string=STRING | String to match when query is evaluated to True。 使用该参数参数提供一个字符串,该字符串存在于ture页面中,而不在false页面中。 |
–not-string=NOT | String to match when query is evaluated to False。 使用该参数可以指定一个字符串,该字符串只存在于false页面中。 |
–regexp=REGEXP | Regexp to match when query is evaluated to True。 使用该参数指定一个正则表达式而不是字符串。 |
–code=CODE | HTTP code to match when query is evaluated to True。 如果知道ture和false的http状态码不同,还可以使用该参数指定一个状态码。 |
–titles | Compare pages based only on their titles。 如果知道ture和false的页面标题存在不同,还可以使用该参数指定一个title。 |
7. 技术
Techniques:
These options can be used to tweak testing of specific SQL injection
techniques
--technique=TECH.. SQL injection techniques to use (default "BEUSTQ")
--time-sec=TIMESEC Seconds to delay the DBMS response (default 5)
--union-cols=UCOLS Range of columns to test for UNION query SQL injection
--union-char=UCHAR Character to use for bruteforcing number of columns
--union-from=UFROM Table to use in FROM part of UNION query SQL injection
--union-values=U.. Column values to use for UNION query SQL injection
--dns-domain=DNS.. Domain name used for DNS exfiltration attack
--second-url=SEC.. Resulting page URL searched for second-order response
--second-req=SEC.. Load second-order HTTP request from file
7.1 SQL注入测试技术
参数:–technique=TECH
背景:默认情况下,sqlmap会尝试所有类型的注入。使用该参数可以指定sql注入测试技术,参数后面跟一个大写字母,有B,E,U,S,T和Q,每个字母代表一种注入技术。
值:
参数 | 作用 |
---|---|
B | Boolean-based blind,基于bool的盲注 |
E | Error-based,基于报错的注入 |
U | Union query-based,联合查询注入 |
S | Stacked queries,堆查询注入 |
T | Time-based blind,基于时间的盲注 |
Q | Inline queries,嵌套查询注入 |
使用:如果想要仅基于报错注入和堆栈的查询注入,可以指定–technique SE
注意:当想要访问文件系统,控制操作系统或访问windows注册表时,注入技术必须包含堆查询注入,即-S
。
7.2 指定基于时间盲注的延迟时间
参数:–time-sec
值:一个整数,默认情况是5秒。
作用:在测试基于时间的盲注时,可以设置延迟响应的秒数。
7.3 指定联合查询注入中的列数
背景:默认情况下,sqlmap会针对使用1到10列的UNION查询技术进行测试。但是,通过提供更高的–level值,该范围可以增加到50列。
参数:–union-cols
值:整数
使用:跟整数范围来指定测试的列范围。例如,12-16意味着使用12到16列的UNION查询注入技术。
7.4 指定联合查询注入的字符
背景:默认情况下,sqlmap在UNION联合查询注入中使用的是NULL字符,指定更高的level值,sqlmap将使用随机数执行测试,因为在某些情况下使用NULL字符测试失败,而使用随机整数成功。
参数:–union-char
值:告诉sqlmap使用的字符
使用:
例如一个union联合查询的payload是
Payload: type_id=129 UNION ALL SELECT NULL,NULL,NULL,NULL,CONCAT(0x717a7a7171,0x637a73474b77574b4b76556274626c5051726a556d674368716948575979417750496867686b4562,0x7170767871),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- bnBy
当我们指定–union-char’001’,payloadj就会变成
Payload: type_id=129 UNION ALL SELECT 001,001,001,001,CONCAT(0x717a7a7171,0x637a73474b77574b
7.5 指定联合查询注入的表名
参数:–union-from
背景:在一些联合查询注入中,需要在FROM字段提供有效的表名(例如–union-from=users),例如,Microsoft Access就需要使用这种表格。如果不提供,SQL注入将无法正确执行。
值:表名
7.6 DNS漏洞攻击
参数:–dns-domain
背景:如果用户控制了目标url的DNS服务器(例如 attacker.com),则可以使用此选项(例如–dns-domain attacker.com)启用此攻击。它工作的先决条件是运行带有Administrator权限的sqlmap (使用特权端口53),这样做的唯一目的就是加速数据检索过程。
7.7 二阶攻击
参数:–second-order
背景:二阶攻击一般发生于一个易攻击页面中的有效payload的在另一个页面上显示。通常发生这种情况的原因是数据库存储用户在原页面上提供的输入。
值:URL地址
7.8 指纹
参数:开关, -f或–fingerprint
背景:默认情况下,sqlmap会自动指纹数据库。如果你想要执行更广泛的数据库指纹识别可以使用该参数,sqlmap会执行更多的请求,来确定更精确的DBMS版本以及操作系统,体系结构和补丁级别指纹。