https://dreamhack.io/wargame/challenges/899
난이도: Level 1
app.py
#!/usr/bin/env python3
from flask import Flask, request, render_template
app = Flask(__name__)
try:
FLAG = open("./flag.txt", "r").read() # flag is here!
except:
FLAG = "[**FLAG**]"
@app.route('/', methods=['GET', 'POST'])
def index():
menu_str = ''
org = FLAG[10:29]
org = int(org)
st = ['' for i in range(16)]
for i in range (0, 16):
res = (org >> (4 * i)) & 0xf
if 0 < res < 12:
if ~res & 0xf == 0x4:
st[16-i-1] = '_'
else:
st[16-i-1] = str(res)
else:
st[16-i-1] = format(res, 'x')
menu_str = menu_str.join(st)
# POST
if request.method == "POST":
input_str = request.form.get("menu_input", "")
if input_str == str(org):
return render_template('index.html', menu=menu_str, flag=FLAG)
return render_template('index.html', menu=menu_str, flag='try again...')
# GET
return render_template('index.html', menu=menu_str)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
app.py 코드를 보면, FLAG의 일부를 가져와 비트 연산을 수행하여 나온 결과를 st 배열에 넣고 menu_str에서 합치는 과정을 볼 수 있습니다. 이후, 유저 입력이 FLAG의 일부와 같은지 비교 후 동일하다면, FLAG를 띄워줍니다.
홈페이지에 1_c_3_c_0__ff_3e라는 문자열이 표시되어 있습니다. menu_str 값으로 이 값을 역연산하여 org 값을 알아내면 됩니다.
Exploit Code
# 1_c_3_c_0__ff_3e
def rev():
menu_str = "1_c_3_c_0__ff_3e"
# menu_str = "15_106810248c310f2"
st = ['' for i in range(16)]
org = 0
a = 15
for c in menu_str:
if c == '_':
res = 11
org = ( res << (4 * a)) | org
elif c in ['c','d','e','f']:
res = int(c, base=16)
org = ( res << (4 * a)) | org
else:
res = int(c)
org = ( res << (4 * a)) | org
#if k >= 12:
a = a - 1
return org
def func(org):
menu_str = ''
org = int(org)
print(org)
st = ['' for i in range(16)]
for i in range (0, 16):
res = (org >> (4 * i)) & 0xf
if 0 < res < 12:
if ~res & 0xf == 0x4:
st[16-i-1] = '_'
else:
st[16-i-1] = str(res)
else:
st[16-i-1] = format(res, 'x')
menu_str = menu_str.join(st)
return menu_str
print("REV: ", rev())
print("ORG: ", func(rev()))
위 코드를 통해 나온 결과 값을 입력으로 주면 아래와 같이 플래그를 획득할 수 있습니다.
'DreamHack' 카테고리의 다른 글
[DreamHack] phpreg (0) | 2023.08.08 |
---|---|
[DreamHack] cg-simple_sqli (0) | 2023.08.08 |
[DreamHack] development-env (0) | 2023.08.07 |
[DreamHack] Format String Bug (0) | 2023.06.19 |
[DreamHack] Return to Library (0) | 2023.06.19 |