TSRC挑战赛:WAF之SQL注入绕过挑战实录

转自腾讯

博文作者:TSRC白帽子

发布日期:2014-09-03

阅读次数:1338

博文内容:

博文作者:lol [TSRC 白帽子]

第二作者:Conqu3r、花开若相惜

来自团队:[Pax.Mac Team]

应邀参加TSRC WAF防御绕过挑战赛,由于之前曾经和Team小伙伴一起参加过安全宝WAF挑战,而且自己平时接触WAF的机会也比较多,对于WAF绕过的方法还是有一定积累的。

比赛规则就是绕过四台被tencent WAF保护的测试服务器(分别为:apache GET、apache POST、nginx GET、nginx POST)。用一种方法绕过其中一台即可,如果可以执行任意SQL语句即为通用绕过,视为高危,若有其他利用条件限制则视为中低危。

比赛之前,首先要熟悉tencent WAF的部署环境,是在网络层,还是在应用层,如果在应用层是在到达apache(或nginx)之前还是之后。不同的部署环境决定了不同的绕过方法。通过在TSRC上查看《主流WAF架构分析与探索》一文了解了tencent WAF 实现于服务器的安全模块内,这样的话,类似于十进制ip地址绕过网络层WAF防护、gzip等一系列编码绕过也就无从谈起。

首先想到通过畸形http包来绕过,尝试LOL /sql.php?id=1 and 1=1HTTP/1.1等,发现基本都被服务器过滤了,说明tencent WAF 在开发时还是吸取了不少经验的。经过不断尝试发现畸形数据包,参数污染等方法均告失败。只能把主要精力放在mysql一些语法特性上了,下面的几种思路基本都是利用了mysql 自身语法特性来实现的。

首先介绍一下Pax.Mac Team猥琐牛花开、若相惜的一种绕过思路——采用%a0绕过。id=-1 union%a0select 1,2。服务器检测了union和select之间是否含有空格,如果union select同时存在且还有空格则视为一次sql注入攻击行为。但是有许多方法可以进行绕过例如union/**/select、union%0dselect等,这里基本上都被过滤了,但是不知道是开发人员粗心还是故意放水,唯独留下了union%a0select 这个没有过滤。

除了union%a0select似乎已经没有其他可以绕过检测的了,fuzz了一遍这次应该是真的了,但是功夫不负有心人,一种神奇的方法出现了——union/*%aa*/select。咦?这个不是属于/*xxx*/应该是被防护了的怎么还可以呢?这是中文字符的特性利用,中文字符配合注释符bypass 所有规则。利用%e4等只要是中文字符开头的,就可以完成绕过检测!%a0之类的,已经补了。测试发现。union select可以共存,只要让检测不要认识是union 空格select就行。所以这里这样构造出一个特别的字符串。我们通过union+“特殊字符”+select拼出一个新字符串,让正则认为这是个类似unionxxooselect这种,而不是union select 。 这样就能bypass检测。但是,要让数据库识别这个,就要想办法干掉这个多余的字符。服务在检测的时候,并不把/**/作为攻击特征,当然,这本身也不是特征,但是如果我们利用这个符号把这个多余的字符干掉,就可以让语句正常执行了。因为,这里就是利用union/*中文字符*/select,完全bypass。当然,还要保证这种中文字符不能构造一个汉字。这种方法来自于Pax.MacTeam团队的Conqu3r。

以上两种方法均可以绕过union select,以及select from进行随心所欲的注入,后面介绍的这几种就比较鸡肋了,仅仅能绕过mysql函数限制进行loadfile,或者获取一些环境信息。

由于WAF对敏感函数进行了检测,导致我们的version(),load_file()等函数无法使用,但是由于是正则匹配,我们可以使用% 0b进行轻松绕过。例如:version()% 0b(%和0b之间的空格是编辑显示需要,实际并不存在),其他的特殊字符均被过滤了,% 0b在这里成为了漏网之鱼。

同样的绕过函数的思路,我们可以使用`version`()的方法再次避免WAF的正则匹配,由于mysql 语法特性`函数名`()等价于函数名()再一次完美bypass。绕过了函数名我们如何select呢?这里我们需要用到十六进制盲注:

id=1 and(select `load_file`(0x2f6574632f706173737764) is not null)

首先判断服务器某文件是否存在,例如这里我们用/etc/passwd文件。0x2f6574632f706173737764是/etc/passwd的十六进制格式。在判断确实存在该文件之后,我们可以通过:

id=1 and(select `load_file`(0x2f6574632f706173737764)>0x726f66)

