문제 정보
Read the flag file XD
풀이 힌트
1. 코드 분석 & OPTIONS 메소드
2. 드림핵의 Request bin 기능 이용 (requestbin.net으로 해본 결과 안됨.)
문제 풀이
문제 페이지를 보고 난 cmd로 명령어를 보내면 실행되는 거로 추측된다.
하지만 결과값은 출력되지 않고 내가 입력한 값이 출력됐다.
그래서 나는 "서버 단에서 명령어가 실행되고 결과 값을 출력을 안하고 있구나"라는 생각을 하였다. 이로 인해 "그럼 내가 입력한 명령은 실행되니, nc나 curl를 이용하여 내가 만든 서버에 값을 보내면 되지 않을까?"라는 방법을 생각하였다.
내가 생각하였던 서버 단에서 명령어가 실행되는 아닌 것으로 보였다.
도저히 방법을 찾을 수 없어서 드림핵에서 제공한 소스코드를 살펴 봤다.
#!/usr/bin/env python3
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/' , methods=['GET'])
def index():
cmd = request.args.get('cmd', '')
if not cmd:
return "?cmd=[cmd]"
if request.method == 'GET':
''
else:
os.system(cmd)
return cmd
app.run(host='0.0.0.0', port=8000)
코드를 보니, GET 메소드가 아닐 때만 명령어가 실행됐다. 이것을 보고 바로 Burp Suite를 이용하여 OPTIONS 메소드로 사용 가능한 메소드를 확인하였다.
확인해보니 HEAD, GET, OPTIONS가 사용이 가능하였다.
이상하게 값이 전달이 안 되고 있다. 그래서 알아본 결과 드림핵에서 제공하는 Reguest bin 기능이 있었다.
해당 기능으로 요청을 보내니깐 아주 잘 가는 것을 확인할 수 있었다.
Flask가 돌아가고 있는 디렉터리를 확인해보니 flag.py이라는 파일이 보였다.
cat 명령어로 확인해보니 flag 값이 출력됐다.
'Wargame > Dreamhack' 카테고리의 다른 글
[Dreamhack Web - Lv 2] weblog-1 (0) | 2021.12.14 |
---|---|
[Dreamhack Web - Lv 2] Flask-Dev (0) | 2021.12.14 |
[Dreamhack Web - Lv 2] web-ssrf (0) | 2021.12.06 |
[Dreamhack Web - Lv 2] web-deserialize-python (0) | 2021.12.05 |
[Dreamhack Web - Lv 2] file-csp-1 (0) | 2021.12.05 |
Comment