이 영역을 누르면 첫 페이지로 이동
SH1R0_0의 기술블로그 블로그의 첫 페이지로 이동

SH1R0_0의 기술블로그

페이지 맨 위로 올라가기

SH1R0_0의 기술블로그

[web] mikufanpage

  • 2024.03.04 19:06
  • 🚩 CTF Writeup/osu!gaming CTF 2024

 

📌 Intro

메인 페이지

 

처음 웹 사이트에 접속하면 위와 같은 이미지가 보인다.

 

🔬 Analysis

디렉토리 구조

문제 파일은 위와 같은 디렉토리 구조를 가지고 있으며, 여러개의 miku1.jpg 이미지와 함께 flag.txt가 존재한다.

/image?path=miku1.jpg 로 접속하면 img 하위에 있는 이미지를 조회할 수 있다.

https://mikufanpage.web.osugaming.lol/image?path=miku1.jpg

 

index.html 페이지가 로드될 때 아래와 같이 7개의 이미지를 요청한다.

mikufanpage/index.html

 

// app.js

const express = require('express'); 
const path = require('path');
  
const app = express(); 
const PORT = process.env.PORT ?? 3000;

app.use(express.static(path.join(__dirname, 'public')));
  
app.listen(PORT, (err) =>{ 
    if(!err) 
        console.log("mikufanpage running on port "+ PORT) 
    else 
        console.log("Err ", err); 
}); 

app.get("/image", (req, res) => {
    console.log(req.query.path);
    if (req.query.path.split(".")[1] === "png" || req.query.path.split(".")[1] === "jpg") { // only allow images
        res.sendFile(path.resolve('./img/' + req.query.path));
    } else {
        res.status(403).send('Access Denied');
    }
});

/image?path=miku1.jpg 와 같이 요청한다고 가정했을 때, req.query.path의 값은 miku1.jpg가 된다.

req.query.path.split(".")을 통해 miku1.jpg는 [ 'miku1', 'jpg' ] 로 split되며,

[1]번째 값을 가져오므로 req.query.path.split(".")[1]의 값은 jpg가 된다.

 

 

🎉 Exploit

/image?path=miku1.jpg./../flag.txt 와 같이 입력하면 req.query.path.split(".")을 통해 [ 'miku1', 'jpg', '/', '', '/flag', 'txt' ] 로 split되며, [1]번째 값은 jpg가 되므로 if문을 통과한다.

 

결국 req.query.path는 miku1.jpg./../flag.txt가 되고 flag를 읽을 수 있다.

 

 

🚩 Flag

 

 

'🚩 CTF Writeup > osu!gaming CTF 2024' 카테고리의 다른 글

[web] stream-vs  (0) 2024.03.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [web] stream-vs

    [web] stream-vs

    2024.03.08
다른 글 더 둘러보기

정보

SH1R0_0의 기술블로그 블로그의 첫 페이지로 이동

SH1R0_0의 기술블로그

  • SH1R0_0의 기술블로그의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (33)
    • 📖 Study (11)
      • Crypto (0)
      • WebHacking (3)
      • Reversing (0)
      • Pwnable (1)
      • Develop & CS (1)
      • Android (4)
      • Etc (2)
    • 🚩 CTF Writeup (14)
      • SSTF 2023 (8)
      • osu!gaming CTF 2024 (2)
      • WxMCTF '24 (4)
      • KalmarCTF 2024 (0)
    • 🎮 Dreamhack Writeup (8)
      • Web (7)
      • Pwnable (1)

최근 글

인기 글

댓글

공지사항

  • 공지 - 박민혁 (SH1R0_0)

아카이브

태그

나의 외부 링크

  • 관리자
  • 글쓰기
  • 공부

정보

SHIR0_0의 SH1R0_0의 기술블로그

SH1R0_0의 기술블로그

SHIR0_0

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © SHIR0_0.

티스토리툴바