(CTF 출제) Random-Test

2024. 9. 4. 14:23·DreamHack/CTF

 

 

 

 

 

 

 

#!/usr/bin/python3
from flask import Flask, request, render_template
import string
import random

app = Flask(__name__)

try:
    FLAG = open("./flag.txt", "r").read()       # flag is here!
except:
    FLAG = "[**FLAG**]"


rand_str = ""
alphanumeric = string.ascii_lowercase + string.digits
for i in range(4):
    rand_str += str(random.choice(alphanumeric))

rand_num = random.randint(100, 200)


@app.route("/", methods = ["GET", "POST"])
def index():
    if request.method == "GET":
        return render_template("index.html")
    else:
        locker_num = request.form.get("locker_num", "")
        password = request.form.get("password", "")

        if locker_num != "" and rand_str[0:len(locker_num)] == locker_num:
            if locker_num == rand_str and password == str(rand_num):
                return render_template("index.html", result = "FLAG:" + FLAG)
            return render_template("index.html", result = "Good")
        else: 
            return render_template("index.html", result = "Wrong!")
            
            
app.run(host="0.0.0.0", port=8000)

 

 

문제 소스코드이다.

 

문제설명에서 말했다시피 사물함번호는 숫자포함 알파벳 포함 4글자이고 , 비밀번호는 숫자만 100 이상 200 이하 라고 한다.

 

근데 로그인 검사를 하는 코드를 자세히 보면

 

        if locker_num != "" and rand_str[0:len(locker_num)] == locker_num:

 

locker_num 이 비어있지 않고 rand_str의 첫 글자가 locker_num과 일치한다면 ~이라고 한다

 

그러면 Good을 출력한다고 한다.

 

그렇다면 만약 아이디가 'ab78'이라고 하면 앞글자인 'a'만 맞추면 Good을 출력하면 아이디도 무작위차별공격에 취약하다는 이야기가 된다 아이디를 먼저 구하고 비밀번호를 구하면 되는 문제인 거 같다.

 

버프스위트를 이용해서 해보자.

 

 

 

 

 

 

 

 

 

 

 

 

먼저 Target -> Sitemap에서 Request를 확인해 준다.

 

post -> locker_num , password를 보낼 수 있는 게 확인된다.

 

 

 

 

 

 

 

 

 

 

 

해당되는 Intruder로 보내준다 

 

 

 

 

 

 

 

 

 

 

Intruder  -> Positions로 넘어가게 되는데 그러면 Add§ 를 눌러 브루트포스를 할 자리를 지정해 준다.

 

앞서 이야기했듯이 사물함 번호는 앞글자만 맞다면  'Good'이라는 문자열을 출력하니 아이디부터 찾아보자.

 

 

 

 

 

 

 

 

 

 

 

Payload sets에서 Brute forcer로 변경한다.

 

 

 

 

 

 

 

 

 

아이디 앞글자를 비교했을 때 맞다면 Good을 출력한다고 했으니 Grep을 이용해서 확인해 보자

 

다른 Grep들이 있으니 Clear를 먼저 하고

 

 

 

 

 

 

 

 

 

새롭게 good을 Add 하도록 하자

 

 

 

 

 

 

 

 

 

 

Payload settings을 보면 character set에서는 어떤 문자들을 무작위로 넣을지 확인할 수 있다.

 

사물함 번호는 알파벳 소문자와 혹은 숫자 포함 4 자릿수 라고 했으니 설정해 주자

 

length 들은 한 글자씩 찾기 위해서 일부러 1로 설정했다.

 

시간 많은 사람들은 4자리 수로 해도 된다.

 

Start Attack을 눌러주면...

 

 

 

 

 

 

 

 

 

맨 앞글자는 q로 확인이 된다 왜냐하면 good을 응답했기 때문이다.

 

 

 

 

 

 

 

 

 

 

 

 

그럼 다른 글자를 찾기 위해서는 아까 Add§ 를 설정했을 때 맨 앞글자는 알았으니 앞에 'q'를 설정해 주고 다시 돌리면

아이디를 찾을 수 있을 거다.

 

아이디를 찾았으니 이제는 숫자로만 구성된 password를 찾도록 하자.

 

 

 

 

 

 

 

 

 

 

 

 

 

다시 돌아와서 이번에는 Numbers를 클릭하도록 하자 숫자로만 이루어져 있으니

 

 

 

 

 

 

 

 

 

 

 

Payload settings [Numbers]에서

 

Type : 순차적 , 무작위

From: 시작 숫자

To    :  끝내는 숫자

Step : 증가량

 

를 설정해 공격하기 앞서 아까처럼 Add§ 설정에서 아이디를 대입 후에 해야 한다는 것을 알아야 한다.

 

참고로 ID만 맞으면 Good을 출력하고 ID, Password 가 다 맞았을 때는 Good을 출력하지 않는다.

 

설정을 했으면 바로 start attack을 눌러서 문제를 풀어보도록 하자.

 

 

 

 

 

 

 

 

 

 

 

 

'DreamHack > CTF' 카테고리의 다른 글

(CTF 출제) Whis-is-my-ip  (0) 2024.09.04
(CTF 출제) BypassIF  (0) 2024.09.04
(CTF출제) mongoboard  (1) 2024.09.04
(CTF출제) Type c-j  (0) 2024.09.03
(CTF출제) baby-union  (0) 2024.09.03
'DreamHack/CTF' 카테고리의 다른 글
  • (CTF 출제) Whis-is-my-ip
  • (CTF 출제) BypassIF
  • (CTF출제) mongoboard
  • (CTF출제) Type c-j
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • 모의해킹 (7)
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
        • CTF (22)
      • Android_security (5)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • DreamHack 에 대한 문제들...
  • 인기 글

  • 태그

    union
    Linux wargame
    php
    Android
    안드로이드
    Linux
    리눅스
    bandit17
    url encode
    overthewire
    bandit
    drozer
    bandit30
    webhacking.kr
    cookies
    워게임
    리눅스 워게임
    Cookie
    Dreamhack
    webhacking
    insecurebankv2
    lfi
    php wrapper
    sql injection
    bandit20
    wargame
    난독화
    CTF
    bandit18
    정보보안기사
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
G_OM
(CTF 출제) Random-Test
상단으로

티스토리툴바