-
[pwnable.kr] Level 2 - colWargame/pwnable.kr 2023. 1. 6. 04:24반응형
Level 2 - col을 풀어보자.
문제를 보면 MD5 해시 충돌에 대해 말하고 있다.
암호학은 아닐 것 같긴 한데, 접속을 해보도록 하자.

<col의 문제 화면> putty를 이용해 col에 접속을 하고 파일을 확인하였다.
col 실행 파일과 col.c 소스 코드 파일이 있는 것을 볼 수 있다.

<col의 파일 목록> 그런데 putty를 이용하니, 조금만 입력을 하지 않고 시간이 지나면 접속이 끊긴다.
어쩔 수 없이 kali를 켜서 ssh 접속을 하였다.
소스 코드를 확인해보면 hashcode가 있고, check_password 함수가 선언되어 있다.
입력 문자 p에 대해 int 형으로 형 변환을 한 후 res에 5번을 반복하여 그 값을 더해주고 있다.
그리고 인자로 입력하는 argv[1]의 값이 hashcode와 같으면 문제가 해결되는 구조이다.

<col의 소스 코드> col 프로그램을 실행하면서 다양한 입력을 해보았다.
출력되는 것을 확인해보면, 프로그램은 분석했던 것처럼 동작을 하는 것 같다.

<col의 입력에 따른 다양한 출력> 이제 이 문제를 어떻게 해결해야 할까??
위로 올라가 소스 코드를 잘 살펴 보면, check_password 함수에서 입력받는 인자인 p는 int 형이 된다.
이것의 의미는 입력받은 p를 int의 크기인 4 바이트씩 ip에 저장한다는 것이다.
그럼 문제 해결은 끝이다.
ip를 5번 더해 hashcode 값인 0x21DD09EC로 만들면 된다.
0x21DD09EC를 5로 나누면 0x06C5CEC8이 나오는데, 이 값을 5번 더하면 원래 값보다 4만큼 부족하다.
그러므로 0x06C5CEC8을 4번 더해주고, 그보다 4가 큰 0x06C5CECC를 더해 hashcode 값을 만들도록 하자.
인자는 python을 이용해 문자열로 쉽게 입력할 것이다.
아래의 사진처럼 인자를 작성해 입력해주면 flag가 나타나고, 이것을 웹 페이지에 입력하면 문제가 해결된다.
(Little Endian 방식으로 입력을 해주어야 한다.)

<col의 flag 출력> 반응형'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Level 6 - random (0) 2023.04.09 [pwnable.kr] Level 5 - passcode (0) 2023.04.01 [pwnable.kr] Level 4 - flag (0) 2023.02.05 [pwnable.kr] Level 3 - bof (0) 2023.01.07 [pwnable.kr] Level 1 - fd (0) 2023.01.06