외로운 Nova의 작업실
dreamhack 웹해킹 - 8(file-download-1) 본문
안녕하세요, 이번시간에는 file-vulnerability 혼자 실습편 file-download-1 문제를 풀어보겠습니다. 정답은 가려져있습니다.
- 문제인식
이 문제는 file download 취약점이 존재하는 웹서비스로 flag.py를 다운로드 받으라고합니다. 일단 코드를 봐보겠습니다.
- 코드 리뷰
app.py 코드를 리뷰하겠습니다.
#!/usr/bin/env python3
import os
import shutil
from flask import Flask, request, render_template, redirect
from flag import FLAG
APP = Flask(__name__)
UPLOAD_DIR = 'uploads'
@APP.route('/')
def index():
files = os.listdir(UPLOAD_DIR)
return render_template('index.html', files=files)
@APP.route('/upload', methods=['GET', 'POST'])
def upload_memo():
if request.method == 'POST':
filename = request.form.get('filename')
content = request.form.get('content').encode('utf-8')
if filename.find('..') != -1:
return render_template('upload_result.html', data='bad characters,,')
with open(f'{UPLOAD_DIR}/{filename}', 'wb') as f:
f.write(content)
return redirect('/')
return render_template('upload.html')
@APP.route('/read')
def read_memo():
error = False
data = b''
filename = request.args.get('name', '')
try:
with open(f'{UPLOAD_DIR}/{filename}', 'rb') as f:
data = f.read()
except (IsADirectoryError, FileNotFoundError):
error = True
return render_template('read.html',
filename=filename,
content=data.decode('utf-8'),
error=error)
if __name__ == '__main__':
if os.path.exists(UPLOAD_DIR):
shutil.rmtree(UPLOAD_DIR)
os.mkdir(UPLOAD_DIR)
APP.run(host='0.0.0.0', port=8000)
/read 부분에 보게되면 사용자의 입력값을 검증없이 사용하고 있습니다. 이에따라 취약점이 발생하게되는 것입니다.
- 문제 풀이
문제서버에 접속하겠습니다.
url에 /read?name=../flag.py를 덧붙여보겠습니다.
쉽게 획득할 수 있습니다.
'Web Penetesting > Web Vulnerability' 카테고리의 다른 글
dreamhack 웹해킹 - 10(Carve Party) (0) | 2022.12.28 |
---|---|
dreamhack 웹해킹 - 9(SSRF 함께 실습) (0) | 2022.12.27 |
dreamhack 웹해킹 - 7(command injection) (0) | 2022.12.16 |
web hacking 취약점에따른 공격 기법 정리 (0) | 2022.12.14 |
dreamhack 웹해킹 - 6(Blind SQL injection) (0) | 2022.12.09 |
Comments