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

目录

  • [1. Injection模块的帮助文档](#1. Injection模块的帮助文档)
  • [2. 各个参数的介绍](#2. 各个参数的介绍)
    • [2.1 指定测试参数](#2.1 指定测试参数)
    • [2.2 --dbms=DBMS](#2.2 --dbms=DBMS)
    • [2.3 --os=OS](#2.3 --os=OS)
    • [2.4 --invalid-bignum](#2.4 --invalid-bignum)
    • [2.5 --invalid-logical](#2.5 --invalid-logical)
    • [2.6 --invalid-string](#2.6 --invalid-string)
    • [2.7 --no-escape](#2.7 --no-escape)
    • [2.8 --prefix/--suffix](#2.8 --prefix/--suffix)
    • [2.9 --tamper=TAMPER](#2.9 --tamper=TAMPER)

1. Injection模块的帮助文档

bash 复制代码
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"

相关推荐
树下一少年1 分钟前
服务器开机即占用大量内存,解决
linux·运维·服务器·sysctl.conf·vm.nr_hugepages
dtuling1 分钟前
[Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
linux·qt
LaoZhangGong1239 分钟前
Linux第92步_如何编写“设备树”下的platform设备驱动
linux·运维·服务器·经验分享·stm32·stm32mp157
DCTANT33 分钟前
【原创】如何备份和还原Ubuntu系统,非常详细!!
linux·运维·ubuntu·备份还原系统
帝恩思科技35 分钟前
网络游戏安全现状及相关应对方案
运维·服务器·网络·安全·web安全
可怜的Tom被玩弄于股掌之中41 分钟前
Bugku CTF_Web——字符?正则?
网络·安全·web安全·网络安全
TeYiToKu1 小时前
笔记整理—linux驱动开发部分(12)I2C总线与触摸屏设备
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件
坚持学习的你2 小时前
Ubuntu24.04 network:0 unclaimed wireless adapter no found
linux·ubuntu
 嘘 2 小时前
Centos使用Mysql
linux·mysql·centos
 嘘 2 小时前
Centos使用人大金仓ksql
linux·运维·centos·人大金仓