sqlmap中–technique和–dbms参数的含义是什么

好的,这是对 sqlmap--technique--dbms 参数的详细介绍。

1. --technique 参数

含义: 用于指定 SQL 注入测试所使用的技术类型。

默认情况下,sqlmap 会尝试所有支持的注入技术。使用此参数可以精确指定一种或多种技术,从而:

  • 提高测试效率:只测试指定的技术,避免不必要的请求。
  • 绕过特定防御:如果目标对某种技术有防护(如过滤了 UNION),可以尝试其他技术。
  • 用于特殊情况:某些场景下只有特定技术有效。

技术类型及说明:
--technique 后跟一个由单个字母组成的字符串,每个字母代表一种注入技术:

  • BBoolean-based blind (布尔盲注)

    • 原理:通过向数据库发送可以返回“真”或“假”结果的 SQL 语句,并根据页面反应的差异(如内容变化、HTTP 状态码、响应时间)来逐位推断数据。
    • 适用场景:页面没有显式错误信息,但真/假条件会导致可观测的差异。速度较慢,但非常通用。
  • EError-based (报错注入)

    • 原理:精心构造 SQL 语句,触发数据库报错,并使错误信息中直接包含我们想要查询的数据(如 select 1/0extractvalue(1, concat(0x7e, (select user()))))。
    • 适用场景:目标网站将数据库错误信息直接回显在页面上。这是最快的注入方式之一。
  • UUNION query (联合查询注入)

    • 原理:利用 UNIONUNION ALL 操作符,将恶意查询的结果与原始查询结果合并,并直接显示在页面中。
    • 适用场景:注入点位于 SELECT 语句中,并且结果会直接显示在页面上。需要字段数、数据类型匹配。
  • SStacked queries (堆叠查询注入)

    • 原理:利用数据库支持多语句执行的特性(如 ;),在原始查询后追加执行新的 SQL 语句(如 ...; DROP TABLE users;)。
    • 适用场景:需要执行非查询操作(如插入、更新、删除数据,或执行存储过程)。并非所有数据库或环境都支持
  • TTime-based blind (时间盲注)

    • 原理:通过向数据库发送包含延时函数(如 SLEEP(5)BENCHMARK())的 SQL 语句,根据页面响应时间是否延长来判断条件真假。
    • 适用场景:页面无论输入什么,返回的响应在内容、错误上都完全没有差异。这是最慢的注入方式。
  • QInline queries (内联查询注入)

    • 原理:一种特殊的注入形式,通常指将查询嵌入到原始查询的某个子句中,与普通注入区别不大。sqlmap 中较少显式区分此类型。

使用示例:

  • sqlmap -u “http://target.com/page?id=1” --technique BE:仅使用布尔盲注和报错注入进行测试。
  • sqlmap -u “http://target.com/page?id=1” --technique U:只尝试联合查询注入。
  • sqlmap -u “http://target.com/page?id=1” --technique BT:针对无错误回显的目标,使用布尔和时间盲注。

2. --dbms 参数

含义: 强制指定后端数据库管理系统(DBMS)的类型。

默认情况下,sqlmap 会自动进行指纹识别,探测目标使用的是 MySQL、Oracle、PostgreSQL 还是其他数据库。使用此参数可以:

  • 跳过指纹识别:直接开始针对指定数据库的注入测试,节省初始探测时间。
  • 提高测试精度:使用针对该数据库特有的语法、函数和系统表进行注入,提升成功率。
  • 减少请求流量:避免发送其他数据库的探测载荷,使测试过程更隐蔽。

支持的常见数据库值:

  • MySQL
  • Oracle
  • PostgreSQL
  • Microsoft SQL Server (或 MSSQL
  • SQLite
  • DB2
  • Firebird
  • Microsoft Access 等。

使用示例:

  • sqlmap -u “http://target.com/page?id=1” --dbms MySQL:告诉 sqlmap 目标是 MySQL 数据库,它将直接使用 version()information_schemaCONCAT() 等 MySQL 特有的语法进行测试。
  • sqlmap -u “http://target.com/page?id=1” --dbms PostgreSQL:指定目标为 PostgreSQL,将使用 pg_catalogcurrent_userCHR() 等语法。
  • sqlmap -u “http://target.com/page?id=1” --dbms “Microsoft SQL Server”:指定目标为 MS SQL Server,将使用 @@versionsysobjectsWAITFOR DELAY 等语法。

参数组合使用

这两个参数经常组合使用,以进行最快速、最精确的注入测试。

典型工作流示例:

  1. 通过初步观察或简单测试,猜测目标可能使用 MySQL 数据库,并且页面有错误回显
  2. 使用命令:
    sqlmap -u "http://target.com/vuln.php?id=1" --technique E --dbms MySQL
    • --technique E:直接使用最快的“报错注入”技术。
    • --dbms MySQL:直接使用 MySQL 的报错函数(如 updatexmlextractvalue)进行注入。
  3. 这样 sqlmap 会跳过所有其他技术和数据库的探测,直接用最有效的方式发起攻击,极大提高效率。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。


评论 (0)