BOF 2번 문제당 바이너리를 함 받아서 실행시켜 보장
1번과 비슷하게 입력을 받는당 입력으로 A를 여러개 넣어보자
흠 입력을 받아 보니 "Hi aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! Your IQ is 0x00000000!"
라는 문자열이 출력되는 것을 보아 내가 입력 받은 값을 그대로 출력해 주는 같다. 그럼 이쯤에서 IDA로 분석을 해보자.
이전 문제랑 상당히 비슷한 거 같다. 버퍼를 ebp에서 0x54(84) 만큼 esp를 빼 할당하고 그중에서 문자열을 입력받는 부분은
총 64바이트임을 알 수 있다. 그리고 if에서 v4와 4277061을 비교 해서 같으면 flag를 얻을 수 있음을 확인 할 수 있는데,
우리가 입력을 줄때는 int형 4byte로 덮어야 하니깐 hex값로 봐보면,
위와 같이 0x414345로 덮어주면 됨을 확인 할 수 있다. 그리고 v4변수와 buf[64]변수의 거리를 구해보면,
전체 buf가 ebp에서부터 0x54만큼 떨어져 있고, v4가 ebp에서 0x14만큼 떨어져 있으므로, 0x54-x014
즉, 64만큼 buf를 체우고 나머지를 저 0x414345로 덮으면 flag를 딸 수 있을 것이다. 그럼 다음과
같이 익스 코드를 짜보면,
1
2
3
4
5
6
7
8
9
10
11
12
|
from pwn import*
payload=''
payload+="A"*64
payload+=p32(0x414345)
p.sendline(payload)
p.interactive()
|
위와 같이 flag를 구할 수 있당
FLAG : flag{N0w_you_kn0w_b0f_4nd_Little_Endian!}
'WARGAME > smch ctf' 카테고리의 다른 글
SMCH CTF - Calc (0) | 2019.11.09 |
---|---|
SMCH CTF - Rock Paper scissors(EZ) (0) | 2019.11.08 |
SMCH CTF - BOF4 (0) | 2019.11.08 |
SHCH CTF - BOF3 (0) | 2019.11.03 |
SMCH CTF - BOF1 (EZ) (0) | 2019.11.01 |