目录
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”