[normaltic 취업반 5기] 2024-02-14 15주차 과제 : 2번 과제 Get Flag File 1, 2

2024. 2. 21. 09:51normaltic 취업반 5기/과제

 

과제 목표

 

  • Get Flag File 1, 2 문제에서 파일 다운로드 취약점을 이용하여 플레그가 포함된 소스코드를 발견하라.

 

Get Flag File 1 문제

 

 

1) Get Flag File 1 문제 환경

 

  Get Flag File 1 문제에서 주어진 웹 페이지는 다음과 같다.

 

  • http://ctf.segfaulthub.com:3184/download_1/  : 공격 수행 페이지

 

[1] http://ctf.segfaulthub.com:3184/download_1/

 

http://ctf.segfaulthub.com:3184/download_1/ 초기화면


  해당 웹 페이지에서 파일 다운로드 취약점을 이용하여 소스코드에 포함된 플레그를 찾는다.

 

 

2) Get Flag File 1 문제 공격 시나리오

 

  Get Flag File 1 문제 공격 시나리오는 다음과 같다.

 

  1. 파일 다운로드 기능이 존재하는 웹 페이지를 찾는다.
  2. 임의의 파일을 업로드 후 파일 다운로드 경로를 확인한다.
  3. 확인한 파일 다운로드 경로를 웹 브라우저 주소창에 입력한다.
  4. 다운로드 파일 경로를 파라미터 값으로 받는 파라미터에 웹 서버 내 존재하는 파일을 다운로드한다.
  5. 다운로드 파일의 소스코드를 확인한다.

 

[1] http://ctf.segfaulthub.com:3184/download_1/notice_write.php

 

 

  본 문제에서 파일을 업로드하면 해당 게시글을 읽을 시 파일 다운로드 기능을 사용 가능한 웹 페이지이다. 임의의 파일을 등록하여 파일 다운로드 경로를 확인한다.

 

 

  작성한 임의의 파일 등록 후 게시글을 작성한다.

 

 

  'Download' 버튼 위에 커서를 올려 파일이 저장된 경로를 알려주는 툴팁을 확인하여 파일 저장 경로를 확인한다. 파일이 다운로드되는 원리를 분석해 보면 download.php 파일에 filePath란 파라미터 값으로 파일 저장 경로가 입력되는 것을 확인할 수 있다. 이를 이용하여 웹 서버 내 원하는 파일을 다운로드할 수 있다. 

 

[2] http://ctf.segfaulthub.com:3184/download_1/download.php?filePath=/vanhart/ddd.jpg 

 

 

  프록시툴로 해당 URL 입력 시 응답 결과를 확인해 보면 파일의 내용이 출력되는 것을 확인할 수 있다. 파일 다운로드 취약점이 존재하는지 확인하기 위해 웹 서버 내에 항상 존재하는 파일인 /etc/passwd 파일의 내용을 확인해 본다.

 

 

  filePath 파라미터 값으로 /../../../etc/passwd을 입력했더니 /etc/passwd 파일 내용이 출력되는 것을 확인하였다. 이를 통해 웹 서버 내에 항상 존재하는 파일 중 하나인 index.php 파일의 소스코드를 확인한다.

 

 

  filePath 파라미터 값으로 /../index.php을 입력했더니 해당 디렉터리의 상위 디렉터리에 존재하는 index.php 파일의 소스코드를 확인할 수 있었다. 또한 해당 소스코드에서 플레그를 획득할 수 있었다.

 

 

Get Flag File 2 문제

 

 

1) Get Flag File 2 문제 환경

 

  Get Flag File 2 문제에서 주어진 웹 페이지는 다음과 같다.

 

  • http://ctf.segfaulthub.com:3184/download_2/  : 공격 수행 페이지

 

[1] http://ctf.segfaulthub.com:3184/download_2/

 

http://ctf.segfaulthub.com:3184/download_2/ 초기화면

 

  해당 웹 페이지에서 파일 다운로드 취약점을 이용하여 소스코드에 포함된 플레그를 찾는다.

 

 

2) Get Flag File 1 문제 공격 시나리오

 

  Get Flag File 1 문제 공격 시나리오는 다음과 같다.

 

  1. 파일 다운로드 기능이 존재하는 웹 페이지를 찾는다.
  2. 임의의 파일을 업로드 후 파일 다운로드 경로를 확인한다.
  3. 확인한 파일 다운로드 경로를 웹 브라우저 주소창에 입력한다.
  4. 다운로드 파일 경로를 파라미터 값으로 받는 파라미터에 웹 서버 내 존재하는 파일을 다운로드한다.
  5. 다운로드 파일의 소스코드를 확인한다.

 

[1] http://ctf.segfaulthub.com:3184/download_2/notice_write.php

 

 

  본 문제에서 파일을 업로드하면 해당 게시글을 읽을 시 파일 다운로드 기능을 사용 가능한 웹 페이지이다. 임의의 파일을 등록하여 파일 다운로드 경로를 확인한다.

 

 

  작성한 임의의 파일 등록 후 게시글을 작성한다.

 

 

  'Download' 버튼 위에 커서를 올려 파일이 저장된 경로를 알려주는 툴팁을 확인하여 파일 저장 경로를 확인한다. 파일이 다운로드되는 원리를 분석해 보면 download.php 파일에 filePath란 파라미터 값으로 파일 저장 경로가 입력되는 것을 확인할 수 있다. 이를 이용하여 웹 서버 내 원하는 파일을 다운로드할 수 있다. 

 

[2] http://ctf.segfaulthub.com:3184/download_2/download.php?filePath=/vanhart/ddd.jpg 

 

 

  프록시툴로 해당 URL 입력 시 응답 결과를 확인해 보면 파일의 내용이 출력되는 것을 확인할 수 있다. 파일 다운로드 취약점이 존재하는지 확인하기 위해 웹 서버 내에 항상 존재하는 파일인 /etc/passwd 파일의 내용을 확인해 본다.

 

 

  filePath 파라미터 값으로 /../../../etc/passwd을 입력했더니 파일이 없다는 알림 창이 발생한다. 입력했던 값에 '/..'를 여러 번 입력해도 결과는 마찬가지였다.

 

  이를 통해 추측해 볼 수 있는 점은 해당 download.php 파일에서 filePath 파라미터로 전달받는 파라미터 값에 필터링이 적용되어있을 수 있다는 점이다. 파일 다운로드 취약점을 방지하기 위해 Path Traversal 취약점을 방지하기 위한 상위 디렉터리를 의미하는 '/..' 혹은 '../'을 주로 필터링한다.

 

(1) '/..' 필터링

 

'/..' 필터링 우회 방법

 

  '/..' 문자열이 필터링된다면 위의 내용 같이 '/./...' 문자열로 입력을 하면 필터링을 우회할 수 있다.

 

 

  우회 방법에 따라 filePath 파라미터 값을 입력한 결과 적용되지 않았다.

 

(2) '../' 필터링

 

'../' 필터링 우회 방법

 

  '/..' 문자열이 필터링 된다면 위의 내용 같이 '/./...' 문자열로 입력을 하면 필터링을 우회할 수 있다.

 

 

  우회 방법에 따라 filePath 파라미터 값을 입력한 결과 정상 작동 하는 것을 확인하였다. 해당 우회 방법을 사용하여 웹 서버 내에 항상 존재하는 index.php 파일을 확인해 보자.

 

 

  filePath 파라미터 값으로 /..././index.php을 입력했더니 index.php 파일의 소스코드를 확인하였으며 플레그를 확인할 수 있었다.