sql注入之报错注入

一、报错注入的定义

报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。

二、利用报错注入的前提

1.页面上没有显示位,但是必须有SQL语句执行错误的信息。

三、报错注入的优缺点

1.优点:不需要显示位,如果有显示位建议使用union联合查询。

2.缺点:需要有SQL语句的报错信息。

四、构造报错注入的基本步骤

  1. 构造目标查询语句;
  2. 选择报错注入函数;
  3. 构造报错注入语句;
  4. 拼接报错注入语句;

五、常见的报错注入函数

  1. floor();
  2. extractvalue();
  3. updatexml();
  4. geometrycollection();
  5. multipoint();
  6. polygon();
  7. multipolygon();
  8. linestring();
  9. multilinestring();
  10. exp();

六、报错注入演示(只演示前三个)

1.利用floor()函数进行报错注入

主要报错原因为:count()+rand()+group_by()导致主键重复。

因为floor(rand(0)*2)的重复性,导致group by语句出错。group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行

### SQL 注入中的报错注入实际操作方法 #### 背景介绍 报错注入(Error-Based SQL Injection)是一种通过触发数据库错误消息来提取数据的技术。这种方法通常用于无法直接从页面获取查询结果的情况下,例如 `INSERT`、`UPDATE` 或 `DELETE` 查询[^1]。 当应用程序未正确过滤输入并允许恶意字符串进入 SQL 查询时,攻击者可以通过构造特定的 SQL 语句引发异常,并利用这些异常信息推断出目标系统的内部结构和数据[^3]。 --- #### 常见工具和技术 以下是几种常用的函数和技术,在报错注入中被广泛使用: 1. **UPDATEXML()** - 函数描述:`UPDATEXML()` 是 MySQL 中的一个内置函数,可以解析 XML 数据树并更新节点值。 - 使用场景:如果传入非法路径或无效参数,它会抛出详细的错误信息,其中可能包含拼接的数据。 - 示例代码: ```sql ' AND (SELECT UPDXML(1, CONCAT(0x7e, (SELECT database())), 1)) # ``` 上述代码试图通过 `CONCAT` 将当前数据库名称附加到错误消息中[^4]。 2. **ExtractValue()** - 函数描述:类似于 `UPDATEXML()`,`ExtractValue()` 可以用来解析 XML 文档的内容。 - 错误触发机制:提供不合法的 XPath 表达式即可让其崩溃,并暴露部分数据。 - 示例代码: ```sql ' AND ExtractValue(1, CONCAT(0x7e, (SELECT user()))) # ``` 3. **FLOOR()** - 函数描述:`FLOOR()` 返回不大于给定数值的最大整数。 - 利用方式:结合随机化或其他复杂逻辑制造重复键冲突,从而导致错误输出。 - 示例代码: ```sql ' ORDER BY FLOOR(RAND(0)*2) GROUP BY id # ``` --- #### 实战案例分析 假设存在一个简单的登录验证接口 `/login?username=admin&password=pass`,并且后台执行如下查询: ```sql SELECT * FROM users WHERE username = '$username' AND password = '$password'; ``` 此时,如果我们提交以下请求: ```http /login?username=k' AND UPDATEXML(1, CONCAT(0x7e, (SELECT table_name FROM information_schema.tables LIMIT 1)), 1)-- &password=any ``` 服务器可能会返回类似这样的错误响应: > XPATH syntax error: '~tablename' 这表明我们成功地从 `information_schema.tables` 获取到了第一个表的名字。 继续深入挖掘列名或者具体记录的过程也遵循相同原理——逐步嵌套子查询直到达到目的为止。 --- #### 防护措施建议 为了防止此类攻击发生,请务必采取以下预防手段之一或多条组合策略: - 对所有外部可控变量实施严格的白名单校验; - 启用预编译语句代替动态组装SQL串; - 关闭不必要的调试模式以及隐藏敏感堆栈跟踪详情; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南棋子网络安全盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值