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"

相关推荐
Code Warrior20 分钟前
【Linux】库的制作与原理(1)
linux
生涯にわたる学び27 分钟前
关于之前知识的一些补充 02
linux·arm开发
汐汐咯32 分钟前
linux上安装minconda
linux·运维·服务器
小波小波轩然大波1 小时前
Linux服务器配置(mariadb服务器)
linux·服务器·mariadb
忧郁的橙子.1 小时前
k8s 主节点重启后 从节点 get 异常
linux·运维·服务器
Raymond运维1 小时前
Apache介绍和安装
linux·运维·apache
半梦半醒*2 小时前
nginx的访问控制、用户认证、https
linux·运维·服务器·nginx·https·centos
独行soc2 小时前
2025年渗透测试面试题总结-90(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
Skrrapper3 小时前
ubuntu?centos?还是 redhat?Linux 系统选哪个?
linux·ubuntu·centos
进击的_鹏3 小时前
【Linux】权限
linux·服务器