根据页面返回修改大于号之后的十六进制值,从而获取到该文件的十六进制内容。

最后一种思路是获取服务器的配置信息,通过id=instr(@@global.version,1)来获取global变量。@@global包含很多敏感信息,过滤了ascii,substr函数,仍可用instr来盲注。

以上就是笔者对于本次tencent WAF 绕过挑战赛的一些总结和思考,不足之处还望大家积极指出,如果有其他绕过WAF的“奇技淫巧”也欢迎与我切磋交流。

时间: 2024-10-02 03:51:45

TSRC挑战赛:WAF之SQL注入绕过挑战实录的相关文章

WAF的SQL注入绕过手段和防御技术

一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数据,这些输入中的一部分被解释成SQL指令,改变了原来的正常SQL执行逻辑,执行了攻击者发出的SQL命令,最终使攻击者获取Web应用的管理员权限或者下载了Web应用存到数据库中的敏感信息. 二.SQL注入如何实现 为了对本文进行更好的讲解,下面简单地对SQL注入的原理进行示例性说明. 如下图是某网站的

深入了解SQL注入绕过waf和过滤机制

知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 0x05 本文小结 0x06 参考资料 0x00 前言 笔者前几天在做测试时输入攻击向量后页面发生了重定向甚至异常输入也是重定向怀疑其中有WAF在作怪.之前对WAF接触比较少纯粹是新手趁此科普了一下并查阅了一些绕过WAF的方法.所找到的资料中主要分为两类SQL注入和XSS绕过笔者SQL注入同样是新手

深入了解SQL注入绕过waf和过滤机制(转)

知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 0x05 本文小结 0x06 参考资料 0x00 前言 笔者前几天在做测试时输入攻击向量后页面发生了重定向甚至异常输入也是重定向怀疑其中有WAF在作怪.之前对WAF接触比较少纯粹是新手趁此科普了一下并查阅了一些绕过WAF的方法.所找到的资料中主要分为两类SQL注入和XSS绕过笔者SQL注入同样是新手

通过sqli-labs学习sql注入——进阶挑战之less23-28a

本文链接:http://blog.csdn.net/u012763794/article/details/51457142 这次我又来了,Advanced Injections(进阶挑战),就是一些过滤绕过的东西了,基础挑战看这个两篇 最近搞逆向破解去了,http://www.giantbranch.cn/myblog/?p=27,所以这个拖得太久了,今天完工 通过sqli-labs学习sql注入--基础挑战之less1-10 http://blog.csdn.net/u012763794/ar

见招拆招:绕过WAF继续SQL注入常用方法

Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过.WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招.那今天我在这里做个小小的扫盲吧.先来说说WAF bypass是啥. WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字.WAF仅仅是一个工具,帮助你防护网站来的.但是如果你代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你-所以不能天真的以为用上WAF你的网站就百毒不侵了.开始正题--

【转】深入理解SQL注入绕过WAF和过滤机制

原文 http://www.cnblogs.com/r00tgrok/p/SQL_Injection_Bypassing_WAF_And_Evasion_Of_Filter.html [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 本文小结 0x6 参考资料 0x0 前言 促使本文产生最初的动机是前些天在做测试时一些攻击向量被WAF挡掉了,而且遇到异常输入直接发生重定向.之前对W

深入理解SQL注入绕过WAF与过滤机制

知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 本文小结 0x6 参考资料 0x0 前言 促使本文产生最初的动机是前些天在做测试时一些攻击向量被WAF挡掉了,而且遇到异常输入直接发生重定向.之前对WAF并不太了解,因此趁此机会科普一下并查阅了一些绕过WAF的方法.网上关于绕过WAF有诸多文章,但是观察之后会发现大体上绕过WAF的方法就那八.九种,

绕过WAF继续SQL注入

Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过.WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招.那今天我在这里做个小小的扫盲吧.先来说说WAF bypass是啥. WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字.WAF仅仅是一个工具,帮助你防护网站来的.但是如果你 代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你…所以不能天真的以为用上WAF你的网站就百毒不侵了.开始正题—

SQL注入绕过方式收集

一.%00截断 %00截断是上传漏洞中常用的一个非常经典的姿势,在SQL注入中,也可以用来绕过.在WAF层,接收参数id后,遇到%00截断,只获取到 id=1,无法获取到后面的有害参数输入: http://Host/sql.aspx?id=1%00and 1=2 union select 1,2,column_name from information_schema.columns 二.GET+POST 当同时提交GET.POST请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可轻易