MySQL由此HTTP参数污染绕过WAF拦截 (转)

上个星期我被邀请组队去出席一个由CSAW协会的CTF夺旗竞技.因为爱人孩子的原由,我不得不挑一个与Web漏洞使用相关的问题,名字称为”HorceForce”.那道题价值300点。那道题大致的背景是,你抱有一个低权限的帐号并索要找到方法来博取管理员权限。

理所当然,有很多种艺术来介绍怎样通过那关,但自我想分享下我的合格经验。

当把有些单引号作为参数值发送之后再次来到了MySQL的卓尔不群报错音讯“MySQL
SQL Error Message”,因而得以无限制发现此处存在一个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拦截的错误新闻。

在开展了有的商讨未来,我发现经过HTTP参数污染的章程可以使攻击者绕过WAF的掣肘。

那就是说,究竟要如何贯彻啊?

俺们如若有一个由此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,当然那一个大旨已经超(英文名:)越这篇小说琢磨的限定了。

MySQL 1
接下去,我们品尝注入一些SQL语句:

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

您能只顾到,所有的注入利用言语都写到了第三个参数值的职位,那将不会被WAF解析。

自家获取了第四次正确的回到结果:

csaw_chal1@localhost 

接下去就是常规的MySQL注入进度,那里不再赘述,那篇小说主要在于讲解一种新的绕过WAF的方法,Thx
for reading!

 

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

网站地图xml地图