Information Security

PHP File Upload 공격 본문

Web Hacking/Web 취약점 분석

PHP File Upload 공격

leeeeye321 2017. 12. 5. 04:10

Server Side vulnerability - PHP File Upload

 

1. PHP File Upload 

 게시판에서는 사진 파일을 업로드하고 다운로드를 할 수 있다.


다운로드를 클릭해 보면 URL을 통해 파일이 업로드된 경로를 알 수 있다.

 

업로드한 파일은 모두 data 디렉터리에 위치한다.


만약 악의적인 php 파일을 업로드해서 실행이 된다면?

-> 서버에 php 파일을 업로드할 수 있는 것만으로도 취약점이 된다.

 

2. PHP File Upload 공격이 가능하려면?

1) php 파일을 서버에 업로드할 수 있어야 한다.

2) 웹 브라우저를 통해서 접근이 가능해야 한다.

 

악의적인 php 코드를 작성하고, 파일 업로드를 시도해본다.

 

위와 같은 메시지를 출력하며 파일 업로드를 실패한다. 제로보드는 write_ok.php에서 공격을 위한 첫 번째 조건을 차단하고 있다.

이를 우회할 수 있을까?

 

3. 우회 기법

-write_ok.php 파일의 207 라인에서 문자열 필터링을 하고 있다.

-eregi(i가 있으면 대소문자 구별X) 함수는 preg_match 함수와 동일한 기능을 한다.

-> 파일 이름에 ".php"가 포함되어 있으면 에러 메시지(Html, PHP 관련파일은 업로드할수 없습니다.)를 출력한다.

 

 php 코드 파일의 확장자가 꼭 ".php"여야 할까요? 

확장자가 .php가 아니라면 우회가 가능할 것이다.

그래서 같은 파일을 확장자만 .txt로 변경 후 업로드해 보았다.

 

 

코드를 php로 인식하지 못하고 텍스트가 그대로 출력되었다. 

확장자가 .php가 아니라면 실행이 되지 않는 것을 알 수 있다.

웹 브라우저가 php를 구별할 방법이 없기 때문에 실행이 가능하게 하려면 확장자가 필요하다. 

그래서 write_ok.php에서 확장자만 체크하고 있는 것이다.

 

php.conf 파일에서 기본 설정을 확인할 수 있다.

 

위의 설정에 의해서 확장자가 .php인 파일만 php로 인식을 하게되는 것이다.

 

AddHandler php5-script .txt
AddType text/html .txt

만약 위의 설정을 이와 같이 변경한다면 업로드된 txt 파일을 php로 인식할 것이다. 위의 설정만 바꿀 수 있다면 우회가 가능하다는 것이다!

 

★ 어떻게 해야 설정을 바꿀 수 있을까요?

아파치 설정 파일에는 글로벌 설정 파일 httpd.conf, 그리고 로컬 설정 파일 .htaccess가 있다.

해당 설정 파일이 존재하는 디렉터리와 서브 디렉터리에 대한 설정을 따로할 수 있다.

 

.htaccess 파일을 사용할 수 있도록 글로벌 설정 파일(httpd.conf)에서 위와 같이 변경해준다.

변경 후 적용(#service httpd restart)!

 

zboard 디렉터리에 로컬 설정 파일을 작성하여 제로보드에 접속할 때 인증을 거치도록 설정했다.

 

이제부터 인증 거친 후 제로보드에 접속할 수 있다.

로컬 설정 파일 .htaccess에 대해서 알았으니 이제 진짜 우회를 할 것이다.

먼저 로컬 설정 파일과 악의적인 php 코드(.txt)를 작성한다.


해당 로컬 설정 파일이 존재하는 디렉터리(data)와 서브 디렉터리에서 txt 파일도 php로 인식하도록 설정!

 

ifconfig 명령어 실행되는 php 코드

 

작성한 파일의 업로드를 시도한다.

 

확장자가 .txt이므로 당연히 업로드가 성공한다.

 

업로드된 두 파일은 zboard/data 디렉터리에서 확인할 수 있다.

 

업로드한 attack.txt 파일을 클릭해본다.

 

...

...

txt 파일을 php로 인식하여 ifconfig 명령어가 실행되었다. 우회 성공!!

 

※ 중복되는 파일을 업로드한다면 data 디렉터리에서 어떻게 구분을 할까요?

 

data 디렉터리를 확인해보면, 하나의 디렉터리(1512465971)가 생성되어 그 안에 파일이 저장되는 것을 알 수 있다.

 

중복되지 않는 파일을 업로드하면

 

이미 알듯이 data 디렉터리 하위에 위치한다. 

'Web Hacking > Web 취약점 분석' 카테고리의 다른 글

Blind SQL Injection 공격2  (0) 2017.12.08
Blind SQL Injection 공격  (0) 2017.12.08
SQL Injection 공격  (0) 2017.12.06
XSS(Cross Site Scripting) 공격  (0) 2017.12.01
제로보드 환경설정  (0) 2017.11.30