1.웹 셸 업로드 

게시판에서 웹 셸을 올리는데 php는 필터링이 되어 png파일 내부에 스크립트를 작성하여 업로드

확장자와 시그니처를 png로 하고 내부에 웹 셸 코드 작성

 

2. 파일 업로드 경로 찾기

경로는 파라미터가 "/사용자id/파일이름" 형태로 보이는데 두가지 케이스가 있을 듯

  1. 경로 그대로 사용
  2. back단에서 앞의 prefix를 추가하여 사용

위의 주석을보니 ./files/12 라는 것을 확인 files/12로 들어가보자

ps. 주석이 없다면 어떻게 찾아야하지?????

 -> 파일이 다운로드가 가능하다면 path traversal로 다운로드하는 소스를 확인 해보자 다운로드 소스에는 prefix를 찾을 수 있을 것이다.

빙고

3. 웹 셸 실행

업로드한 png 파일을 실행하기 위해 .htaccess 파일을 업로드 후 게시판에서 .htaccess를다운로드해보자.

정상적으로 업로드 확인 뒤 /files/12/shell.png를 접속해보

png가 실행되도록 세팅

 

다운로드 결과

 

 

정상적으로 웹셸을 확인

 

4. flag 찾기

"grep -r segfault{ ../"로 경로를 올라가며 플래그 찾기

여기서 끝내도 되지만 해당 index 파일을 다운받아보자.

"cp ../../index.php ./index.txt"로 해당 파일을 내 다운로드 디렉토리로 이동

게시판의 다운로드에서 파일명을 변경하여 다운로

grep 검색 결과

 

게시판의 다운로드 파일명을 index.txt로 변경

 

flag 확인

 

download.php를 받아보니 path traversal을 방지하기위해 "../" replace 하고 있었다.

'웹 해킹 코스 > 과제' 카테고리의 다른 글

16차 authorization 2(client 인증 우회)  (0) 2024.02.23
16차 authorization 1  (0) 2024.02.23
15차 CTF webshell3  (0) 2024.02.15
14차 문제풀이 Web Shell 2  (0) 2024.02.13
14차 문제풀이 Web Shell 1  (0) 2024.02.13


1. 웹 셸 업로드 

이미지 파일 업로드를 진행 후 버프 수트로 해당 request를 변조

변조 전 request

 

확장자가 php인것을 업로드를 못하기 때문에 pHp로 변경

pHp여도 파일이 업로드가 안되어서 png의 시그니처를 사용하기 위해 내부 값에 php코드를 삽입

변조 후

 

2. 웹 셸 동작 확인하기

 

파일경로 확인

 

/webshell_3/webshell_3/files/123/ 경로에 파일 업로드 확인

/webshell_3/webshell_3/files/123/webshell.pHp 요청 하기

php가 열리지 않고 다운로드 됨

 

인삿말 페이지를 확인해보니 특정 php를 사용하는 것을 확인

해당 php 대신 업로드한 웹 셸을 include할 수 있을 듯함.

경로는 /webshell_3/webshell_3/ 이므로 ./files/123/webshell2.pHp요청

 

인사말 페이지의 파라미터 확인하니특정 php를 받아옴
기존의 en.php 파일 위치는 greet.php보다 하위 디렉토리인듯

 

 

webshell_3/ webshell_3/lang위치에 각 언어별 php들이 있었음.

system('pwd')의 결과인 /app/webshell_3/webshell_3이 나옴
웹 셸 코드 추가 후 GET파라미터로 커맨드 추가

 

 

ls로 해당 경로의 파일들을 보니 topScret 디렉토리가 보임

ls로 파일들 조회
topSecret 내부 파일들
빙고

'웹 해킹 코스 > 과제' 카테고리의 다른 글

16차 authorization 1  (0) 2024.02.23
15차 GET FLAG FILE2  (0) 2024.02.16
14차 문제풀이 Web Shell 2  (0) 2024.02.13
14차 문제풀이 Web Shell 1  (0) 2024.02.13
4-7 마이페이지 만들기  (0) 2024.02.06

