본문 바로가기
Web/Hacking

파일 업로드 취약점 | 악성코드 배포 | 보안 방법

by 09337 2021. 8. 9.

파일 업로드(File Upload) 취약점이란?

  파일 업로드 기능이 존재하는 웹 사이트의 확장자 필터링이 미흡할 경우, 공격자가 악성 파일을 업로드하여 시스템을 장악할 수 있는 취약점이다.

  악성 스크립트가 업로드 된 후, 서버 상에서 스크립트를 실행하여 쉘을 획득하는 등의 행위로 시스템 권한을 획득하거나 서버를 변조시키는 등의 방법으로 웹 서버를 장악한다. 이 취약점으로 접근 권한 상승, 정보 유출, 악성코드 배포 등의 공격이 발생할 수 있다.


쉘: 사용자에게 받은 지시를 하드웨어 지식으로 변경하여 운영체제의 커널과 유저를 이어 준다.

웹 쉘: 웹 사이트를 통해 쉘을 여는 공격으로, 이 쉘을 통해 서버에 명령어를 수행하는 파일 업로드 취약점으로 많이 사용된다.


웹 서비스 구동 방법

Client : 웹 사이트 접속

Web server: 웹 서비스 실행 / apache

Web application: 웹 사이트 개발 언어 / php

DB: 서버에 기록되는 정보 저장 / mysql


악성코드 배포

1. 공격자는 홈페이지에 존재하는 파일 업로드 취약점을 이용하여 수행 → 파일 업로드 경로 알아내기

photo.jpg 파일을 업로드 후, 해당 파일이 업로드 된 경로를 알아낸다.

 

 

2. 웹 사이트에 웹 쉘과 배치 파일을 업로드하여 웹으로 업로드 된 웹 쉘에 접근

shell.php라는 cmd 명령을 사용할 수 있는 웹 쉘을 업로드를 해준다.

 

게시글이 정상적으로 올라갔다면, 앞에서 알아낸 파일 업로드 경로에서 웹 쉘을 실행시킨다.

 

현재 경로를 표시하는 cmd 명령어를 사용해서 제대로 출력되는지 확인했다. /shell.php?cmd=cd

 

웹 쉘을 올린 후, test.bat 파일을 올린다.

 

웹 쉘을 통해 호스트 PC에 파일 업로드를 통해 파일이 정상적으로 올라갔는지 확인한다. (위 사진 중 호스트 PC 화면은 내가 구성한 게시판이었기 때문에 서버 입장에서 확인할 수 있다.)

 

 

3. 배치 파일을 실행시켜 피해자 PC의 정보 확인 및 유출

test.bat 파일을 웹 쉘을 통해 실행 시킨다.

 

해당 배치 파일은 cmd 명령어로 수집된 결과를 a.txt 파일에 저장한다.

 

동일한 경로에서 a.txt를 확인해보면 cmd 명령이 실행된 결과들을 모두 확인할 수 있다.


 

보안 방법

1. 파일 확장자 필터링을 이용한다. whitelist를 통해 허용되는 내용을 제외한 모든 부분을 필터링해서 안전한(허용한) 확장자가 아닐 시, 업로드에 제한을 두게 한다.

2. 파일이 저장되는 경로에서 실행 권한을 제거하여, 악성 스크립트가 담긴 파일을 실행하지 못하게 한다.

3. 웹 서버와 파일이 업로드 되는 서버를 물리적으로 분리한다.

 

whitelist VS blacklist

whiltelist: 자동 승인 항목

blacklist: 자동 거부 항목

둘 중 보안에 더 좋은 기법은 whitelist이다. blacklist의 경우 지정해둔 항목 이외의 새로운 악의적인 파일 업로드가 가능한 확장자가 생길 수 있기 때문이다.

 

 

실행 권한을 제거하는 방법

1) Apache conf

이미지 파일에 존재하는 php code 가 실행되지 않도록 업로드 디렉터리에 php 코드가 실행되는 것을 방지한다.

<Directory /home/web/public_html/upload_dir>
    php_admin_value engine Off
</Directory>

2) PHP conf

  • disable_functions 설정
    php 에서 지원하는 함수 기능을 허용하지 않는 옵션이다. 이 기능을 통해 시스템 명령이 실행되는 것을 방지할 수 있다.
  • allow_url_fopen 설정
    php 에서 원격지에 있는 파일을 읽어오지 못 하도록 한다. 원격지의 악성스크립트(webshell)가 실행되는 것을 방지할 수 있다.

 

 

참고: http://blog.plura.io/?p=6079

'Web > Hacking' 카테고리의 다른 글

Union SQL Injection  (1) 2023.03.01
불충분한 인가 (IN)  (1) 2022.12.11
CSRF | XSS와 CSRF 차이점 | 보안 방법  (0) 2021.08.09
XSS | 필터링 우회 | 보안 방법  (0) 2021.08.09
Blind SQL Injection  (2) 2020.12.30

댓글