프로젝트 관련 조사/모의 해킹

웹셀 업로드 취약점 방어하기

호레 2015. 10. 17. 20:10
반응형

출처: 게임해킹 - 한주성

 

1. 소스코드 상에서 확장자 검증

 

 

다음과 같이 jpg,png,gif,jpeg 인 경우만 업로드 할 수 있도록 설정

  if(eregi(“jpg|png|gif|jpeg”, $notuploadfile)){
    move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile);
    echo “성공적으로 업로드 되었습니다.”;
     exit;
    }

 

 

 

 

 

2. httpd. conf 설정

 

 

다음과 같이 설정하면 C:/APM_Setup/htdocs/upload 경로에 있는 jpg|png|gif|jpeg 확장자들만 실행 시켜주는 권한을 줌

<Directory "C:/APM_Setup/htdocs/upload">

<FilesMatch "\.(jpg|png|gif|jpeg">

Order allow,deny

Allow from all

</FileMatch>

</Directory>

 

 

 1,2 번을 하더라도 웹쉘의 확장자를 webshell.php.jpg로 바꾸게 되면 우회가 가능해진다. 이를 방어하기 위해서는 다음과 같이 수정해주어야 한다.

 

<Directory "C:/APM_Setup/htdocs/upload">

<FilesMatch "\.(jpg|png|gif|jpeg">

Order allow,deny

Allow from all

</FileMatch>

<FilesMatch "\.([^.]+)\.([^.]+)$">    // webshell.php.jpg 와 같이 .이 두개 이상인지를 확인하고 2개 이상일 경우 deny

Order Deny, Allow

Deny from all

</FileMatch>

</Directory>

 

 

 

3. php.ini 설정

 

disable_functions = exec, system, popen, proc_open, get_user, php_uname, ini_set, phpversion, ini_get, ini_get_all, phpinfo, passthru, escapeshellcmd, pcntl_exec, shell_exec, show_source

 

위와 같이 추가를 해준다. 위에 대한 설명은 웹셀에서 자주 쓰이는 함수를 사용 못하게 해주는 기능이다.

 

 

4. 서버내 웹쉘 검색

 

다음과 같이 입력해주면 된다.

findstr /i /s exe /d:webshell.txt

 

/i 옵션은 대소문자 무시

/s 옵션은 하위 디렉토리 검색

/d:webshell.txt 에는 3번 php.ini 설정에서 설명한 함수가 들어있다.

 

ex) webshell.txt 메모장 안에 exec(  ,  system (  이런식으로  저장하고 finstr을 이용하여 돌려주면 된다.

반응형