HackCTF 의 Reversing 문제를 풀어볼 것이다.
https://ctf.j0n9hyun.xyz/challenges 해당 페이지에서 Wecome_REV 파일을 다운받는다.
내 환경 : kali linux
file 명령으로 welcome_rev의 파일 정보를 얻는다.
이 파일은 32-bit 리틀 엔디언 방식으로 되어있음을 알 수 있다.
Intel 80386
not stripped
gdb를 사용하기 위해 gdb "파일 이름" 명령을 실행해준다.
위 사진은 main의 코드를 기계어에서 어셈블리 코드로 출력시키는 disas(disassemble) main 명령을 실행해준 결과이다.
이 코드를 보면 레지스터 앞에는 %가, 정수 앞에는 & 문자가 붙어있는 것을 알 수 있다.
이러한 표기 방식을 AT&T 방식이라고 하는데, 사실 보기가 어렵기 때문에 Intel 표기방식으로 바꿔보자.
set disassembly-flavor intel 을 통해 intel 표기 방식으로 설정하고,
다시 disas main 을 입력해서 main의 어셈블리코드를 출력해본다.
===================================================
이런 구조로 되어있다.
win32, win x86-64버전, debian linux 버전에서도 실행이 안돼서
올리디버거로 디스어셈블한 코드와 text를 확인했다.
메인 함수를 살펴보니 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 |