核心提示:在这篇文章的名字:SQL注入#理论绕过WAF,我于6月17日FreeBuf。链接:点击这里继续写博客,尤其是网络黑客…

在这篇文章的名字:SQL注入#理论绕过WAF,我于6月17日FreeBuf。链接:点击这里继续写博客,特别是在这里。

网络黑客一直生存在对WAF进行斗争,厂商也在不断的过滤,和Hacker不断地bypassing.waf旁路是一个永恒的话题,很多同性恋的朋友,也总结了很多聪明的战术。所以我今天在这里做一点素养。首先,告诉我你的WAF旁路。

WAF,总之,是一个Web应用防火墙的功能是过滤一些恶意请求和一些keywords.waf只是帮助你保护你的网站的工具,但如果你的代码写得特别渣,WAF本身并不能帮助你,甚至wefd不能帮助你hellip;不那么天真的认为WAF网站容易受到攻击。启动问题研究;—

1 >注释

我相信很多朋友都知道SQL的笔记,这是防火墙中应用最为广泛。他们让我们绕过许多Web应用程序防火墙和限制,我们可以一些SQL语句的注释,然后让他们只执行攻击语句实现入侵的目的。

常见的注释:

/ / /,*,#,-,% 00;

2、改变

然而,一些用于审核的开放源码程序在过滤方面不是很严格。其中一些被黑名单过滤了。其中一些只对小写形式进行过滤。但是,当参数传递时,接收到的参数不会转换为小写,在这种情况下,我们可以简单地绕过它。

例如,它的过滤语句是:

unionsselect / / g


然后我们可以构造这个:

id = 1

3内联注释

一些WAF过滤关键词就像 / / unionsselect G,正如上面提到的,很多时候我使用内联注释。更复杂的例子,需要更先进的方法。例如,添加SQL关键字,我们要进一步将两个词绕过过滤器。

id = 1 *!联盟* /选择

代码*!执行SQL语句。内联注释可用于整个SQL语句。所以如果table_name或information_schema过滤,我们可以添加更多的内联注释内容。

例如,过滤器被过滤。

联盟的地方,table_name,table_schema,=,和information_schema


这些都是我们内联注释需要绕过的目标。因此,内联注释通常用于绕过以下方法:

id = 1 *!联盟* / +选择+ 1,2,concat(table_name * / / * + information_schema * / / /。表* *!)!在table_schema * / + +数据库(-)* / / * +!

正常情况下,上面的代码可以绕过过滤器,请注意我们使用的是like而不是=。

当一切似乎都失败时,您可以尝试使用防火墙关闭SQL语句中使用的变量。

ID = 1 +联盟 / * = * / / * = *选择 / 1,2,3,数据库()-

即使公共内联注释本身不起作用,上述代码也应该能够绕过联合选择过滤器。

4 >缓冲区溢出:

意想不到的输入:

我们知道很多的WAFS在C语言中,他们很容易溢出时,负载的一堆数据。下面是一个WAF,当它接收到大量数据的恶意请求和响应。

ID = 1(选择1)=(选择0xaaaaaaaaaaaaaaaaaaaaa 1000多的)+协会+选择+ 1,2,版本(),(),5、数据库版本(),

上面的旁路语句,我在最近的一个网站上使用过。

5 >更换关键词(preg_replace和/或都能达到同样的目的):

有时程序会删除所有关键字。例如,有一个过滤器,它会将联合选择变成空白。

ID = 1 + + + 1,2,3ndash selselectect uniunionon;

这不难理解,对吧联盟和选择成为空白,而双方重新组合成新的查询。

联盟+选择+、-

6字符编码:

在某些情况下,WAF解码应用程序中的输入,但是有些WAF是只过滤和解码一次,所以我们只要双编码的循环语句,我们可以绕过它。(WAF解码一次,过滤器,和随后的SQL语句自动解码并直接执行。)

双编码旁路语句:示例:

ID = 1% 252f % 252a * / % %工会252f 252a /选择252f 252a * / % % % % 252a 1,2,密码252f * / % 252f % 252a * /用户——+


一些双重编码示例是:

单引号:
% u0027
% u02b9
% u02bc
% u02c8
% u2032
% uff07
% 27 %
% A7
% E0 80% A7
Blank:
% u0020
% uff00
% 20 %
%s A0
% E0 80% A0
左括号(:
% u0028
% uff08
% 28 %
% A8
% E0 80% A8
右括号):
% u0029
% uff09
% 29 %
%
% E0 80% A9

7 >合成:

几个简单的WAF后,后来的任务变得越来越容易说绕过你的目标WAF的几种方法。

7a >拆除的SQL语句:

通常的做法是,SQL注入语句需要拆解检查的关键是过滤。例如,如果你输入union+select语句,给你一个403或内部服务器错误,什么工会是非法的,什么是过滤,它也是一种常见的Fuzzing测试。这是使旁路报表的前提。

7b >冗长的错误:

当您的SQL语法输入错误时,当另一方的网站未关闭时,错误将出现。会有很多错误。在PHP中,它就会敏感网站根目录地址。aspx会迸发出整个语法错误详细信息。

例如,您输入的语法是:

ID = 1 +选择+、-


它会给你以下的错误:

误差线1附近+ 1,2,3,


它还说黑名单过滤,也可以绕过以下方式:

SEL % 0bect + 1,2,3

这是唯一的不同需要不同的想法绕过WAF绕过许多方式。

8高级旁路技能:

正如我之前所说的,当你试图绕过几个WAF,你会觉得他是不困难的,它会觉得很有趣,很有挑战性:B,当你发现自己在注射时的WAF,不想放弃,试着挑战它,看看它是过滤,什么语法什么的语言不允许许可。当然,你也可以尝试一些暴力,把它作为充气娃娃,{(){ };:* $ / | <>}括号里的这些特殊字符没有传播家具~可以报告错误很骄傲的少年,你说对吗

但是,如果你尝试一个N语句,TM被过滤了,整个人都要崩溃了,我该怎么办这很简单。打开音乐播放器,放一个小苹果放松。然后WAF过滤所有的东东抄下来,仔细分析!常言道,世界上没有困难。

例如,如果您分析并最终发现所有的*都被空白替换,则意味着您不能使用内联注释。联盟+选择将返回一个403的错误给你。在这种情况下,您应该充分利用*以空白替换。

ID = 1 +大学+质量+ -- + 3 SEL

在这种情况下,*被过滤,但是union+select被保留。这是一个常见的WAF bypass技术,当然不仅仅是union+select,但其他语法过滤。找到替换的关键字,你可以在找到一个方法。

一些常用旁路:

id = 1 +(联合)+(选择)+
id = 1 +(联盟+选择)+
id = 1 +(单)(on)+(SEL)(EcT)
ID = 1 + 'uni好象+ 'sel ''ect<- MySQL只
ID = 1 + 'uni| |开+<- MSSQL唯一选择

注:在MYSQL4.0,单 / * * / + SEL / * * /等不可用。

结论:WAF的位置取决于你的思想的传播,和自我意识可以在WAF旁路过程中找到很多乐趣,不是吗更多的姿势欢迎下午我。

推荐一些关于SQL注入和Web安全的书籍。

SQL注入攻击和防御

黑客攻击和防御-网络真实战

PHP安全性这是适合PHP开发人员阅读的。

Web安全