파일 업로드 취약점 대응 방안

파일 업로드 취약점은 업로드 한 파일을 서버가 실행 하기 때문에 위험 하다.

이를 방지하기 위한 방법은 아래와 같다.

  1. 업로드 파일의 확장자를 화이트리스트 기반으로 제한
    php가 동작하는 서버에서 .php를 업로드 하여 실행 하게 될 시 웹 셸을 업로드 할 가능성이 많다. 이를 방지하기 위해 특정 확장자를 제외한 파일들을 업로드가 불가능하도록 코드를 작성한다.
  2. 파일 명 및 경로의 노출제한
    파일을 실행하기 위해서는 서버에서의 파일 위치와 파일명을 알고 있어야한다. 이를 공격자가 알 수 없게하기 위해 업로드 한 파일명 및 경로를 DB에 저장하고 파일명은 난독화 하여 서버에 저장한다. 파일을 다운로드 시 게시판의 key를 통해 파일이 저장된 경로와 파일명을가져와 다운로드 할 수 있도록한다.
  3. NAS의 활용
    php가 설치되지 않은 NAS에 파일을 업로드 하는 방식으로 구현이 되어 있다면 .php파일을 읽더라도 실행을 할 수 없다.

File include 취약점 (LFI, RFI)

일반적으로 개발 시 공통적으로 사용하는 부분을 따로 개발하고 requre, import 와 같은 구문을 사용하여 해당 코드들을 재사용한다. 이를 이용한 공격 기법이 File include 취약점 이다.

 

홈페이지가 한국어, 영어 등 다른 언어로 작성된 php가 있다고 가정한다.

Ex) ko.php: 한국어 Navigation bar( Navigation bar는 상단 혹은 좌우측들에 있는 목록을 말한다.)

en.php: 영어 Navigation bar

nav bar의 예시

이를 request의 파라미터로 파일 명을 받게 된다면 File Include 취약점이 존재 할 수 있다.

 

fileIncludeTest.php

<?php
include($_GET['page']);
echo "wow";
?>

위와 같은 구문으로 작성된 페이지가 있다면 ip:port/ fileIncludeTest .php?page=../../../../../etc/passwd로 요청을 하게 된다면 

passwd 파일을 불러올 수 있다.

서버 로컬 파일을 include한다면 Local File Include(LFI), 외부의 파일을 include한다면 Remote File Include(RFI)라고 한다. 

'웹 해킹 코스 > 내용 정리' 카테고리의 다른 글

14주차 (파일 업로드 취약점 & 웹 셸)  (0) 2024.02.13
13주차 Dos 공격 및 CSRF의 대처방법  (0) 2024.02.05
12주차 CSRF  (0) 2024.02.01
12주차 CSRF  (1) 2024.01.21
11차 HTML의 DOM 접근  (0) 2024.01.15


1. 웹 셸 코드 작성

<?php
echo system($_GET['cmd']);           
?>

 

2. 파일 업로드

 

php 확장자 사용 불가.

2-2. 분석

http response 분석 결과 확장자 구분의 내용이 front 의 스크립트에서 필터링 되는 것을 확인

response를 intercept하여 script를 제거 

 

버프 수트의 reponse intercept 기능 켜기
return true로 변경

2-3 파일 재업로드 

업로드 성공
그러나 back단에서 또다시 check를 하는 듯함.

그런데??? index가 풀려있다?

php 확인 결과 업로드 할 수 없는 파일 alert이 발생하나 파일은 업로드 됨

3. 파일 경로찾기

경로는 /webshell_2files/123

4. find 파일 찾기

find / -name flag.txt

5. 파일 조회하기

'웹 해킹 코스 > 과제' 카테고리의 다른 글

15차 GET FLAG FILE2  (0) 2024.02.16
15차 CTF webshell3  (0) 2024.02.15
14차 문제풀이 Web Shell 1  (0) 2024.02.13
4-7 마이페이지 만들기  (0) 2024.02.06
4-6 게시판 구현하기 (html_entities 적용)  (0) 2024.02.06

+ Recent posts