티스토리 뷰
728x90
반응형
Docker 파일과 app.py 파일이 주어졌다.
FROM python:3.10-slim-buster
RUN pip3 install flask
COPY flag.txt /
WORKDIR /app
COPY app/* /app/
copy app/templates/* /app/templates/
copy app/themes/* /app/themes/
EXPOSE 5000
ENTRYPOINT ["python3", "app.py"]
flag.txt는 / 디렉토리에 있다.
from flask import Flask, render_template, request
import sys
app = Flask(__name__)
def factorial(n):
if n == 0:
return 1
else:
try:
return n * factorial(n - 1)
except RecursionError:
return 1
def filter_path(path):
# print(path)
path = path.replace("../", "")
try:
return filter_path(path)
except RecursionError:
# remove root / from path if it exists
if path[0] == "/":
path = path[1:]
print(path)
return path
@app.route('/')
def index():
safe_theme = filter_path(request.args.get("theme", "themes/theme1.css"))
f = open(safe_theme, "r")
theme = f.read()
f.close()
return render_template('index.html', css=theme)
@app.route('/', methods=['POST'])
def calculate_factorial():
safe_theme = filter_path(request.args.get("theme", "themes/theme1.css"))
f = open(safe_theme, "r")
theme = f.read()
f.close()
try:
num = int(request.form['number'])
if num < 0:
error = "Invalid input: Please enter a non-negative integer."
return render_template('index.html', error=error, css=theme)
result = factorial(num)
return render_template('index.html', result=result, css=theme)
except ValueError:
error = "Invalid input: Please enter a non-negative integer."
return render_template('index.html', error=error, css=theme)
if __name__ == '__main__':
sys.setrecursionlimit(100)
app.run(host='0.0.0.0')
filter_path에서 "../"가 필터링 되고 있다.
"../"가 연속되어 있으면 filter_path 함수는 계속 호출되어 "../"를 필터링할 것이다.
즉, "../"가 없어질 때까지 계속 호출된다는 말이다.
(../../../../../flag.txt를 입력한다면, flag.txt로 반환된다)
그리고 if path[0] == "/" path = path[1:] 에서
"/"가 제거(필터링) 된다.
이를 우회하기 위해서 theme 인자에 "//"를 입력해 주면 된다!
/?theme=//flag.txt 로 이동해보자!
기존 페이지에서 css가 바뀐 것을 확인할 수 있다!
그러나 flag는 나오지 않았다....
헤매던 중에 flag를 <style> 태그에서 찾을 수 있었다!!!
FLAG
amateursCTF{h1tt1ng_th3_r3curs10n_l1mt_1s_1mp0ssibl3}
728x90
반응형
'CTF > Web' 카테고리의 다른 글
[LIT CTF 2023] unsecure (0) | 2023.08.07 |
---|---|
[LIT CTF 2023] My boss left (0) | 2023.08.07 |
[AmateuresCTF 2023] Waiting-an-eternity (0) | 2023.07.24 |
[n00bzCTF 2023] Club N00b (0) | 2023.06.11 |
[n00bzCTF 2023] Robots (0) | 2023.06.11 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MISC
- FTKImager
- 리버싱
- 모바일
- Steganography
- reversing
- forensic
- SQLi
- Fiesta
- sqlinjection
- 포렌식
- forensics
- AssaultCube
- networking
- 안드로이드
- rev
- Cookie
- 드림핵
- Android
- 스테가노그래피
- dreamhack
- CTF
- 취약점
- 인시큐어뱅크
- md5
- web
- mongodb
- 해킹
- cheatengine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함