본문 바로가기
WEB HACKING/웹 해킹[이론]

File Upload 공격

by madevth 2021. 12. 11.
반응형

파일 업로드는 공격자가 원하는 임의의 파일을 업로드할 수 있는 취약점이다.

사용자가 올린 파일을 검증하지 않고 모두 서버에 저장하기 때문에 발생하며, 공격자는 이 점을 이용하여 악성 파일을 업로드할 수 있다.

 

① 공격 시나리오

1) 서버 측 실행 파일 업로드

만일 서버에서 파일 업로드 기능에 대해 아무런 검증을 하지 않는다면, web shell과 같은 서버 측 백도어 파일을 업로드할 수 있다. 파일 업로드 기능을 활용한 가장 대표적인 공격으로, 시스템 명령을 수행해서 쉘을 획득하는 공격이 있다.

 

2) 피싱 사이트

악성 코드를 업로드하여 시스템 명령을 수행하는 것 외에도, 서버 측 Html 파일을 업로드하여 피싱 사이트를 만들 수도 있다. 사용자는 자신이 접속한 사이트에서 응답받은 페이지이기 때문에, 큰 의심 없이 이용할 것이다.

 

3) Deface

Deface는 "외관을 훼손하다"라는 뜻으로 파일을 override 하여 기존 파일 대신 자신이 만든 파일을 띄우게 만드는 공격이다.

 

4) XSS

파일 업로드 기능으로 인한 공격이기 때문에 Stored Xss 공격도 가능하다.

 

5) DOS (Denial Of Service)

일명 도스 공격, 즉 서비스 거부 공격도 가능하다. 파일의 크기를 검증하지 않는 곳에서 대용량의 파일을 업로드함으로써 서비스에 과부하를 주는 공격이다.

 

② 웹 쉘(Web Shell)이란?

공격자가 올리는 악성 파일의 대표적인 예로 웹 쉘이 자주 거론된다.

우선 쉘(Shell)이란 사용자와 운영체제를 연결해주는 프로그램인데 사용자의 명령을 해석하여 전달하는 역할을 한다.

대표적으로 윈도우(Window)의 cmd, 리눅스(Linux)의 터미널이 있다.

즉, 웹 쉘은 웹에서 명령을 받아 수행하는 프로그램으로, 외부에서 명령을 받은 기능과 그 명령을 실행하는 기능 두 가지로 나뉜다.

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

위와 같은 파일을 업로드하고, 실행하면서 cmd의 인자로 ls, pwd와 같은 시스템 명령을 준다면 어떻게 될까?

위와 같이 해당 경로에 있는 모든 파일을 확인할 수 있다.

권한 문제로 제한되는 기능이 있겠지만, 그것을 제외하면 우리가 터미널에서 내리는 모든 명령을 내릴 수 있게 되는 것이다.

 

③ 서버 측 코드를 실행하는 방법

악성 파일을 업로드했다면, 그 파일을 어떻게 실행하는 것일까? 바로 해당 파일의 경로로 접속하는 것이다.

해당 파일의 경로로 접속하면, 해당 파일을 요청하면서 파일이 실행된다. 그렇다면 파일의 경로는 어떻게 알 수 있을까?

 

1) 이미지 파일을 올려본다.

이미지 파일을 올리면, 해당 이미지를 확인할 수 있는 경우가 있다. 당장 Tistory에서 글을 쓸 때도 우리가 이미지를 업로드하면 업로드된 이미지를 바로 확인할 수 있다. 그렇다면 개발자 모드로 들어가 img 태그의 src를 확인할 수 있다.

이전 포스팅 마이페이지(2)에서 사용했던 사진의 src를 확인해보면 아래와 같이 경로를 확인할 수 있다.

대표적으로 이미지 파일이라고 적었지만, 파일을 확인할 수 있는 경우에는 위와 같이 src를 확인하면 업로드된 경로를 알 수 있다.

 

2) 이미지 주소 복사

오른쪽 마우스를 클릭하면 "이미지 주소 복사"라는 항목이 뜬다.

주소창에서 해당 경로로 접속하면, 파일을 확인할 수 있다.

위에서 살펴본 방식처럼, 우선은 이미지 파일 등을 올려보면서 업로드 기능이 어떻게 수행되는지, 해당 파일들은 어디에 저장되는지를 확인할 필요가 있다.

반응형

'WEB HACKING > 웹 해킹[이론]' 카테고리의 다른 글

File Upload 공격(3)  (0) 2021.12.18
File Upload 공격(2)  (0) 2021.12.12
CSRF : Cross-Site Request Forgery  (0) 2021.11.26
XSS : Cross-Site Scripting 대응 방안  (0) 2021.11.25
XSS : Cross-Site Scripting  (0) 2021.11.15

댓글