18、SQL注入之堆叠及WAF绕过注入

news2024/7/6 17:50:51

目录

    • 堆叠查询注入
    • WAF绕过-SQL注入
    • 简要讲解安全狗、宝塔等防护waf策略规则
      • 大小写和关键字替换
    • 加密解密
    • 编码解码
    • 等价函数
      • 特殊符号
      • 反序列化
      • 注释符混用
      • 更改提交方式
      • Fuzz大法
      • 数据库特性
      • 垃圾数据溢出
      • HTTP参数污染
    • 实测简易CMS头部注入漏洞Bypass原理分析

堆叠查询注入

stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语多条一起执行。而在真实的运用中也是这样的,我们知道在 mysql 中,主要是命令行中,每一条语句结尾加;表示语句结束。这样我们就想到了是不是可以多条语句一起使用。这个叫做 stacked injection。

堆叠注入是分数据库的,有些支持有些不支持。

堆叠注入是有局限性,仅支持部分数据库(mysql),像sql server、oracle,就不支持。

堆叠查询,就是在原有的代码调用语句执行之上,在注入时,将变量的参数值加入另外一条SQL语句进行注入,就实施我们定义的SQL语句

堆叠注入的一个用处,因为我们讲一个漏洞,如果你不知道,它的一个实际应用的话,学了之后,对我们的印象也不太好,我们也不太知道这个应用的应用场景

注入需要得到管理员的帐号密码,密码是加密的,无法解密出来。这个时候,我们可以利用堆叠注入进行插入数据,由于是我们插入的数据,所以用户密码是自定义的,可以正常解密登录

密码加密经常解密不出来,这个是很正常的,我们可以利用这个注入漏洞,实现堆叠注入。

分享这个例子,只是说它的用处,不要理解为它只能做这个事情,后面的语句可以写成update或者其它语句都是可以的。

一般我们管理员和普通用户在一张表或数据库里面,会用id值和组进行区分,我们只需要把添加的用户设置为1组或2组进行权限的划分,因为很多网站会用这个东西来判定是管理员还是普通用户。

WAF绕过-SQL注入

绕过上传、绕过注入、绕过扫描
WAF:宝塔、安全狗、阿里云盾

阿里云服务器,在初次安装服务的时候,会默认自带阿里云盾

简要讲解安全狗、宝塔等防护waf策略规则

宝塔是一键化的搭建工具,它上面有些插件是要收费的

安全狗的防护能力是跟不上其它防护软件的,用的人比较多是因为它是免费的,而且它的历史比较悠久,它出现的时候,很多WAF还没有出现,例如D盾、360网站卫士、护卫神这些

宝塔比安全狗更难绕过,当我们把宝塔研究清楚之后,很多东西就很好研究了。安全狗只是开胃小菜。

我们一般完成防护软件安装之后,都会去采用默认的防护配置

把安全狗的防护策略全部打开,肯定是会更加安全的,但是有时候正常的访问、正常的地址,你在访问的时候,这个网站也会出现误报,就是它会拦截一些正常的页面和正常的应用。为了防止一些误报,安全狗在安装的时候,会把它关闭,就是为了防止误报。大部分人在安装完之后,会对默认的配置进行初始设置,但是也不排除有些人为了安全,把这些配置全部打开

HTTP安全检测这块除了常见漏洞的拦截,还有一些常见扫描工具的拦截
资源防护这块,有后台地址防护,防止黑客扫描到后台

特定资源防护,假设网站有mdb文件、sql文件,我们在访问的时候,没有WAF,可能直接显示或下载,但是有这种防护软件,你在访问的时候,他会直接拦截

我们经常在扫描网站、目录的时候,工具一开,突然网站就打不开了,这就是流量防护,他根据你自身IP地址请求次数过多,流量速度过快,然后判定你为黑客扫描攻击,直接拦截;这个也是很正常的情况,都有这个经验,都有碰到过

