mysql报错注入利用

本文介绍SQL注入的一种类型——基于报错注入,详细解释其原理与利用方式,包括如何通过构造错误的SQL语句获取数据库信息,及extractvalue和updatexml函数的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

sql注入一般分类如下:
- 基于时间注入
- 基于报错注入
- 基于联合查询注入
- 基于布尔注入

基于报错注入也是一种sql注入漏洞,漏洞原因是后端在处理用户输入时直接拼接进sql语句中进行执行,从而产生了正常业务之外的逻辑。其实本质上和xss这种代码注入类似,核心是没有区分开代码和用户输入的数据。
基于报错注入特点是页面会直接显示回显sql语句执行的报错信息,这样我们其实可以通过故意构造错误的sql语句,将我们想要执行的攻击sql语句的执行结果直接在页面上回显出来。

常见函数

mysql中最常见的利用函数就是extractvalueupdatexml这两个了,以extractvalue为例,看下它原始的用法:
ExtractValue(xml_str , Xpath) 函数,使用Xpath表示法从XML格式的字符串中提取一个值
在这里插入图片描述

函数利用

以上讲的是extractvalue函数的正常使用情况,但是如果我们构造了不符合规定的Xpath,mysql就会报语法错误,并显示XPath的内容,攻击者也是利用这一特性,将想要执行的攻击sql语句结果带出来。

  1. .XPATH语法的报错条件是遇到特殊字符就会报错,如~{等。以~为例,18进制为0x7e,mysql本地执行可以带出user()执行结果。
    在这里插入图片描述

  2. 找个例子,可以通过extractvalue函数,成功查出当前user,可以看到并非是root权限。
    payload:) and 1=(extractvalue(1,concat(0x7e,user(),0x7e))) and 1=1;
    在这里插入图片描述

  3. updatexml函数类似,如下:
    payload:) and 1=(updatexml(1,concat(0x7e,user(),0x7e),1)) and 1=1;
    在这里插入图片描述

  4. 另外有一点需要注意的是,报错内容不可能不限制长,其实是有一定长度限制的,报错内容大约是32个字符:
    在这里插入图片描述

总结

在此小记下mysql基于报错注入的利用。对于互联网行业,此类注入一般比较少,最多的还是基于时间的注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值