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的“奇技淫巧”也欢迎与我切磋交流。
TSRC挑战赛:WAF之SQL注入绕过挑战实录的更多相关文章
- 深入了解SQL注入绕过waf和过滤机制
知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 见招拆招:绕过WAF继续SQL注入常用方法
Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过.WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招.那今天我在这里做个小小的扫盲吧.先来说说 ...
- 深入理解SQL注入绕过WAF与过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 绕过WAF继续SQL注入
Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过.WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招.那今天我在这里做个小小的扫盲吧.先来说说 ...
- 绕过阿里云waf进行SQL注入
做个笔记吧,某SQL注入点的绕过,有阿里云waf的. 首先遇到是个搜索框的注入点: 演示下: 针对搜索框,我们的sql语句一般是怎么写的? 本地演示:select * from product whe ...
- [转载]利用分块传输绕过WAF进行SQL注入
原理 客户端给服务器发送数据的时候,如果我们利用协议去制作payload,就可以绕过http协议的waf,实现SQL注入 分块传输编码(Chunked transfer encoding)是HTTP中 ...
- SQL注入绕过waf的一万种姿势
绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...
- [转载]SQL注入绕过WAF的方法总结
基本/简单绕过方法: 1.注释符 http://www.0dayhack.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4-. 2.使用 ...
随机推荐
- linux常用命令(复制)
显示目录和文件的命令 Ls:用于查看所有文件夹的命令. Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 修改目录,文件权限和属主及数组命令 ...
- [HAOI2018][bzoj5306] 染色 [容斥原理+NTT]
题面 传送门 思路 这道题的核心在于"恰好有$k$种颜色占了恰好$s$个格子" 这些"恰好",引导我们去思考,怎么求出总的方案数呢? 分开考虑 考虑把恰好有$s ...
- 现代互联网的TCP拥塞控制(CC)算法评谈
动机 写这篇文章本质上的动机是因为前天发了一个朋友圈,见最后的写在最后,但实际上,我早就想总结总结TCP拥塞控制算法点点滴滴了,上周总结了一张图,这周接着那些,写点文字. 前些天,Linux中国微信公 ...
- POJ3683 Priest John's Busiest Day 【2-sat】
题目 John is the only priest in his town. September 1st is the John's busiest day in a year because th ...
- input type file上传文件之后清空内容。
上次写过如何上传文件,上传成功之后,会出现一些问题. 当我打开上传的文件,但是没有点击上传,然后关闭弹窗,接着继续上传刚才的那个文件.为了满足产品组的要求,我们一般都会把样式进行一定的覆盖. 但这就会 ...
- 美食节(bzoj 2879)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- 【POJ1067】取石子游戏(威佐夫博弈)
题意:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完 ...
- HttpHandler,HttpApplication, HttpModule
选择HttpHandler还是HttpModule? HttpHandler和HttpModule之间有什么差别 之所以有这个疑问,是因为在这二类对象中都可以访问Request, Response对象 ...
- 又看了一次EM 算法,还有高斯混合模型,最大似然估计
先列明材料: 高斯混合模型的推导计算(英文版): http://www.seanborman.com/publications/EM_algorithm.pdf 这位翻译写成中文版: http://w ...
- 关于mysql编码问题
1 查看MySQL编码 SHOW VARIABLES LIKE 'char%';