我们讲这个WAF绕过,其实是讲他拦截的这个东西,怎么突破;所以WAF绕过是针对某个漏洞、某个攻击方式的绕过,不是单纯的说怎么绕过,我们能不能进行突破,绕过是有个目标的,这个绕过的东西不一样,方法和思路是不一样的,因为每个东西都有相应的检测规则和绕过方式

程序员在开发这款软件的时候,它会有这个检测,检测是通过代码实现的,所以检测的全,我们就无法绕过,检测的不全,我们就有空子可以钻;所以我们后续在研究如何绕过的时候,就是在测试这个规则都有那些东西,有没有搞全,或者有那些缺陷

代码会决定你的接收方式,有的代码只接受get或者说全部接受,如果只接受get,那么post是接收不到的

采用更改提交方式去绕过WAF,这个思路是正确的,但是后台代码不支持,那就无法攻击成功

我们在学WAF绕过的时候,它的规则其实是多方面的,不仅是一方面

数据:网站参数的数据,大部分过滤是根据你提交的数据有一个检测,所以,我们在数据上会有一个变异来进行绕过

大小写和关键字替换

id=1 UnIoN/**/seLecT 1,user()

Hex() bin()等价于ascii()
Sleep() 等价于 benchmark()
Mid() substring() 等价于 substr()
@@user 等价于 User()
@@Version 等价于 version()

加密解密

s->%73->%25%37%33
hex,unlcode,base64等

编码解码

等价函数

特殊符号

在数据库查询的时候,添加特殊符号,数据库不会受到影响,也能查询出数据,就实现了绕过
WAF在检测的时候,类似于我们在开发里面的正则表达式,就是在我们输入的数据里面去匹配关键性的东西,关键性的东西匹配出来能够跟它数据库里面的字典匹配上,那它就会拦截,如果没有就会放过;我们用这些特殊符号就能够达到
我们绕过的前提条件是既保证了语句的正常运行结果,又能防止软件的正常匹配能够实现绕过。我们的绕过就是围绕这两块做文章

反序列化

把数据以反序列化的格式提交来绕过,但是有一个前提条件,对方的代码是支持反序列化的

注释符混用

// -- --+ # /**/ + :%00 /!**/等

注释符是为了便于代码的可阅读性,数据库当中也有注释符;注释符用的好,就会实现和特殊符号一样的含义,利用注释符可以实现干扰特殊符号的匹配,来实现绕过

这个注释符和特殊符号是要看具体的数据库、具体的情况才能知道的;因为每个数据库的注释符号和特殊符号都是不一样的

WAF拦截关键字拦截的是一个整体,我们可以采取拆分关键字的方法

/**/,mysql特有的注释符,这个是不会影响数据库执行的,database/**/()就可以绕过拦截

安全狗在匹配到database/**/()的时候。其实就不是原则意义上的database了,是因为有/**/在干扰,就没有去拦截。

安全狗的很多拦截是针对get型提交方式的

union/**/select
un/**/ion/**/select,执行不了,因为关键字被拆分掉了,数据库识别不了

%0a是换行符,%23是注释符

-1/*%Oa*/union/*%Oa*/select/*%0a*/1,2,3,如果还是拦截那就再加一下干扰字节,例如X、a
#部分bypass sqlinject payload
id=1 union/*%00*/%23a%0A/*!/*!select 1,2,3*/;%23
id=-1 union/*%00*/%23a%0A/*!/*!select%201,database%23x%0A(),3*/;%23

id=-1%20union%20/*!44509select*/%201,2,3%23
id=-1%20union%20/*!44509select*/%201,%23x%0A/*!database*/(),3%23

