iis对宽字符集的cookie不支持,造成的server Bad Request ddos

date 2009年11月03日 | category 学习笔记| 坏人咖啡

作者:woyigui
一、前言

 前一段墨西哥同学发现了一个关于http request header过长造成的一个server limit dos,
他那个是对cookie 写入一个超长的数据造成的。那么,我们可以继续对cookie 进行入手,对其写入
一些中文的数据,同样会造成些类攻击。

二、漏洞形成

 我们先建立一个PHP 页面,如下:

 cookie.php

 这里,我们只写了一个函数,用于输入PHP环境信息。接着,我们利用下面的javascript脚本,
动态写入cookie:

 写入一个中文cookie 的名称,一个中文的cookie值,这时候刷新页面,看看,页面会出现如
下信息:

 Bad Request

 该信息是一个 400 错误信息,在 rfc2616 协议中描述为:

 The request could not be understood by the server due to malformed syntax. The
client SHOULD NOT repeat the request without modifications.
 接着,我们在该域的其他页面访问,同样是 Bad Request 错误,除非我们除空 cookie 才可
正常访问,这说明我们已经成功的对客户端实施了一次 ddos 攻击!
 我们可以用javascript查看一下,我们写入的中文cookie,Firefox 下已经变成什么样子了 :^)

 

 

三:漏洞利用

 1、如您所想,我们可以和结合XSS的漏洞,对其进行攻击,比如,我们做如下有漏洞的页面:

 XSS.php

 我们就可以这样的去写构造:

 如果 magic_quotes_gpc = On 开启的,就要如下转义一下:

本利用方法完全可以绕过墨西哥同学的长度限制,只向cookie写入一个有效的中文字符即可达到同样的效果!
四、与环境的关系

 成功利用我是在 iis 下面成功的,那么,我们就以phpinfo 为测试对象,换到其他服务器上试一下:

 1、windows 2003 server+ iis : YES
 2、FreeBSD + apache2 :NO
 3、Linux + Apache :NO
 4、Linux + nginx
 ….

五、漏洞原因

 现在已经很清楚了,该漏洞只存在于 iis 的服务器下面。也就是说,和操作系统没有关系,其实是
Firefox 对cookie 没有处理好,然后将 恶意的 cookie 发送到了服务器端,如果服务器正好是 iis ,如果
IIS发现浏览器发送过来的http header存在恶意的cookie就会返回40x 错误,引发漏洞。

六、需要注意的问题

1、必须是 iis 服务器: 
 只有iis 服务器接收到浏览器发送的恶意http header 才会引起。

2、并不是所有的汉字都可以利用: 
 这跟字符集有关系,可以参考80sec 的关于宽字符的文章

3、只有 javascript 语言可以设置恶意的cookie
 因为 javascript 设置cookie 的时候并没有进行转换,直接转给了浏览器
六、后记
 
 在很多英文软件中,在开发阶段并没有考虑到语言环境,以至于等到未来有需求了,才对其汉化或者
韩化等,在汉化的过程中只对外层显示部分进行的处理,却未对函数内部处理进行汉化,这将造成很大的问题,
比如此文所说。当然了还有其他的一些由字符集造成的漏洞,大家可以继续挖掘!
 

参考:

1、http://sites.google.com/a/80sec.com/80sec/charset-xss-in-web-application
2、http://hi.baidu.com/aullik5/blog/item/6947261e7eaeaac0a7866913.html
3、http://www.ietf.org/rfc/rfc2616.txt

所属分类: 学习笔记
Tags: , ,


没有评论

暂无评论

RSS feed for comments on this post.

对不起,该文章的评论被关闭了!