利用网易博客XSS漏洞编写蠕虫

>>转载请注明来源:飘零的代码 piao2010 ’s blog,谢谢!^_^
>>本文链接地址:利用网易博客XSS漏洞编写蠕虫

注:本文只供研究参考之用,如作其他用途,概与本人无关。
飘零的代码 http://piao2010.com

前阵子(9月份)学习XSS, CSRF, Web Worm时候的一点小收获,我提交漏洞(http://www.wooyun.org/bugs/wooyun-2010-0631)将近两个月了网易还是没有修复。今天抽空理一理,写出来更新一下博客。

漏洞详情已经说得很清楚了,典型的存储型XSS,我不再重复,主要谈一下Web Worm编写思路吧。

既然是Worm就必须实现自我传播功能,因此思路也很明确,让访问被感染页面的用户(已登录且开通了博客功能的访客)在不知情的情况下自动添加一个感染模块,从而实现一传十,十传百,蠕虫才能不断传播开来。

第一步当然是手动添加一个模块,模块的功能就是引入一个远程JS文件(蠕虫),把这个过程抓包分析可以发现主要就是两次POST数据包。

至于POST里每个参数的含义可以通过不断变化提交分析出来,这个过程需要费些时间,我大概用了一周时间才完全弄清各个参数的含义,特别是scriptSessionId(困扰了三天),一开始抓包提交数据总是失败,以为是这个参数作用是类似token功能,后来分析调用的JS文件才发现其实只是一个随机数而已(这里还要感谢琏仓同学的帮助,跟踪分析这个变量还是挺不容易的),至于提交失败原因只是抓到的数据包里饱含了不可见字符(狂汗)。

另外还有涉及到博客页面皮肤和布局的参数,我们要做到感染页面的同时不改变原有的页面布局和皮肤以提高隐蔽性,不然蠕虫很容易会被发现。因此提交POST数据包的时候要计算好感染模块ID存放的位置,这一步也比较费时,需要先分析原先博客的样式和分栏情况,针对每种布局分开处理。

有了大致的思路接下来就是实现,一开始我采用Ajax方式模拟POST请求但是失败了,主要问题是跨域Ajax请求受到限制比较多,查阅了不少资料,一开始无法传递cookie,后来设置了XMLHttpRequest.withCredentials = “true”虽然cookie能传递了,但是http请求头还是Options,始终无法成功,个人认为想用Ajax方式实现跨域请求必须有服务器端相应支持才行,至于网易博客本身也是用dwr框架(我不熟悉)却能实现我还不明白,欢迎大侠指点。

最后我是变通了一下采用PHP程序实现POST数据,JS文件的里只是简单的调用一下PHP脚本并传递cookie。采用这种方式的缺点是调用的时候因为增加了cookie参数的传递显得很长容易暴露,优点是PHP脚本我自己比较熟悉,可以模拟POST请求,另外还记录下被感染博客地址和模块ID从而实现蠕虫的自我清除。

至此为止蠕虫自我传播功能和清除功能都有了,当然还可以在此基础上考虑其它功能,有了cookie毕竟我们能做的还有很多,电子邮件?但我没这么邪恶哈,只完成了自我传染和清除两个功能而已。

实际测试过程中我注册了两个小号,在页面上植入蠕虫模块,接下来就是想办法让别人访问到被感染的页面,这个随意发挥吧。一开始由于感染源少,传播速度很慢,差不多过了一个下午感染数量慢慢增加到100个左右速度就上来了,被感染的博客列表不断增加,尤其是到了晚上PV比较高的时段,我没敢测试太长时间就把感染脚本替换成清除脚本了。

整个分析编写Worm的过程主要是对HTTP数据包的分析和XSS配合CSRF漏洞的利用,由于是第一次编写难免磕磕碰碰,总共用了差不多三周时间才完成,但收获还是比较大的。希望网易能尽快把漏洞修复,大家也千万别搞破坏:)

2010-11-23 更新:今天网易工作人员与我取得联系,确认之前的漏洞已经及时修复,至于为什么我一直以为没修复是因为他们在更新或新增加时才做过滤,之前的会有残留,基于性能等方面的考虑在加载时未做过滤,而我一直是拿残留的做测试,误解了:)

无觅相关文章插件,快速提升流量

  1. YZ 说:

    小灰机求交换链接:xiaoyuzhou.info

    [回复]

    飘(piao2010) 回复:

    O了。

    [回复]

  2. 水若寒 说:

    “学长”,你的固定链接貌似有问题http://www.piao2010.com/2010/09/21/%e6%af%95%e4
    %b8%9a3%e4%b8%aa%e6%9c%88%e4%bb%a5%e6%9d%a5%e7
    %9a%84%e6%9d%82%e4%ba%8b%e6%9d%82%e6%84%9f/ 没翻译好

    [回复]

    飘(piao2010) 回复:

    什么问题?没看明白你的意思。

    [回复]

    水若寒 回复:

    不是应该http://www.piao2010.com/2010/09/21/文章名的英文翻译/ 吗?不然搜索引擎无法通过域名定位你的文章了诶,菜鸟,说错了请见谅

    [回复]

    飘(piao2010) 回复:

    我没用这种URL功能,只是简单的编码一下文件标题而已。

  3. wooyun 说:

    网易的安全人员不给里啊:)

    [回复]

    飘(piao2010) 回复:

    灰常不给力,其实目前的过滤也是很简单的,很容易就突破了。

    [回复]

  1. There are no trackbacks for this post yet.

Leave a Reply