[Normaltic's CTF] Pin Code Crack

2024. 5. 22. 16:17정보보안 및 해킹/CTF

네 자리 숫자의 PIN번호를 크랙해보자고 합니다.

이제 드디어 Intruder를 사용해봅니다..

과연 얼마나 느릴지

어디에서는 Burp Suite로 10000개 넣으면 영원히 한다던데

메인 페이지입니다

크 간지

일단 보이는 LOGIN버튼 클릭해줍니다. 010-1414-1818.. 아니 근데 이거 진짜 있는 번호인가..

수자 4자리를 입력하라고 합니다. 하지만 저희 번호는 저게 아니죠

일단 대충 0000으로 치고 Enter를 눌러서 어떻게 보내지는지 확인해봅니다.

checkOTP.php에서 otpNum을 get방식으로 숫자 4자리를 받는 모양입니다. 그걸로 Login fail인지 아닌지 (성공했을때 뭐가 나오는지 모르니..) 판단하는 모양입니다.

로그인 fail 마음 아파요

일단 Burp Suite에서 기능을 활용해봅니다. checkOTP.php로 otpNum을 보내는 부분을 Intruder로 보내줍니다.

otpNum 뒤의 제가 임의로 넣어 둔 0000부분을 체크하고 Add부분을 눌러주면 해당 부분에 특이하게 생긴 부호표시(Add옆에 있는 것)에 감싸지게 됩니다.

그리고 해당 부분은 0000부터 9999까지의 '숫자'이니 Number로 맞춰준 뒤에

From은 시작점입니다. 당연히 0000이죠 0도 상관 없습니다

To는 끝점. 종료시점입니다. 9999를 넣어줍니다.

Step은 어느정도 간격으로 넣어줄 것인지 입니다.

1을 넣으면 0001 0002 0003 이런 식으로 증가할 것이고, 2를 넣으면 0002 0004 0006 이런 식으로 증가할 것 입니다.

1을 넣어줍니다.

Min Integer digits와 Max Integer digits는 기본적으로 From과 To에 맞춰서 세팅이 될텐데요

0000은 아무래도 읽지 못하는 모양입니다. 0 1 2가 아니라 0000 0001 0002 이런 식으로 읽어와야 하기 때문에 4글자로 맞춰줍니다.

그리고 Start Attack.

사실 이렇게 마무리가 되어야 하는데...

너무 오래 걸리고, 어디에 플래그가 있는지 모르기 때문에 기다릴 수 없다는 것.

그래서.. 디스코드에 질문을 올렸더니.. 새로고침을 해보라는 조언을 받아 새로고침을 했더니,

이럴수가.

플래그가 나왔다.

아무래도, 200번대 넘게 기다렸기 때문인 것 같아서, 도대체 어디에 플래그가 숨겨져있는지 너무 궁금해서 광기부스터를 켰다.

1000 ~ 1050 까지

성공이다.

1000 ~ 1030 까지

성공이다.

1000 ~ 1010 까지

어라? 실패했다.

1000 ~ 1020 까지

이것도 실패했다.

1000 ~ 1025 까지

다시 성공이다.

1000 ~ 1024 까지

성공이다.

1000 ~ 1022 까지

성공이다.

1000 ~ 1021 까지

성공이다.

1021인 것을 여기서 이미 알아버렸다.

하지만 이것은 정석적인 풀이가 아니므로 푼 것으로 처리하지 않았다.

여기까지가 Burp suite의 Intruder 기능을 이용한 풀이입니다.

참고로, 진짜 10000개를 넣으면 영원히 걸릴 것 같습니다.

그래서, 노선을 변경합니다.

파이썬을 사용하도록 하겠습니다. 초면입니다.

import requests

base_url = "http://ctf.segfaulthub.com:1129/6/checkOTP.php?otpNum="

def brute_force_otp():
    previous_response = None
    
    for i in range(10000):
        otp = f"{i:04d}"  # 숫자를 4자리 문자열로 포맷 (0000, 0001, ..., 9999)
        url = base_url + otp
        response = requests.get(url)
        current_response = response.text.strip()
        
        # 이전 응답과 현재 응답을 비교하여 다를 경우 출력
        if previous_response is not None and current_response != previous_response:
            print(f"응답 변경 발견! OTP: {otp}, 응답: {current_response}")
        
        previous_response = current_response

if __name__ == "__main__":
    brute_force_otp()

base_url의 뒤에 4자리의 문자열로 0000부터 9999까지 10000개의 문자열을 차례대로 넣어줄 수 있는 코드입니다.

중간에 만약에 Response에 변화가 감지된 경우 Request에서 넣어준 otp의 값과 변경된 Response를 출력할 수 있도록 하였습니다.

파이썬을 돌려주었습니다. 해당 경로에 들어가서..(사실 절대경로라서 들어가지 않아도 되는데 왜 그랬을까요..?) 파이썬을 켜줍니다.

Burp Suite에서 계속해서 해당 url을 듣고 있었기 때문에 Request와 Response값을 읽을 수 있습니다.

응답이 변경되는 것이 발견되었습니다.

otp값은 1021이고 지금까지는 Login fail이 뜨다가 갑자기 index.php로 보내는 코드가 나오네요.

Burp Suite에서 확인해보니 동일한 결과가 보입니다.

해당 otp를 넣어봅니다.

로그인이 되면서 플래그를 얻었습니다.

'정보보안 및 해킹 > CTF' 카테고리의 다른 글

[Normaltic's CTF] Login Bypass2  (0) 2024.05.22
[Normaltic's CTF] Login Bypass1  (0) 2024.05.22
[Normaltic's CTF] Admin is Mine  (0) 2024.05.22
[Normaltic's CTF] PIN CODE Bypass  (0) 2024.05.22
[Normaltic's CTF] Get Admin  (0) 2024.05.22