Beginner

file-download-1

web
  • 문제 정보
  • 풀이 327
  • 난이도 투표 15
  • 질문 10
  • 최근 풀이자 7478
  • 댓글 296

문제 설명

File Download 취약점이 존재하는 웹 서비스입니다.
flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다.

Reference

Introduction of Webhacking

난이도 투표 15

질문 10

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
웹 셸 풀이
#!/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) 안녕하세요. 혹시 해당 문제에서는 /upload 엔드포인트에서 웹 셸을 업로드해서 공격할 수 없는 이유가 정확히 무엇인지 알 수 있을까요 ? /read 페이지로 UPLOAD_DIR/filename 에 접근하는 것이 아니라, 데이터 자체를 읽어서 가져오기 때문인가요?
ro
Beginner

file-download-1

web

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
Alona
워게임: 50
출제된 지 22시간 만에 풀이 완료!

최근 풀이자 7478

수현이
대표 업적 없음
orchid_logger
대표 업적 없음
xogn
대표 업적 없음
hwnn
강의 수강: 1
retro3014
대표 업적 없음
킹받쥬
대표 업적 없음
suleif
대표 업적 없음
avatar
sinbon
대표 업적 없음
최인규
대표 업적 없음
yu_seung
대표 업적 없음

댓글 296

avatar
Rootsquare
해결사
경로 우회의 위험성
권도형봇
대표 업적 없음
여러분은 할 수 있습니다.
권도형봇
대표 업적 없음
직관적으로 생각하세요
Chriskmas
대표 업적 없음
혼자 낑낑대다가 정 안되면 풀이 검색해보는데 알고 나면 쉽지만 혼자서는 감도 안 잡힌다는거..
O_F
대표 업적 없음
간단하게 생각해야 합니다. 코드를 살펴보면 경로가 보입니다.
제트스트림
대표 업적 없음
경로를 너무 많이 올라가서 찾앗네요
avatar
T0pCcr4t
대표 업적 없음
포기만 하지 맙시다.
다 뚫자
대표 업적 없음
문제 의도 생각하기. 애초에 내부 경로를 알 수 없으니, 적당한 곳에서 찾을 수 있음... 하.. 이런 쉬운거에 몇 분을 쓴거야 정말!!!!!!!으앆!!
Code-SHD
대표 업적 없음
../
AN_hyeon_min
대표 업적 없음
read?name= 하고 ..// 구문을 이용해보세요