Bootstrap

Sqlmap中文使用手册 - Injection模块参数使用



1. Injection模块的帮助文档


Injection:
    These options can be used to specify which parameters to test for,
    provide custom injection payloads and optional tampering scripts

    -p TESTPARAMETER    Testable parameter(s)
    --skip=SKIP         Skip testing for given parameter(s)
    --skip-static       Skip testing parameters that not appear to be dynamic
    --param-exclude=..  Regexp to exclude parameters from testing (e.g. "ses")
    --param-filter=P..  Select testable parameter(s) by place (e.g. "POST")
    --dbms=DBMS         Force back-end DBMS to provided value
    --dbms-cred=DBMS..  DBMS authentication credentials (user:password)
    --os=OS             Force back-end DBMS operating system to provided value
    --invalid-bignum    Use big numbers for invalidating values
    --invalid-logical   Use logical operations for invalidating values
    --invalid-string    Use random strings for invalidating values
    --no-cast           Turn off payload casting mechanism
    --no-escape         Turn off string escaping mechanism
    --prefix=PREFIX     Injection payload prefix string
    --suffix=SUFFIX     Injection payload suffix string
    --tamper=TAMPER     Use given script(s) for tampering injection data


2. 各个参数的介绍


2.1 指定测试参数


背景:默认情况下,sqlmap会测试所有的get和post参数。并且当 --level=2 时,也会测试HTTP Cookie标头的值;当 --level=3 或者大于3 时,sqlmap还会测试 HTTP User-Agent 和 HTTP Referer 的标头值。我们可以通过一些参数手动指定我们希望测试的参数,这时候会忽略 --level 参数。

参数:

参数作用
-p “id,user,password”Testable parameter(s)。
手动指定希望测试的参数,多个参数时用逗号分隔开。例如这里是指定测试GET参数id,user,password。
–skip=”user-agent,referer”Skip testing for given parameter(s)。
手动指定希望跳过的检测的参数。例如这里是指跳过测试HTTP User-Agent 和 HTTP Referer 的标头值。
–param-exclude=”token|session”Regexp to exclude parameters from testing (e.g. “ses”)。使用正则表达式来排除参数。例如这里是指跳过对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头中的任意注入点。


2.2 --dbms=DBMS


参数:–dbms=DBMS

参数作用
–dbms postgresql自己提供后端数据库管理系统的名称是postgresql
–dbms MySQL
–dbms Microsoft SQL Server 对于 MySQL 和 SQL Server 数据库,还需要提供版本

作用:Force back-end DBMS to provided value。指定数据库管理系统。由于一些原因,sqlmap无法检测到后端数据库管理系统(DBMS),或者我们希望避免指纹数据库时,我们可以通过 --dbms 参数自己提供后端数据库管理系统的名称。只有在很确定是什么dbms的时候,才会这样做,否则还是让sqlmap自行检测。



2.3 --os=OS


参数:–os=OS

作用:Force back-end DBMS operating system to provided value。指定数据库管理系统的操作系统。默认情况下,sqlmap会自动检测运行数据库管理系统的操作系统,目前完全支持的操作系统有Linux和Windows。如果已经确定是什么操作系统,则可以强制指定操作系统名称,否则还是让sqlmap自行检测。



2.4 --invalid-bignum


参数:–invalid-bignum

作用:Use big numbers for invalidating values。强制使用大数生成无效参数。当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用大整数(如:id=999999)来实现相同的目标。



2.5 --invalid-logical


参数:–invalid-logical

背景:Use logical operations for invalidating values。强制使用逻辑操作生成无效参数。当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用布尔操作(如:id=10 AND 18=19)来实现相同的目标。



2.6 --invalid-string


参数:–invalid-string

背景:Use random strings for invalidating values。强制使用随机字符串生成无效参数。当sqlmap需要使原始参数值无效的情况下,sqlmap会取已有参数(如:id=10)的相反数(id=-10)作为无效参数。使用这个参数,可以强制使用随机字符串操作(如:id=asdfg)来实现相同的目标。



2.7 --no-escape


参数:–no-escape

作用: Turn off string escaping mechanism。关闭字符串转义机制。如果sqlmap需要在payload(例如:SELECT ‘foobar’)内使用 单引号 分隔字符串值,那么这些值将自动被转义(例如:SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114)),这可以混淆payload还能避免一些后台查询转义机制的问题(例如magic_quotes或mysql_real_escape_string)。



2.8 --prefix/–suffix


参数:–prefix=PREFIX(Injection payload prefix string,指定payload前缀), --suffix=SUFFIX(Injection payload suffix string,指定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也可以正常执行.



2.9 --tamper=TAMPER


参数:–tamper=TAMPER

值:逗号分隔的脚本列表,sqlmap在 tamper/ 目录下有许多可用的tamper脚本。tamper脚本的作用是对payload进行混淆。

作用:Use given script(s) for tampering injection data。使用给定的脚本篡改注入数据。sqlmap只会对CHAR()字符串进行混淆,对其他的payload不会进行任何混淆。当我们需要绕过IPS或者web应用程序防火墙(WAF)时,可以使用这个选项。

使用:--tamper=”between,randomcase”




;