Union-一物多用

最近刚看《STL源码剖析》,看到SGI STL第二级分配器维护空闲空间的链表,还比较有意思。

一个Union的对像只分配Union中最大的属性的所需的内存。链表中每个结点维护一个内存空间的指针和一个链指针。当该结点的空间被分配出去了,则把它从空闲链表中删除,这样那个链表指针就用不到了,只有内存空间的指针被容器等使用;当一个结点的内存没有被分配出去时,它的空间指针是用不到的,只有链表的指针用得到。这样链表的指针实际上是在该结点维护的待分配的空间中,从需减少为小型对像分配内存时内存管理消耗的空间所占的比例。

<think>嗯,用户现在想了解sqlmap中的几个联合查询相关参数:--union-cols、--union-char、--union-from和--union-values的用法和示例。我之前已经回答过他们关于其他参数的问题,现在需要根据用户提供的引用资料和之前的回答结构来组织内容。 首先,我需要回顾用户提供的引用内容,特别是引用1中的参数列表。这些参数涉及UNION注入技术,所以可能需要解释每个参数的具体用途,并结合示例说明如何应用。用户之前的回答结构很详细,分点解释每个参数的作用、适用场景、示例和注意事项,所以这次也应该保持一致的格式。 接下来,我需要确定每个参数的功能。比如,--union-cols用于指定测试的列数范围,默认是检测1到10列。而--union-char是定义填充列的字符,比如NULL或随机数。--union-from指定FROM子句中的表,可能在需要特定表时使用,比如dual表。--union-values则是直接指定联合查询的值,避免随机生成。 然后,我需要考虑用户可能的实际使用场景。比如,当默认的列数范围不够时,用户可能需要扩展范围;或者当目标数据库对NULL敏感时,使用其他字符代替。此外,用户可能需要绕过特定的过滤机制,这时调整这些参数会有帮助。 还要注意用户提到的引用3中关于sqlmap支持多种数据库的信息,所以在示例中可能需要提到不同数据库的差异,比如Oracle需要FROM dual,而MySQL不需要。这样用户能明白参数的使用场景因数据库而异。 另外,用户之前的回答中有组合使用示例和技术对比表格,这次是否也需要加入?比如给出一个综合示例,展示多个参数的组合使用,以及对比各参数的影响,帮助用户更好理解如何选择参数。 需要注意可能的误区,比如错误使用--union-from导致语法错误,或者--union-values的值类型不匹配导致注入失败。这些需要在注意事项中强调,帮助用户避免常见错误。 最后,生成相关问题,确保覆盖用户可能进一步询问的方向,比如如何确定列数,或在不同数据库中的应用差异。 现在需要把这些思考整合成结构化的回答,分参数详细说明,每个部分包括作用、适用场景、示例和注意事项,然后可能添加组合示例和对比表格,最后相关问题。同时,引用之前提供的引用资料中的信息,比如引用1中的参数说明,引用3提到的数据库支持情况,来增强回答的权威性。 需要确保语言简洁明了,示例具体,注意事项突出常见问题,帮助用户正确应用这些参数。同时,保持与之前回答一致的格式,方便用户对比和参考。</think>### SQLMap `--union-cols`、`--union-char`、`--union-from`、`--union-values` 参数详解 #### 一、`--union-cols` 参数 **作用**: 指定 UNION 查询注入时测试的列数范围。默认情况下,SQLMap 会自动探测目标表的列数(范围为 1-10),而 `--union-cols` 允许自定义此范围以应对特殊场景(如已知列数或绕过过滤规则)[^1]。 **适用场景**: - 目标表列数已知,需跳过探测直接指定 - 默认探测范围不足(例如目标表列数超过 10) - 绕过 WAF 对列数探测行为的检测 **示例**: 探测 5 到 15 列的 UNION 注入: ```bash sqlmap -u "http://example.com?id=1" --technique=U --union-cols=5-15 ``` **注意事项**: - 范围设置过大可能增加请求时间 - 需结合 `--union-char` 或 `--union-from` 保证语法正确性 --- #### 二、`--union-char` 参数 **作用**: 指定 UNION 查询中填充额外列的默认字符。默认使用 `NULL`,但某些数据库(如旧版 MySQL)可能要求特定类型(如数字或字符串)的占位符[^1]。 **适用场景**: - 目标数据库对 `NULL` 敏感(如触发类型错误) - 需要伪装为合法数据类型(如填充数字 `1` 或字符串 `'a'`) **示例**: 使用数字 `1` 作为占位符: ```bash sqlmap -u "http://example.com?id=1" --technique=U --union-char=1 ``` 生成的 UNION 查询示例: ```sql UNION ALL SELECT 1,1,1,version() -- ``` **注意事项**: - 需与 `--union-cols` 配合使用 - 若占位符类型与实际列类型不匹配,可能导致注入失败 --- #### 三、`--union-from` 参数 **作用**: 指定 UNION 查询中 `FROM` 子句的表名。默认情况下 SQLMap 可能忽略 `FROM` 子句,但某些数据库(如 Oracle)要求必须指定表(如 `FROM dual`)[^1]。 **适用场景**: - 目标数据库强制要求 `FROM` 子句(如 Oracle、PostgreSQL) - 绕过特定语法限制(如联合查询需关联其他表) **示例**: 在 Oracle 中注入时指定 `FROM dual`: ```bash sqlmap -u "http://example.com?id=1" --technique=U --union-from=dual ``` 生成的 UNION 查询示例: ```sql UNION ALL SELECT NULL,version(),NULL FROM dual -- ``` **注意事项**: - 需根据目标数据库类型调整表名(如 MySQL 不需要 `FROM dual`) - 错误表名会导致语法错误 --- #### 四、`--union-values` 参数 **作用**: 直接指定 UNION 查询中每列的值,代替自动生成的占位符(如 `NULL` 或 `--union-char` 的值)。用于精确控制联合查询的返回结果[^1]。 **适用场景**: - 需要特定列值绕过过滤(如 WAF 检测 `NULL`) - 构造特定数据格式(如 JSON 或 XML) **示例**: 指定联合查询的列值为数字 `1` 和当前用户: ```bash sqlmap -u "http://example.com?id=1" --technique=U --union-values="1,USER()" ``` 生成的 UNION 查询示例: ```sql UNION ALL SELECT 1,USER() -- ``` **注意事项**: - 值的数量必须与目标表列数严格匹配 - 需手动确认列数据类型是否兼容 --- #### 五、组合使用示例 **场景**: 绕过 WAF 对 `NULL` 的检测并指定列数和 `FROM` 表: ```bash sqlmap -u "http://example.com?id=1" \ --technique=U \ --union-cols=4 \ --union-char="'a'" \ --union-from=users \ --union-values="'a',@@version,'a','a'" ``` **解析**: 1. `--union-cols=4` 指定探测 4 列 2. `--union-char="'a'"` 用字符串 `'a'` 替代 `NULL` 3. `--union-from=users` 指定 `FROM users` 子句 4. `--union-values` 精确控制返回数据 --- #### 六、技术对比 | 参数 | 核心功能 | 典型用例 | |-------------------|--------------------------|----------------------------| | `--union-cols` | 控制列数探测范围 | 绕过列数限制或加速探测 | | `--union-char` | 定义占位符类型 | 避免 NULL 触发数据库类型错误 | | `--union-from` | 指定 FROM 子句表名 | 适配 Oracle 等数据库语法 | | `--union-values` | 自定义列值 | 构造特定数据格式或绕过过滤 | --- #### 七、最佳实践 1. **列数探测优化**: - 使用 `--union-cols` 前,先通过 `--columns` 获取表结构 - 结合 `--threads` 加速探测(如 `--threads=5`) 2. **绕过 WAF**: - 使用 `--union-values` 替换敏感关键词(如 `SELECT` → `SEL/**/ECT`) - 配合 `--tamper=chardoubleencode` 对特殊字符双重编码 3. **数据库适配**: - Oracle:`--union-from=dual` - MySQL:无需 `--union-from`,但需注意版本差异(如 5.x 与 8.x) --- ### 相关问题 1. 如何确定 UNION 注入所需的精确列数? 2. 在 Oracle 数据库中,如何利用 `--union-from` 提升注入成功率? 3. `--union-values` 在绕过云 WAF 时有哪些高级用法? [^1]: SQLMap 官方文档,UNION 查询注入技术章节 [^2]: 《SQL 注入攻击与防御》,联合查询技术详解 [^3]: OWASP 测试指南,SQL 注入绕过方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值