1.파일 업로드 취약점이란?


1) 파일 업로드 취약점이란? 

  

  게시판 등의 파일을 업로드 할 수 있는 기능을 악용하여 악의적인 파일 (웹쉘)업로드를 통해 시스템 권한을 장악하는 기법을 의미한다. 보통은 악위적인 스크립트가 포함된 소스파일을 첨부할 수 없게 막아 놓지만, 간혹 에디터의 오류로 인하여 업로드를 가능하게 한다. 때문에 악성 스크립트가 업로드 된 후 서버상에서 스크립트를 실행시켜 쉘 획득, 서버변조 등 웹 서버를 장악할 수 있다.



2) 웹 서버에서 실행 가능한 확장자

 

 개발언어

실행가능한 확장자 

ASP, ASPX

  asp, aspx, htm, html, asa 등

PHP 

  phtml, php, php3, php4, php5, inc, htm, html 등

JSP, JAVA 

  jsp, jspx, jsw, jsv, jspf, htm, html 등

PERL 

  pl, pm, cgi, lib, htm, html 등

ColdFusion

  cfm, cfml, cfc, dbm, htm, html 등



3) 파일 업로드 공격의 영항


- 허용하지 않은 사용자 내부망 접근

- 회사 기밀 유출 및 개인 정보 유출

- 윔 바이러스 배포 등,




2. 공격방법


1) 취약점 점검


- 파일첨부 기능이 있는 페이지를 찾아, 지정된 확장자 이외의 파일을 업로드 할 수 있는지 확인한다.(1-2 참고)

- 지정된 확장자 이외의 파일을 업로드 할 수 있다면 업로드 된 파일에 접근이 가능한지 또한, 실행이 가능한지 확인한다.

- 만약 접근이 가능하다면 피싱페이지로 활용될 수 있고, 실행이 가능하다면 시스템의 제어 권한을 얻을 수 있다. 



2) 프록시툴을 이용한 확장자 검사우회 파일 업로드


 게시판의 파일 업로드 기능에서 확장자 검사를 통해 파일 업로드 공격을 차단할 수는 있으나, 파일 타입 변조 등을 통해 다양한 우회공격이 존재한다.  

 

 업로드 시 파일의 유형정보를 알려주는 MIME(Multipurpose Internet Mail Extensions)는 메시지 유형을 정의하기 위한 인터넷 표준이며, Content-Type, MIME-Version Content-Transfer-Enconding 등 세 가지 헤더 정보로 구성되 있다.


 그중 Content-Type의 속성은 사용 목적에 따라 XML, Media, Application, Text등을 세팅하여 전달되는 파일 유형을 알려주게 된다. 이 Content-Type의 속성을 프록시 퉁을 이용해 변조를 하여 우회 할 수 있다.




3) 널바이트를 이용한 파일 업로드

 

 c/c++에서 널바이트 문자여(%00, 0x00)은 문자영의 끝을 의미하기 때문에, 특정 확장자를 숨기기 위한 목적으로 사용될 수 있으며, 해당 부분의 취약점은 C루팅을 처리하거나 내부의 C API를 호출하는 함수를 사용하는 경우에 발생될 수 있다.

  

 위험한 확장자를 검사하는 로직을 우회하기 위해 널바이트와 .jpeg를 함께 접목하여 업로드하면, 널바이트(%00)의 끝을 의미하기 때문에 %00 다음의 문자열은 무시하게 된다.


언어 

우회패턴 

처리패턴 

 PHP 

test.php%00.jpeg 

 test.php 

 ASP 

 test.asp%00.jpeg  

test.asp

JSP

test.jsp%00.jpeg 

test.jsp




4) SQL Injection을 이용한 파일 업로드

 

 -MySQL의 into outfile함수

into outfile()을 이용하면, 웹 서버에 파일을 생성할 수 있다.


  -MSSQL의 저장 프로시저 이용

XP_cmdshell 프로시저를 이용하여 윈도우 명령어인 echo를 통하여 특정 명령어를 작성하고 파이프(>>)를 통하여 특정파일에 삽입할 수 있다.




5) Exploit을 통한 root권한획득


 exploit이란 소프트웨어의 버그 등의 설계상 결함을 이용한 공격코드를 말한다. ex) kernel.c


파일 업로드 이후 완벽한 시스템 권한을 왹등하기 위해서는 root권한이 필요하나, 대부분이 별도의 계정을 이용하여 웹 서비스를 운영하기 때문에 파일 업로드 공격은 일반 권한까지만 획득이 가능하다. 때문에 시스템공격을 위한 exploit을 이용하여 root권한을 획득할 수 있다


  




3. 방어방법

 

- 지정된 확장자를 제회한 다른 확장자의 업로드를 불가능 하도록 해야 하며, 스크립트 파인의 업로드 및 실행을 금지 시킨다.


- 파일명 및 확장자 검증을 우희하는 것을 방지하기 위해 대소문자를 구분하지 않고 문자열을 비교해야 하며, 특수문자가 포함되어 있을 경우 업로드를 금지시킨다.

 

- 웹 서버 엔진 설정 시 업로드 된 디렉토리의 serve side script언어의 실행 권한을 제거하고 업로드 된 파일명, 확장자를 난수화 하여 변경해야 한다.


- 업로드 된 파일을 루트 디렉토리와 동일한 수준에 존재하는 다른 디렉토리에 저장하거나 url요청에 의해서 직접 접근이 불하는 한 곳에 저장하며, 상위 폴더 졀로 이동을 제한한다.


by dajababa

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

CSRF (Cross-site request forgery) 란  (0) 2017.04.28
Drive-By-Download(DBD) 공격(이론편)  (0) 2017.04.24
파일업로드 취약점  (0) 2017.04.09
SQL injection  (0) 2017.03.25
자바스크립트(JavaScript) 난독화  (0) 2017.03.21
XSS(Cross Site Scripting) 공격이란?  (0) 2017.03.12

+ Recent posts