HackCTF Welcome_rev Write-Up

juuun0·2022년 1월 26일
1
post-thumbnail

Analyze Target

HackCTF의 가장 첫 번째 Reversing 문제입니다. 우선 이 문제의 경우 32bit ELF 파일이었기에 gdb를 이용하여 분석을 진행하였습니다. 간단하게 프로그램을 실행시켜보면 특정 인자를 필요로 하는 것으로 보였습니다.

persian@Code-PAPA:~/Downloads$ ./welcome_rev 
Please provide a password!

인자로 전달할 문자열을 입력하자 Incorrect Password라는 문구가 출력되는 것을 보아 입력값을 비교하는 과정이 존재함을 추측할 수 있었습니다.

persian@Code-PAPA:~/Downloads$ ./welcome_rev test
Incorrect Password!

GDB를 사용하여 분석을 진행할 때 먼저 비교와 관련된 함수가 별도로 존재하는지 확인하였습니다.

0x0804851b  check_password
0x08048737  main

main 함수와 별개로 check_password() 함수가 존재하는 것을 확인할 수 있었으며, main() 함수는 check_password() 함수의 결과값을 토대로 동작하는 것을 확인할 수 있었습니다.


Exploit

check_password() 함수를 완전히 분석하기 이전에 'cmp', 'strcmp()'와 같이 비교에 사용되는 부분을 위주로 살펴보았습니다. 만약 hard coding 되어있는 값과 비교할 경우 이 부분을 통해서도 정답을 얻을 수 있었기 때문입니다.

총 다섯 개의 cmp 명령과 한 번의 strncmp() 호출을 찾을 수 있었으며 그 중 strncmp() 함수에서 사용하는 인수 중 유의미한 값을 확인할 수 있었습니다.

SGFja0NURnt3M2xjMG0zXzcwX3IzdjNyNTFuNl93MHJsZEBfQCFfIX0=

해당 문자열의 끝이 '=' 문자로 끝나는 것을 보아 Base64 Type으로 유추하여 decoding을 진행하였고 flag를 획득할 수 있었습니다.

profile
To be

0개의 댓글