SQL注入漏洞(绕过篇)

2023-11-02

在学习完了SQL注入的原理SQL注入的类型后那么可以说SQL注入已经大致了解了,但事实是现实中开发人员不可能让你这么简单就攻击到数据库,他们一般会对已输入或可输入的数据做一定限制,这篇文章我主要对SQL注入中代码或者waf过滤的绕过做一次总结。

大小写绕过

这是最简单也是最鸡肋的绕过方式,可以利用的原因有两个:SQL语句对大小写不敏感、开发人员做的黑名单过滤过于简单。

双写绕过

双写绕过的原理是后台利用正则匹配到敏感词将其替换为空。即如果过滤了select,我们输入123select456 后会被检测出敏感词,最后替换得到的字符串由123select456 ---> 123456。这种过滤的绕过也很简单即双写select即可,如:selselectect  ---> select ,进行一次这样的过滤就双写,两次就三写以此类推。看下面例子:

这里很清楚的看到错误的信息,or应该是被过滤了,我们利用上面讲的绕过方式,

 成功了,这也就是双写绕过的方法,挺简单的。

空格过滤

如果遇到空格被过滤了,主要的几个思路都是想办法找一个代替品,能代替空格的有几个:

注释绕过  /**/ :正常情况下只要这个没有被过滤就一定能代替。

括号过滤 () :将所有的关键字都用括号括起来就可以达到替代空格分隔的作用如下,

正常:select * from user

括号:(select)*(from)(user)

url编码:这种遇到可以试试。用%20代替空格或者用其他的url编码

%09、%0a、%0b、%0c、%0d 、%a0、%00

回车换行替代:回车换行也可以用做分隔功能替代空格。

Tab替代:Tab可以做分隔功能。

注释过滤

遇到我们平常用的 --+ 注释过滤,我们可以用以下几种注释代替:

#、;%00、-- (两个减号一个空格)

用其他数据闭合:

select * from user where id='1'

                        ||

                        V

select * from user where id='1' or '1' ='1'

引号过滤

引号过滤有两种全款,一种是不能出现引号一种是会被转义,转义的处理方法上一篇已经说过了就是宽字节注入的绕过,如果是无法出现引号又必修得用引号,可以将参数的值和单引号或者双引号绑定在一起然后转换为16进制最后在输入时在前加0x*****。

逗号过滤

有函数或者指令在使用时需要用到逗号,因此绕过逗号的方法因函数或指令的不同而不同。

substring()

不用在意函数,substrsubstring差不多。可以看到从上面本应用逗号的情况到下面直接用from……for代替。

如果需要用到mid()函数,其中也有逗号绕过的方法与substring()相同,用from……for替代逗号。

limit 0,1

limit 0,1中存在逗号,那么如果逗号被过滤了我们替代的方法是用offset,即

这里要注意一下,如果使用了offset,原本逗号前后的数据要相互交换一下。

union

联合注入中我们需要select 1,2,3,4……,而如果过滤了逗号这里又该如何绕呢?这里其实挺有意思的,联合查询select 1,2,3,4……经过测试可以单独写如下

括号后面的a、b、c是随意命名的是省略了as的写法,为什么我要这么写?这样写就可以把逗号过滤,我们使用offset代替可以得到,

所以联合查询的逗号绕过是利用join代替。

等于号过滤

如果只过滤了等于号可以用以下代替

<> :不等于的意思 !=

regexp、like、rlike

逻辑运算符过滤

过滤了or、and、xor、not可以用相对应的字符代替:&&、||、| 、!

如果都不能用则可以考虑使用笛卡尔积(^),

这种可以直接不使用and or这些连接符。

编码绕过

编码绕过说实话传统很少用上,但是有时他的利用真的就会出其不意,所以还是了解一下。

十六进制绕过

相似函数的互相替代

1)sleep() <-->benchmark()

2)ascii() <-–>hex()、bin(),替代之后再使用对应的进制转string即可

3)group_concat() <–->concat_ws()

4)substr() <--> substring() <--> mid()

5)user() <--> @@user、datadir–>@@datadir

6)ord() <-–> ascii():这两个函数在处理英文时作用相同,但是处理中文等时不一致。
 

7)or过滤导致information无法使用可以用如下几个代替进行查表:

sys.x$schema_flattened_keys

sys.x$schema_table_statistics_with_buffer