id=1/**&id=-1%20union%20select%201,2,3%23*/
用到了参数污染、数据库特性、注释符混合,这个绕过方式非常的巧妙
这里的%20是不能换成空格的,因为这样就会绕不过去
因为是apache,它接收的是-1%20union%20select%201,2,3%23*/,#号把*/给屏蔽掉了,它不会影响到我们的语句;安全狗是全部接收,1/**-1%20union%20select%201,2,3%23*/但是执行是执行-1%20union%20select%201,2,3%23*/的,因为参数污染只接收后面数据的
/***/是mysql里面的注释符
当前执行语句: SELECT * FROM users WHERE id=-1 union select 1,2,3#*/   遵循参数污染
安全狗是全部接收,它可能接收1/**-1%20union%20select%201,2,3%23*/也可能接收1/**&id=-1%20union%20select%201,2,3%23*/,中间这串代码实际上是被注释掉了,安全狗误认为后面这串代码没有起到任何作用,实现了绕过
其实是配合参数污染,让安全狗在检测的时候,产生错觉,从而绕过;数据库在接收数据的时候不是接收这个数据,它接收的是-1%20union%20select%201,2,3%23*/
安全狗匹配的时候匹配的是1/**-1 union select 1,2,3#*/或1/**&id=-1%20union%20select%201,2,3%23*/其中符号中起到注释作用,正常情况下没有执行,安全狗直接不管,但是参数污染导致接收的真实数据是-1 union select 1,2,3#*/能正常执行sql

id=-1 %20union%20all%23%0a%20select%201,2,3%23
-1 %20union%20all%23%0a%20select%201,%230%0Adatabase/**/(),3%23
union select 1,2,3#
union #a
select 1,2,3#

换行是让安全狗截止匹配,a是为了防止前后的一个匹配,就是为了保证这个语句的正常执行;单独写个a是绕过了,但是语句错误了,所以我写了个#闭合掉,然后再加个换行符,这样换行符就不会受到#号的干扰,然后select也能够正常拼接到数据库语句当中,数据库执行的原型是union select 1,2,3#;如果不换行,相当于select语句会被屏蔽掉,数据库执行的原型是union #aselect 1,2,3#

mysql数据库是支持换行符的,在数据库当中换行是不会受到影响的,它是能够正常执行的

更改提交方式

前提:代码要能够支持其它方式提交
变异

其它:根据绕过的漏洞,注入里面的数据库,每个数据库有它相应的特性,还会有一些方法,比如垃圾数据

Fuzz大法

fuzz我们称呼为模糊测试,就是暴力测试,什么都不知道,我们就是测试,就是吃西瓜,有点类似于我们对登录密码进行爆破,就是不管三七二十一,就是测试
在爆破的时候,爆破到账号然后成功登录,模糊测试就是这么个意思
fuzz不是一个技术,它是一个概念,一个思路
注入语句的任意一个地方,做个字典,批量的去写脚本生成很多种可能性,依次去请求数据包,来判断数据包在发送的时候,没有被安全狗拦截,那么那条语句的代码就视为绕过了注入
fuzz其实就等同于我们手工不断测试,只是说它利用脚本帮助我们实现,就不需要人工一个个的去访问,我们写好相应的脚本,相应的字典,去批量化的访问这个地址,就完事了
fuzz就是个思路,你明白了这个思路,你就明白了它
fuzz通常是用脚本和工具去批量测试,实际上是要我们去编写脚本,这就是我们学开发的一个很重要的原因
可以用fuzz去测试什么方式可以绕过waf

数据库特性

/*!select * from users*/

