经过HTTP参数污染绕过WAF拦截 (转)

上个星期笔者被约请组成代表队去参预贰个由CSAW组织的CTF夺旗比赛.因为内人孩子的缘故,笔者只能挑1个与Web漏洞使用相关的题目,名字称为”HorceForce”.那道题价值300点。那道题大致的背景是,你拥有3个低权限的帐号并索要找到办法来收获管理员权限。

自然,有很多样方法来介绍怎么样通过那关,但本人想分享下自家的合格经验。

当把一些单引号作为参数值发送之后重回了MySQL的第一名报错消息“MySQL
SQL Error Message”,由此得以4意发现此处存在贰个SQL注入漏洞。

然后,正如您领会的,大家平常会开始展览如下尝试:

http://128.238.66.217/horse.php?id=7 or 1 IN (select current_user)

然后本人收获了贰个错误消息,类似“请结束攻击该网址“那样的剧情。

在自个儿尝试了诸多绕过SQLi filter的不二等秘书诀之后,小编发觉到在网址背后配置了八个WAF来阻止任意包罗“select”或“union”等在行使SQL注入时常用的SQL查询关键字。通过那样的黑盒测试能够推断出WAF使用了近乎上边那样的正则:

/^.*select.*$/ or /^.*union.*$/ 

那代表,提交任意带有SQL注入企图的字符串,如blablaSELECTblabla或像/*!union*/那样的绕过情势都会触发WAF拦截的错误消息。

在拓展了1些研商现在,笔者发觉经过HTTP参数污染的办法能够使攻击者绕过WAF的遏止。

那正是说,究竟要怎么样促成呢?

大家固然有1个经过GET情势交给的参数“id”,你能够重复构造这么些参数并以上面的款型发送出去:

?id=value1&id=value2

然后,依你使用的框架区别(PHP,Java,ASP.NET,etc),参数字符串会以分裂的措施开始展览解析,在大家尝试的气象下Apache/PHP,若是你能够屡屡流入同三个参数值,唯有最后四个参数值会被框架解析,不过你猜怎么样?唯有首先个参数会因而WAF的解析和过滤!

那意味,通过注入:
id=7&id=[SQLi]
WAF的网络层会解析 id=7<-合法
PHP应用层会解析
id=[SQLi] <-注入语句成功实施

从而,那是二个一流的例子,你注入的东西在网络层和应用层被区分对待了。

下边是一张表格,列举了不相同的框架当多次承受同一个参数时的差异表现。像ASP.NET,若是它接受到多少个参数值,它会拼接多少个一律参数的值,由此你能够将被过滤的根本词拆分到五个参数中开展抨击从而绕过WAF,当然这些核心已经超(Jing Chao)越那篇文章斟酌的限制了。

Java 1
接下去,大家品尝注入1些SQL语句:

128.238.66.217/horse.php?id=0&id=7%20union%20select%201,2,3,current_user

您能只顾到,全部的流入利用言语都写到了第三个参数值的地点,那将不会被WAF解析。

Java,自个儿赢得了第三遍正确的回到结果:

csaw_chal1@localhost 

接下去正是正常的MySQL注入进度,那里不再赘述,那篇文章主要在于讲解壹种新的绕过WAF的主意,Thx
for reading!

 

转:
http://www.freebuf.com/articles/web/5908.html
谢!

相关文章