PHP经过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,当然那个主旨已经超(英文名:)过那篇小说商量的界定了。

PHP 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
谢!

相关文章