sys.schema_table_statistics_with_buffer

字段的查询则利用无列名配合爆破如:

(select 1,xxxxx) > (select * from tablename)

参考:SQL注入绕过的姿势_真的强啊!的博客-CSDN博客_sql注入from绕过

SQL注入时当and、or等字符被过滤了怎么办_litchi125的博客-CSDN博客_sql注入过滤and

SQL注入过滤的绕过_12622800的技术博客_51CTO博客

SQL注入绕过 - redglare - 博客园

https://www.csdn.net/tags/MtTaEgwsMTY0OTk1LWJsb2cO0O0O.html#2_12

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入漏洞(绕过篇) 的相关文章

  • 如何从连接字符串中提取数据库名称,而不考虑 RDBMS?

    我正在研究一个不知道正在使用的 RDBMS 的课程 当然 应用程序的其余部分都清楚这一点 连接字符串是此类的输入 我需要数据库名称 无论 RDBMS 如何 如何从连接字符串中提取数据库名称 我读到以下问题 如何使用 SqlConnectio
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • Postgresql:SERIAL 在约束 INSERT 失败时递增

    有一个像这样的简单表结构 CREATE TABLE test id INT PRIMARY KEY sid SERIAL 我注意到如果我尝试插入一行但它未通过约束测试 即主键约束 SERIAL计数器无论如何都会增加 所以下一次成功插入 si
  • “$$ 处或附近的未终止的美元引号字符串

    我试图使用 DBeaver 声明一些变量并不断遇到此错误 Unterminated dollar quoted string at or near DO DECLARE A integer B integer BEGIN END 有任何想法
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • sql 查询的权限被拒绝

    我正在尝试通过经典的 asp 记录集执行以下查询 SQL Select P Name as P Name P Description as P Description from L PagePermission inner join A P
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • play20 ebean 生成的 sql 在 postgresql 上抛出语法错误

    我正在尝试使用 postgresql 来启动我的 play20 应用程序 以便我可以使用并稍后部署到 Heroku 我跟着这个answer https stackoverflow com questions 12195568 errors
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 返回行位置 - Postgres

    我返回一个带有位置的表 select from select row number over as position from organization result where data1 Hello 返回这个 这是正确的 data1 H
  • SQL Server PIVOT 函数

    我有一个检索所有代理及其模块的查询 结果集将每个模块返回 1 行 SELECT am agentID AS agentid pa agentDisplayName agentdisplayname m ModuleName ModuleNa
  • 从存储过程中的动态 SQL 获取结果

    我正在编写一个存储过程 需要在过程中动态构造 SQL 语句以引用传入的表名称 我需要让这个 SQL 语句返回一个结果 然后我可以在整个过程的其余部分中使用该结果 我尝试过使用临时表和所有内容 但我不断收到一条消息 提示我需要声明变量等 例如

