|
我在[QQmail Multiple Xss Vulnerabilities]的公告里指出了qqmail在设计上的多个缺陷导致的xss漏洞.qq的安全部门也比较重视这些漏洞都做出了对应的'修补',比如那个filter开关[filterflag=true]的问题.但是对于另外的设计缺陷的修补不是很完美:
---------------------------引---用------------------------------------------------------
在qqmail的附件和图片上传功能上存在着设计缺陷:
* 上传文件存放域和qqmail是同一个域
* 上传的文件后缀及内容根本没有做安全限制,直接导致上传一些恶意文件导致xss[如swf文件] ----------------------------------------------------------------------------------------
qq的修补并没有把附件和上传文件的域与mail的域分开[至于qq为什么这样做文章后面我们可以大体的分析下 :)].他们修补是分步进行的.
Step.1 只是简单的限制上传文件后缀
最开始在我那个公告发布后的fix只是简单的限制了上传文件的后缀,对文件的格式都没有限制[只让上传那几个常见的图片文件的后缀],于是当哥有一天告诉我可以直接利用图片里插入html/js来跨[只对ie6/7].这个当然是可以的.但是需要人家去另外访问你的图片.在[QQmail Multiple Xss Vulnerabilities]一文里已经映射了这个问题:
---------------------------引---用------------------------------------------------------
B.qqmail的Filter系统是不允许引用外部文件的[src=],但是它允许本地相对路径的文件引用
................ 同样的比如上面1里提到的,也可以通过这个实现对firefox3的利用.[另外flash xml等文件的调用是可以修改后缀的] ---------------------------------------------------------------------------------------- 我们可以修改为jpg后缀上传后,利用相对路径这个设计缺陷来调用.
而且他们还忘记了一个重要的问题,那就是本文标题里提到的'后门'----我写以前测试时候上传的文件依然存在.那么我们直接通过这些文件来进行xss攻击.
Step.2 隐藏绝对文件名,并使用sid的来做身份验证
对于一个使用广泛的在线产品,修补是一个漫长的过程,又过了n天.我继续测试.发现qq处理了所有的上传文件调用的方式:使用了服务段脚本文件去打开调用附件[类似于dz的处理方式],这样可以隐藏绝对的文件名,而且他们还通过sid的判断来做身份验证.如下方式:
"/cgi-bin/viewfile?f=11F636251C5ADFF31E0F25020FE92FB9CC5B57FBBE448B2263D4B6048CB1BA5F672851ADB2E92DB77F9ECD4165410EF1C6E9007C589D4E522EA5B7681D222548C8704E0C86D04372649CBC74504F70CC9BB81761&sid=1ZTUmMC2WgJvdXI4"
这个sid随你每次登陆而随机改变的,所以我们不知道对方的sid而不可以调用这个上传的文件.很完美!!! 看到这里你可能认为又是通过我在Step.1里提到的'后门'... 是的!! 我开始也是这样想的,但是实际测试当中.我直接访问一个以前上传文件的url[这里我暂时用http://m337.mail.qq.com/data/AAA.bbb表示]时,返回的却是404,看来真的是很完美了!!!. 难道他们删除了我的文件?当时我很愤怒,杂可以直接删除客户的数据呢!
[后来我发现我错怪qq了]
在我当时上传[http://m337.mail.qq.com/data/AAA.bbb]时,我同时我用了对应的tag调用了.当我访问这个tag调用的mail时,发现可以访问.于是我重新直接访问url:http://m337.mail.qq.com/data/AAA.bbb 它又出现了,而且任何人都可以访问..... 但是过了n个小时后,我又去访问上面的那个url, 靠 杂又是404啊~~~.很奇怪,也不知道qq是杂个搞的.于是我和偶像luo哥哥,讨论了一下,他给了一个'假说'可以解释这个奇怪的现象:
"可能是临时文件?"
换句话说也就是qq把上穿文件放到数据库里,或者是其他访问不到的地方,然后用viewfile去导出或者copy这个到原来的url.
不管上面的推断是不是真实的,重要的是我的'后门'还在,我还可以控制'后门'存在的时间,哈哈 很cool 很happy!
思考:
QQ如果把附件/上传文件的域分开呢![当然只是简单的分开域对于tag调用的方式是没有办法的],当然如果一开始就使用"隐藏绝对文件名,并使用sid的来做身份验证"这样的设计,我们的后门也不可能存在的!!,这个让我想起了刺在pstzine0x03里的文章:http://www.ph4nt0m.org-a.googlepages.com/PSTZine_0x03_0x07.html
----------引---用------------- * 信任关系的划分是安全设计的基础 * 访问控制系统是安全设计的核心 * 代码与数据分离是安全设计的重要原则 * 最佳实践一:Secure By Default * 最佳实践二:合理利用不可预测性 ------------------------------
尤其是"代码与数据分离是安全设计的重要原则"和"Secure By Default",对于上面的例子,如果我们把上传的文件看为是用户的数据你就好理解了.另外一个就是"Secure By Default"这个告诉我们如果筐架最开始的设计是非常重要的,如果在后面出现了问题去才缝缝补补,那是不太好补的,而且代价也是很大!!
|
|
|