WARGAME/smch ctf

SMCH CTF - BOF1 (EZ)

raar 2019. 11. 1. 12:17

 

 

 

우선 문제를 보면 왠지 제목이랑 설명부터 BOF 문제인거 같다 바이너리를 받고 file 명령어로 바이너리의 정보를 봐 보장

 

 

 

 

 

이 바이너리는 32bit ELF 형식의 바이너리임을 알 수 있다. 자, 그럼 이제  리눅스 환경에서 실행되는 바이너리임을 확인했으니깐 직접 실행을 시켜 보자

 

 

 

흠 입력을 받아보니 이상한 문자랑 함께 "Your IQ is 0x00000000!"이라는 문자열이 출력되는 것을 볼 수 있다 그럼 이제 본격적으로

IDA로 분석을 해보자

 

 

 

 

IDA hex ray로 main 함수를 까 보았다. 코드를 분석해보자면 printf와 puts함수로 문자열 3개를 출력하는 것을 확인할 수 있다

그다음 read 함수로 buf에 최대 0x44개(68개) 만큼 입력을 받을 수 있는 것을 확인할 있고, 다음으로 v4변수가 0이 아니면,

flag를 얻을 수 있음을 확인 할 수 있다.

 

그러나 v4변수는 0으로 초기화가 되어 있다. 이쯤에서 예상해 보면, read함수에서 입력을

받을 때 입력을 buf의 양보다 많이 주어서 v4 변수를 아무 값이나 덮으면 if가 참이 되어 flag를 얻을 수 있을 거 같다. 그럼 buf의

크기를 한번 봐보면 총 0x50만큼 인 것을 알 수 있고, v4는 esp+0x48부터 ebp-0x10까지 임을 알 수 있다. 즉 0x50-x10 한 값 

64까지 buf의 크기이고 그 이후부터는 v4의 영역임을 알 수 있당

 

이 문제에서는 v4의 값이 0만 아니면 아무 값으로도 변조되면 flag를 얻을 수 있으니 nc로 접속해서 payload를 짤 것도 없이

그냥 A를 64개보다 많게 입력해보면

 

 

 

이렇게 똭 flag가 나오는 것을 확인할 수 있다

 

FLAG : flag {Well_done!_Now_you_know_about_BOF}