HackCTF

bloomin ㅣ 2019. 9. 24. 14:25

HackCTF 의 Reversing 문제를 풀어볼 것이다.

https://ctf.j0n9hyun.xyz/challenges 해당 페이지에서 Wecome_REV 파일을 다운받는다.

내 환경 : kali linux

file 명령을 실행한 결과

file 명령으로 welcome_rev의 파일 정보를 얻는다.

이 파일은 32-bit 리틀 엔디언 방식으로 되어있음을 알 수 있다.

Intel 80386

not stripped

gdb 명령을 실행

gdb를 사용하기 위해 gdb "파일 이름" 명령을 실행해준다.

disassemble 연산

위 사진은 main의 코드를 기계어에서 어셈블리 코드로 출력시키는 disas(disassemble) main 명령을 실행해준 결과이다.

이 코드를 보면 레지스터 앞에는 %가, 정수 앞에는 & 문자가 붙어있는 것을 알 수 있다.

이러한 표기 방식을 AT&T 방식이라고 하는데, 사실 보기가 어렵기 때문에 Intel 표기방식으로 바꿔보자.

intel 표기방식으로 바꾸고, main함수의 어셈블리 코드를 출력한 것.

set disassembly-flavor intel 을 통해 intel 표기 방식으로 설정하고,

다시 disas main 을 입력해서 main의 어셈블리코드를 출력해본다.

 

===================================================

이런 구조로 되어있다.

 

win32, win x86-64버전, debian linux 버전에서도 실행이 안돼서 

올리디버거로 디스어셈블한 코드와 text를 확인했다.

main함수

메인 함수를 살펴보니 setvbuf함수를 call하는 것과,

push offset aPleaseProvideA 명령을 내리는 것을 알 수 있다.

text에는 "Please provide a password"라고 되어있는 것으로 보아, _puts 함수로 pw를 입력받는 것같다.

더 밑으로 내려보니 check_password라는 함수를 콜하는 것을 알 수 있다.

수상해서 trace해보았다.-

이런 코드가 반복되는 함수였는데, 마지막부분을 보니

 

push offfset ~~하는 수상한 문자와 strncmp 함수를 호출하는 것으로 보아, 이 수상한 문자가 password 일 것이라고 생각했다.

... 이후의 부분을 더 보았더니 마지막이 =으로 끝나는 문자열이었다.

base64로 인코딩 되었을 문자열이라 생각이 들어 base64로 디코딩 하였더니

해결할 수 있었다 !!

'보안 > CTF' 카테고리의 다른 글

[HackCTF]Web button  (0) 2019.10.04
[HackCTF]Web Hidden  (0) 2019.10.04
[HackCTF]Web /  (0) 2019.10.04