020-用SVG来找点乐子

# 用SVG来找点乐子

英文原文链接:[http://insert-script.blogspot.co.at/2014/02/svg-fun-time-firefox-svg-vector.html](http://insert-script.blogspot.co.at/2014/02/svg-fun-time-firefox-svg-vector.html)

0x00 一个新的FF SVG Vector
———————-

* * *

如果你对SVG没有任何的概念,可能阅读起来会比较吃力。如果你觉得看不懂可以先百度一下SVG是什么,我们都用它在干一些什么。 首先介绍一下SVG里的``元素:

使用``结合#来可以引用外部SVG文件中的元素。举个例子来说就是这样:

test.html:

“`

“`

external.svg:

“`

“`

这里需要注意的是这个外部的svg文件需要和引用这个文件的网站同源。这意味着这种方法在XSS的利用上会十分的鸡肋,或者说没有存在的意义。但 是有什么方法可以让它变成一个有用的XSS向量呢?Firefox在这里就可以帮上忙。因为我们都知道我们可以使用data URI的方式在内部创建一个svg文件来调用它。利用代码会像这样

“`

“`

我们再进一步看一下这个svg文件base64解码后的样子:

“`

“`

我们之前也强调过,我们需要做一个有意义的攻击向量。但是这个方法存在一个缺陷,就是需要用户点击我们的rect才会触发。但是很少会有用户去点 击一些莫名其妙的东西。所以我们需要做一个自动触发的vector.但是有一个问题,就是script标签出现在一个外部的svg当中时,并不会被解析。 为了证明这一事实,我会在接下来的POC当中插入一段script。但是值得庆幸的是,svg还支持``元素。通 过指定该对象所需的扩展属性,就可以实现对非SVG元素的载入了。这意味着我们现在可以使用iframe embed或一些其它的HTML元素。在这里我选择了embed+javascript URL scheme

现在我们会在内部创建的svg文件看起来会像是这样:

“`

“`

让我们再用use元素+data URI来在内部创建这个svg文件:

“`

“`

一个新的FF SVG Vector就这样诞生了。(我用这个方法绕过了某邮箱禁止执行js的限制) **

0x01 绕过chrome XSS Auditor
————————-

* * *

我们还是想和前面一样来引入一个外部的SVG文件。但是我们需要一个同源的SVG文件。这意味着data URI在这里是不可行的(chrome下 data URL都是在独立域执行的,SO..)。但是这也难不倒我们,因为我们可以把一个XSS漏洞用两遍来解决这个问题。

测试页面chrome.php

“`
“;
echo $_GET[‘x’];
echo ““;
?>

“`

POC:

“`
http://133.52.240.75/chrome.php?
x=加载更多', ajax_nomore: '没有更多内容了', qj_loading: '1', highlight_kg: '1', highlight_hh: '1', highlight_btn: '1', highlight_zt: 'dracula', highlight_white_zt: 'enlighter', highlight_dark_zt: 'dracula', upload_img_size: '3', img_upload_multiple: '20', upload_video_size: '30', upload_file_size: '30', upload_ext: 'jpg|jpeg|jpe|gif|png|bmp|tiff|tif|webp|avif|ico|heic|heif|heics|heifs|asf|asx|wmv|wmx|wm|avi|divx|flv|mov|qt|mpeg|mpg|mpe|mp4|m4v|ogv|webm|mkv|3gp|3gpp|3g2|3gp2|txt|asc|c|cc|h|srt|csv|tsv|ics|rtx|css|vtt|dfxp|mp3|m4a|m4b|aac|ra|ram|wav|x-wav|ogg|oga|flac|mid|midi|wma|wax|mka|rtf|pdf|class|tar|zip|gz|gzip|rar|7z|psd|xcf|doc|pot|pps|ppt|wri|xla|xls|xlt|xlw|mdb|mpp|docx|docm|dotx|dotm|xlsx|xlsm|xlsb|xltx|xltm|xlam|pptx|pptm|ppsx|ppsm|potx|potm|ppam|sldx|sldm|onetoc|onetoc2|onetmp|onepkg|oxps|xps|odt|odp|ods|odg|odc|odb|odf|wp|wpd|key|numbers|pages', user_upload_nonce: '30d0e8903a', is_split_upload: '1', split_minimum_size: '20', comment_upload_img: '1' }