长沙行业网站建设费用标准,网站定制化价格,推广计划,王也图片目录 堆叠查询注入WAF绕过-SQL注入简要讲解安全狗、宝塔等防护waf策略规则大小写和关键字替换加密解密编码解码等价函数特殊符号反序列化注释符混用更改提交方式Fuzz大法数据库特性垃圾数据溢出HTTP参数污染 实测简易CMS头部注入漏洞Bypass原理分析 堆叠查询注入
stacked inje… 目录 堆叠查询注入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绕过的时候它的规则其实是多方面的不仅是一方面
数据网站参数的数据大部分过滤是根据你提交的数据有一个检测所以我们在数据上会有一个变异来进行绕过
大小写和关键字替换
id1 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/**/selectun/**/ion/**/select执行不了因为关键字被拆分掉了数据库识别不了%0a是换行符%23是注释符
-1/*%Oa*/union/*%Oa*/select/*%0a*/1,2,3如果还是拦截那就再加一下干扰字节例如X、a#部分bypass sqlinject payload
id1 union/*%00*/%23a%0A/*!/*!select 1,2,3*/;%23
id-1 union/*%00*/%23a%0A/*!/*!select%201,database%23x%0A(),3*/;%23id-1%20union%20/*!44509select*/%201,2,3%23
id-1%20union%20/*!44509select*/%201,%23x%0A/*!database*/(),3%23id1/**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#*/能正常执行sqlid-1 %20union%20all%23%0a%20select%201,2,3%23
-1 %20union%20all%23%0a%20select%201,%230%0Adatabase/**/(),3%23union 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、Mysql技巧 (1) mysql注释符有三种#、/*...*/、-- (注意–后面有一个空格) (2) 空格符:[0x090x0a-0x0d0x200xa0] (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 冒号 id1 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的