본문 바로가기
웹 해킹/드림핵

[드림핵]blind-command 풀이

by jwcs 2023. 3. 12.
728x90

https://dreamhack.io/wargame/challenges/73/?writeup_id=1968 

 

blind-command

Read the flag file XD Reference Server-side Basic Server-side Advanced - Command Injection

dreamhack.io

 

드림핵 웹해킹 첫번째 로드맵 마지막 문제이다.

 

/

첫 화면이다. 뭔말인지 모르겠다. 코드를 살펴보자.

 

#!/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 매개변수를 가지고 있다. 이 매개변수의 값이 없으면 아까 봤듯이 

?cmd=[cmd]를 출력하는 것이다.

하지만 모순적인 것이 get 메소드는 막혀있다. 다른 메소드를 통해 cmd 명령어를 입력해서 플래그를 얻어야 하는문제이다.

 

다른 메소드가 무엇이 있는지 아래 링크를 참고하자

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

 

HTTP request methods - HTTP | MDN

HTTP defines a set of request methods to indicate the desired action to be performed for a given resource. Although they can also be nouns, these request methods are sometimes referred to as HTTP verbs. Each of them implements a different semantic, but som

developer.mozilla.org

 

필자는 HEAD메소드를 이용하여 문제를 풀어보겠다.

 

 

버프스위트로 패킷을 살펴보고 수정할 수 있다. GET으로 구성된 패킷을 HEAD 메소드로 바꾸고 cmd 매개변수의 값을 넣어주자

 

 

위와 같이 cmd 명령어로 curl 명령어를 넣어주자. flag.py를 찾기 위해 ls 명령을 넣어줬다.

 

바로 있으니 cat flag.py를 해주자

 

 

 

짜잔

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

Q. @app.route 부분을 보면 methods가 GET으로 되어있는 것을 확인해 볼 수 있다. 그렇다면 GET 메소드만 받을 수 있는 것이 아닌가? 어떻게 HEAD 메소드는 사용이 가능한 것일까?

 

A. HTTP 프로토콜에서 HEAD 메서드는 GET 메서드와 거의 동일하며, 서버로부터 리소스의 헤더 정보를 가져오는 것을 목적으로 합니다.

 즉, HEAD 요청은 GET 요청과 동일한 응답을 반환하지만, 실제 리소스를 반환하지 않고 헤더 정보만 반환합니다. 이러한 이유로 HEAD 요청은 GET 요청과 달리 리소스를 다운로드할 필요가 없을 때 사용하며, 대개 웹 서버에서 리소스의 메타 데이터(크기, 유형, 수정 일자 등)를 확인하거나 유효성 검사 등의 목적으로 사용됩니다.

 따라서, Flask에서는 HEAD 요청이 GET 요청과 거의 동일하며, 대부분의 경우 GET 요청과 동일한 응답을 반환하므로 methods 인자에 'head'를 추가하여 HEAD 요청도 처리할 수 있도록 합니다. 이를 통해 웹 개발자는 동일한 엔드포인트에서 GET과 HEAD 요청을 처리하고, 코드 중복을 최소화할 수 있습니다. 

 

728x90
반응형

'웹 해킹 > 드림핵' 카테고리의 다른 글

[드림핵] sql injection bypass WAF  (0) 2023.05.15
[드림핵]error based sql injection 풀이  (0) 2023.05.10
[드림핵]simple_sqli 풀이  (0) 2023.03.11
[드림핵]csrf-2 풀이  (0) 2023.03.11
[드림핵]csrf-1 풀이  (0) 2023.03.11