ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pwnable.kr] Level 2 - col
    Wargame/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

    댓글

Designed by Tistory.