随机推荐

  • 华为机试C语言-最长方连续方波信号

    题目描述 https zhuanlan zhihu com p 546563566 代码分层有利于代码调试 include
  • Okhttp设置公共参数,以json对象放入@Body请求公共参数的配置方式

    当网络请求都是基于一个URL 所有的接口都是同一个地址 而请求不同接口数据则是通过command字段进行配置 然后所有的请求参数都是需要自己写一个bean类 再转成json格式放入请求body里发给后台 而不是通过表单form body发送
  • MySQL之MVCC

    事务隔离级别 对于一个MySQL服务 可以有多个客户端与其建立连接 并向其发送SQL语句 一条SQL语句可能是一个事务的一部分 MySQL可以同时处理客户端的多个事务 一次事务对应着一次完成的状态转换 事务执行完毕后 需要保证数据符合客观逻
  • 622. 设计循环队列

    622 设计循环队列 Java实现循环队列设计 题目描述 设计你的循环队列实现 循环队列是一种线性数据结构 其操作表现基于 FIFO 先进先出 原则并且队尾被连接在队首之后以形成一个循环 它也被称为 环形缓冲器 循环队列的一个好处是我们可以
  • 比MyBatis Generator更强大的代码生成器

    本文为 从零打造项目 系列第一篇文章 首发于个人网站 从零打造项目 系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 工欲善其事 必先利其器 作为 从零打造项目 系列的第一篇文章
  • 服务器被放入后门文件,服务器被***了怎么办 rkhunter的简单安装及检测后门

    被 了 查看了下 var log messages和last都已经清理 sshd spawn bin echo c d mail s 标题 邮箱地址 邮件来报警 一 接着查看 host allow里面设置 禁止某个可疑ip的访问 二 用rk
  • STM32CubeMX----基本定时器(TIM6、TIM7)

    基本定时器TIM6 TIM7 的相关参数 Activated 激活TIM6 把前面的方框选中局表示激活了TIM6 One Pulse Mode STM32F103定时器的One Pulse Mode是一种特殊的计数模式 它只产生一个脉冲输出
  • win10 安装mysql-5.7.23-winx64

    下载MYSQL 官网下载MYSQL5 7 23版本 链接地址https www mysql com downloads 下载流程图如下 2 安装 直接解压到D盘 解压后的目录结构为 注不需要手动新建data和my ini文件 这两个是通过命
  • 关于element-ui表格table设置header-cell-class-name样式不起作用的原因分析

    在编写表格的时候想给表头添加样式 使用 header cell class name怎么都添加不上样式 检查元素发现连class都没添加上 查了很多资料有人说element之前版本不支持这属性 但我使用的并不是之前的版本啊 有人说是添加sc
  • 柚城后台管理系统--Vue+ElementUi+MySQL+NodeJs

    柚城后台管理系统 介绍 该项目是基于前后端分离的开发模式 基于Vue技术栈的SPA单页面项目 后端主要操作数据库并向前端暴露一些API接口 前端主要负责绘制页面同时 利用ajax调用后端提供的接口 具体实现功能有 用户管理 权限管理 商品管
  • Aviator表达式

    1 正则表达式 匹配 Map
  • 如何在Unity中使用AR Foundation和ARCore创建一个项目并编译到Android 11手机设备中

    最近又开始学如何使用Unity进行AR开发 因为Unity开发的AR Foundation在各种设备 例如Android iOS HoloLens 的原生AR SDK 例如ARCore ARKit Windows 10 SDK 上进行了封装
  • Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

    叠加组件 可以悬浮在其他组件上边 我们通常使用他开发Toast PopupWindow弹窗等 虽然可以直接创建Overlay 但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层 使用方法 获取实例 Overl
  • ajax用iframe,使用ajax Post请求更新iframe内容

    我正在制作Rich文本编辑器 我有一个textarea和一个iframe 我想更新一个iframe内容点击某个按钮 其中ajax post请求传递给它textareas值 这是我的HTML代码 这是js view function func
  • 微服务容器化实践——微服务引入的问题和解决方案

    文章目录 什么是微服务 微服务的不足 微服务的好处 微服务架构引入的问题及解决方案 单体架构与微服务架构的对比 什么是微服务 使用一套小服务来开发单个应用的方式 每个服务运行在独立的进程里 一般采用轻量级的通讯机制互联 并且它们可以通过自动
  • 数据库:存放变长记录的Page类代码实现

    原文链接 https littlefish33 cn DataBase SimplePage 设计思路 代码实现 Page类的初始化结构 插入记录的一种情况 删除记录 插入记录的另一种情况 排序 总结 设计思路 文章实现的思路大致参考教材D
  • vue项目关闭提交代码时的代码校验(整理)

    赋链接一份 其他博主文章 记录 vue项目关闭提交代码时的代码校验 vue vue项目一般会有一个提交代码时的校验 一般提交需要git commit m no verify 才能跳过校验 不想每次提交都输入 no verify可以进行如下配
  • C++operator()(重载小括号运算符)

    在C 语言中有时候需要重载运算符 今天我们主要介绍它主要应用的场合 仿函数 先考虑一个简单的例子 假设有一个vector 你的任务是统计长度小于5的string的个数 如果使用count if函数的话 你的代码可能长成这样 bool Len
  • CESM2 实验笔记

    文章目录 一 关于重启 运行方式 重启文件 初始文件 1 重新启动 RESTART 1 1 关于重启文件 2 RUN TYPE 初始化运行方式 startup branch hybrid 3 branch 或者 hybrid运行的示例 4
  • SQL注入漏洞(绕过篇)

    在学习完了SQL注入的原理 SQL注入的类型后那么可以说SQL注入已经大致了解了 但事实是现实中开发人员不可能让你这么简单就攻击到数据库 他们一般会对已输入或可输入的数据做一定限制 这篇文章我主要对SQL注入中代码或者waf过滤的绕过做一次