160 lines
5.2 KiB
JavaScript
160 lines
5.2 KiB
JavaScript
var config_server = "http://127.0.0.1:8000";
|
|
|
|
/**
|
|
* Extract the domain from an URL
|
|
* @param string(url) - url of the target which will be shorten
|
|
*/
|
|
function extract_domain(url){
|
|
var domain;
|
|
if (url.indexOf("://") > -1) {
|
|
domain = url.split('/')[2];
|
|
}
|
|
else {
|
|
domain = url.split('/')[0];
|
|
}
|
|
|
|
//find & remove port number
|
|
return domain.split(':')[0];
|
|
}
|
|
|
|
/**
|
|
* Inspect the source code and send a request to the server for every url
|
|
*
|
|
* @param string(url) - url of the target
|
|
* @param string(deep) - deep of the target, 0 is the actual page
|
|
* @param string(impact) - aggressivity of the scan from 0 to 5
|
|
*
|
|
*/
|
|
function send_target(server, url, deep, impact, cookies, method, data){
|
|
var http = new XMLHttpRequest();
|
|
infos = server + "/?url=" + url + "&deep="+ deep + "&impact=" + impact + "&cookies=" + cookies + "&useragent=" + navigator.userAgent + "&method=" + method + "&data="+ data;
|
|
|
|
// Display the informations sent by the scanner
|
|
http.onreadystatechange = function() {
|
|
if (http.readyState == XMLHttpRequest.DONE) {
|
|
http_data = JSON.parse(http.responseText);
|
|
|
|
// Update vulns count
|
|
chrome.storage.sync.get(['rce','xss','lfi','sql'], function(items) {
|
|
chrome.storage.sync.set({'rce': items['rce']+parseInt(http_data.rce)});
|
|
chrome.storage.sync.set({'xss': items['xss']+parseInt(http_data.xss)});
|
|
chrome.storage.sync.set({'lfi': items['lfi']+parseInt(http_data.lfi)});
|
|
chrome.storage.sync.set({'sql': items['sql']+parseInt(http_data.sql)});
|
|
});
|
|
|
|
// Update vulnerabilities URL list
|
|
chrome.storage.sync.get(['list'], function(items) {
|
|
chrome.storage.sync.set({'list': items['list']+http_data.list})
|
|
});
|
|
|
|
// Notifications
|
|
if (http_data.xss != '0'){
|
|
new Notification('New vulnerability detected !', {
|
|
icon: 'icon.png',
|
|
body: 'XSS on '+extract_domain(unescape(url))
|
|
})();
|
|
}
|
|
|
|
if (http_data.sql != '0'){
|
|
new Notification('New vulnerability detected !', {
|
|
icon: 'icon.png',
|
|
body: 'SQLi on '+extract_domain(unescape(url))
|
|
})();
|
|
}
|
|
|
|
if (http_data.lfi != '0'){
|
|
new Notification('New vulnerability detected !', {
|
|
icon: 'icon.png',
|
|
body: 'LFI on '+extract_domain(unescape(url))
|
|
})();
|
|
}
|
|
|
|
if (http_data.rce != '0'){
|
|
new Notification('New vulnerability detected !', {
|
|
icon: 'icon.png',
|
|
body: 'RCE on '+extract_domain(unescape(url))
|
|
})();
|
|
}
|
|
|
|
}
|
|
}
|
|
http.open("GET", infos, true);
|
|
http.send();
|
|
}
|
|
|
|
// Set a clean local storage
|
|
chrome.storage.sync.set({'rce':0, 'xss': 0, 'sql': 0, 'lfi': 0, 'work': 0, 'list':'' })
|
|
|
|
|
|
// Handle POST scan
|
|
chrome.runtime.onMessage.addListener(
|
|
function(request, sender, sendResponse) {
|
|
if (request.type == "scan_plz" && request.data != ''){
|
|
|
|
chrome.storage.sync.get(['work'], function(items) {
|
|
if(items['work'] == 1){
|
|
|
|
// Start a POST scan with the url and the cookies
|
|
send_target(config_server, escape(request.url), 0, 0, escape(request.cookie), 'POST', escape(request.data));
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
|
|
// Launch a scan when the tab change - Submit a form / Open new URL from bar
|
|
chrome.tabs.onUpdated.addListener(function(tabId,changeInfo, tab) {
|
|
if(changeInfo.status == 'complete'){
|
|
|
|
// Inject this function into the page to catch a submit event for every forms
|
|
function inject_onsubmit(){
|
|
for (var i = 0; i < document.forms.length ; i++) {
|
|
document.forms[i].addEventListener('submit', function(){
|
|
|
|
// Detect value of inputs of the form
|
|
post_data = '';
|
|
for (var j = 0; j < document.forms[i-1].elements.length; j++) {
|
|
post_data += (document.forms[i-1].elements[j].name+":"+document.forms[i-1].elements[j].value+"|");
|
|
console.log(post_data);
|
|
}
|
|
|
|
|
|
// Send data to this plugin (POST Scan) - check the method, GET is already handle with onUpdated
|
|
if(post_data != '' && document.forms[i-1].method.toUpperCase() == 'POST'){
|
|
chrome.runtime.sendMessage({type: "scan_plz", data:post_data, url:document.location.href, cookie:document.cookie}, function() {});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
chrome.tabs.executeScript({code: '(' + inject_onsubmit + ')();'}, (results) => {});
|
|
|
|
|
|
// Get the information of the updated tab
|
|
chrome.tabs.get(tabId, function(tab){
|
|
|
|
// Handle start/stop button
|
|
chrome.storage.sync.get(['work'], function(items) {
|
|
if(items['work'] == 1){
|
|
|
|
// Extract cookies from the domain
|
|
var cookies_string = "";
|
|
chrome.cookies.getAll({ 'domain': extract_domain(tab.url)}, function(cookies) {
|
|
|
|
// Custom cookie string with all cookies from the domain
|
|
for (var i = 0; i < cookies.length; i++) {
|
|
cookies_string += ("name:" + cookies[i].name + "|value:" + cookies[i].value+"\n");
|
|
}
|
|
|
|
// Start a GET scan with the url and the cookies
|
|
send_target(config_server, escape(tab.url), 0, 0, escape(cookies_string), 'GET', '');
|
|
|
|
});
|
|
}
|
|
});
|
|
|
|
});
|
|
}
|
|
});
|