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"

相关推荐
pyliumy2 分钟前
rsync 全网备份
linux·运维·服务器
sorel_ferris32 分钟前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
ggb199933 分钟前
【python的坑】vpn下,python request报错 check_hostname requires server_hostname
linux·运维·服务器
小O_好好学1 小时前
vi | vim基本使用
linux·编辑器·vim
-SGlow-1 小时前
Linux相关概念和重要知识点(4)(自举、vim)
linux·运维·vim
多多*1 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
xuan哈哈哈1 小时前
web基础—dvwa靶场(八)XSS
web安全·网络安全
王哲晓2 小时前
Linux通过yum安装Docker
java·linux·docker
gopher95112 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发
dot.Net安全矩阵3 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net