数据库特性,在数据库里面仍然能够正常执行
1、Mysgl技巧
(1) mysql注释符有三种:#、/*...*/、-- (注意–后面有一个空格)
(2) 空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符号: %a 换行符
可结合注释符使用%23%0a,%2d%2d%0a。
(3)内联注释
/*!UnIon12345SelEcT*/ 1,user() //数字范围 1000-50540/
(4) mysql黑魔法
select{x username}from {x11 test.admin};
2、SQL Server技巧
(1)用来注释掉注入后查询的其余部分
/* c语言风格注释
– SQL注释
;00% 空字节
(2)空白符:[0x01-0x20]
(3)特殊符号:%3a 冒号
id=1 union:select 1,2 from:admin
(4)函数变形:如db_name空白字符

垃圾数据溢出

HTTP参数污染

在这里插入图片描述
多个一样参数的时候,它以那个参数为准,不同的服务端,它的处理方式是不一样的

WAF绕过后面还会有文件上传绕过
我们在实际测试过后,我们这个思路会有点险隘,这个时候,我们就把可能性写到脚本里面,让脚本去帮我们跑,跑出来之后,分析为什么能绕过就完事了,上面那些绕过语句,全都是用fuzz跑出来的
我们只要掌握常见技巧,放到脚本里面跑就完事了,几分钟就能跑出我们的答案来,非常快
我们一个个写一个个猜,是很费时间的
fuzz要看具体情况,有些是用不了的

实测简易CMS头部注入漏洞Bypass原理分析

X-Forwarded-For: 8.8.8.8’ union select 1,2,3,database(),5#,可以直接注入因为安全狗规则里面没有检测头部注入,安全狗是检测URL的

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

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

相关文章

吃透MySQL面试八股文

内容摘自我的学习网站:topjavaer.cn 什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据。你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据&#xff0…

MySQL刷题遇到的盲点(五)窗口函数

窗口函数 语法&#xff1a; <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>) partition by&#xff1a;用来对表分组&#xff08; partition 子句可以省略&#xff0c;省略就是不指定分组&#xff09; order by&#xff1a;是…

Python爬虫异常处理心得:应对网络故障和资源消耗

作为一名专业的爬虫代理&#xff0c;我知道在爬取数据的过程中&#xff0c;遇到网络故障和资源消耗问题是再正常不过了。今天&#xff0c;我将与大家分享一些关于如何处理这些异常情况的心得和技巧。不论你是在处理网络不稳定还是资源消耗过大的问题&#xff0c;这些技巧能够帮…

每日一学—浅谈什么是互联网广告系统(文末送书福利2.0)

文章目录 &#x1f4cb;前言&#x1f3af;组成部分&#x1f3af;互联网广告系统案例&#x1f4dd;最后&#x1f3af;文末送书&#x1f4da;作者介绍&#x1f4da;内容简介 &#x1f525;参与方式 &#x1f4cb;前言 互联网广告系统是指在互联网上进行广告投放和管理的系统。它…

哈希桶

哈希桶 概念 开散列法又叫链地址法(开链法)&#xff0c;首先对关键码集合用散列函数计算散列地址&#xff08;index x % array.length()-1&#xff09;&#xff0c;具有相同地址的关键码归于同一子集合&#xff0c;每一个子集合称为一个哈希桶&#xff0c;各个桶中的元素通过…

【JS基础】位运算符

JS 位运算符 1.简介 位运算是低级的运算操作&#xff0c;所以其速度往往也是相对较快的。同时&#xff0c;借助位运算的特性还可以实现一些算法&#xff0c;恰当地使用位运算有很多好处。 注意&#xff1a;所有的位运算都是在二进制下进行运算的&#xff01; 2.位运算符 位…

SNP案例:借助TDO工具大型医院的多客户端系统实现高效刷新

“SNP测试数据管理器使得在多客户端系统中执行测试数据刷新变得很容易。这免去了KSSG IT部门耗时的预处理和后处理工作&#xff0c;为我们节省了宝贵的时间和成本。” Paulo Teber, SAP Basis 管理, KSSG 关于KSSG KSSG公司是瑞士较大的医院之一&#xff0c;也是瑞士东部主要的…

【Linux操作系统】GCC编译与静态库、动态库制作详解

GCC是一款广泛使用的开源编译器&#xff0c;它支持多种编程语言&#xff0c;并且具有强大的编译能力。在软件开发中&#xff0c;我们经常需要将代码编译成可执行文件或者库文件。本文将详细介绍GCC编译过程以及如何制作静态库和动态库。 文章目录 一、GCC编译过程1. 预处理阶段…

【MySQL】sql字段约束

在MySQL中&#xff0c;我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段&#xff0c;MySQL会直接禁止插入。 数据类型也是一种约束&#xff0c;但数据类型这个约束太过单一&#xff1b;比如我需要存储的是一个序号&#xff0c;那就不可…

SpringBoot第33讲:SpringBoot集成ShardingJDBC - 基于JPA的读写分离

SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基于JPA的读写分离 本文是SpringBoot第33讲&#xff0c;主要介绍分表分库&#xff0c;以及SpringBoot集成基于 ShardingJDBC 的读写分离实践 文章目录 SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基…

开能转债,大叶转债上市价格预测

开能转债 基本信息 转债名称&#xff1a;开能转债&#xff0c;评级&#xff1a;A&#xff0c;发行规模&#xff1a;2.5亿元。 正股名称&#xff1a;开能健康&#xff0c;今日收盘价&#xff1a;5.6元&#xff0c;转股价格&#xff1a;5.67元。 当前转股价值 转债面值 / 转股价…

第八次作业

1、什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 数据认证的官方回答&#xff1a;数字认证证书它是以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证&#xff0c;确保网上传递信息的安全性、完整性…

Spring Boot2.xx开启监控 Actuator

spring boot actuator介绍 Spring Boot包含许多其他功能&#xff0c;可帮助您在将应用程序推送到生产环境时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监视应用程序。 审核&#xff0c;运行状况和指标收集也可以自动应用于您的应用程序。 总之Spring Boot Ac…

设计模式——六大设计原则详解

什么是设计模式 随着编程的发展&#xff0c;程序员们发现再解决一些普遍的问题的时候&#xff0c;所使用的解决方案是大体相同的。这些解决方法是众多程序员经过长时间的实践和试错最终总结出来了。所有就有人将它们总结起来形成了设计模式。设计模式出现的意义是为了重用代码&…

玩转Pandas_TA:一站式掌握技术分析指标

01 引言 Pandas_TA —— 一个结合了pandas的强大数据处理能力与技术分析的库&#xff0c;旨在为金融市场分析师和交易者提供一个简单、高效的工具集&#xff0c;从而帮助他们更容易地在数据集上应用各种技术分析指标。pandas_ta为用户提供了直接在DataFrame上运行技术指标计算的…

gitlab 503 错误的解决方案

首先使用 sudo gitlab-ctl status 命令查看哪些服务没用启动 sudo gitlab-ctl status 再用 gitlab-rake gitlab:check 命令检查 gitlab。根据发生的错误一步一步纠正。 gitlab-rake gitlab:check 查看日志 tail /var/log/gitlab/gitaly/current删除gitaly.pid rm /var/opt…

Go的任务调度单元与并发编程

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文主要介绍Go语言、进程、线程、协程的出现背景原因以及Go 语言如何解决协程的…

Idea添加mybatis的mapper文件模版

针对Java开发人员&#xff0c;各种框架的配置模版的确是需要随时保留一份&#xff0c;在使用的时候&#xff0c;方便复制粘贴&#xff0c;但是也依然不方便&#xff0c;我们可以给开发工具&#xff08;IDE&#xff09;中添加配置模版&#xff0c;这里我介绍下使用idea开发工具&…

安达发|APS排程软件与某一知名APS软件整体对比

APS排程软件作为高级计划与排程系统。主要是解决小批量、多品种的复杂生产要求。客户的要求交期越来越准。由于成本不断攀升&#xff0c;所以高产出和低成本也是重要的考量因素。 下面我们就安达发APS软件与某一知名APS做一下整体对比&#xff1a; 1.功能实用性 安达发APS排…

记录--前端重新部署如何通知用户

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1. 场景 前端构建完上线&#xff0c;用户还停留还在老页面&#xff0c;用户不知道网页重新部署了&#xff0c;跳转页面的时候有时候js连接hash变了导致报错跳不过去&#xff0c;并且用户体验不到新功能…