정보보안(구버전)/ bWAPP 2019. 2. 22. 21:19

웹 해킹 bWAPP - 89. A7 - Missing Functional Level Access Control - Directory Traversal - Directories

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다. 

 

 

1. Missing Functional Level Access Control

 

 - OWASP Top10 A7 - 기능 수준의 접근 통제 누락

 - 접근 통제 및 검증이 서버 설정, 관리 부분에서 제대로 구성되지 않았을때 중요 자원 접근이 가능한 취약점이다.

 - Ex) 디렉토리 접근, 파일 접근, 파일 다운로드 및 업로드

 

 

 

2. Directory Traversal - Directories

 

 - 웹 브라우저를 통해서 확인 가능한 상위 디렉토리를 검색하여 시스템 파일을 검색/접근하거나 다운로드하는 취약점이다.

 - 해결하는 방법으로는 변수를 이용하여 기본적으로 접근 가능한 경로를 제한하거나, 상대 경로를 절대 경로로 반환한다.

 - 디렉토리 리스팅 : 웹브라우저를 통해서 서버 관리자가 관리적으로 리스팅하도록 지정한 디렉토리가 접근되는 취약점

 

 

bee@bee-box:/var/www/bWAPP$ ls /var/www/bWAPP/../../../
bin   cdrom  etc   initrd      lib    lost+found  mnt  proc  sbin  sys  toolbox  var
boot  dev    home  initrd.img  lib64  media       opt  root  srv   tmp  usr      vmlinuz

bee@bee-box:/var/www/bWAPP$ ls /var/www/bWAPP/../../../etc
~ 중간 생략 ~

 

 

 

3. Missing Functional Level Access Control - Directory Traversal - Directories

 

 - 이 시나리오는 URL 주소창에 ../(상위 디렉토리 이동)를 실시하여 다른 디렉토리로 이동되는 취약점을 알아보는 내용이다.

 

 

  

Ex1) Missing Functional Level Access Control - Directory Traversal - Directories 이해

 

 

보안 레벨 선택 및 시나리오 선택

 

 

 

'var/www/bWAPP/documents' 디렉토리 내용 확인


 

 

마우스 우클릭 -> '페이지 소스' 클릭

 

 

 

해당 파일들이 'var/www/bWAPP/documents' 디렉토리에 있음

 

 

 

89-0. 디렉토리 검색 URL-1.txt

상대 경로를 이용하여 디렉토리 구조 파악-1

 

 

 

89-1. 디렉토리 검색 URL-2.txt

상대 경로를 이용하여 디렉토리 구조 파악-2

 

 

 

89-2. 디렉토리 검색 URL-3.txt

상대 경로를 이용하여 디렉토리 구조 파악-3

 

 

 

89-3. 디렉토리 검색 URL-4.txt

상대 경로를 이용하여 디렉토리 구조 파악-4

 

 

 

89-4. 디렉토리 검색 URL-5.txt

절대 경로를 이용하여 디렉토리 구조 파악


 

 

Ex2) 'directory_traversal_2.php' & 'functions_external.php' 파일 내용 확인

 

bee@bee-box:/var/www/bWAPP$ ls -l directory_traversal_2.php
-rw-rw-r-- 1 root www-data 8975 2014-11-02 23:52 directory_traversal_2.php
 
bee@bee-box:/var/www/bWAPP$ vi directory_traversal_2.php

~ 중간 생략 ~

 

    if(isset($_GET["directory"]))
    {

 

        $directory = $_GET["directory"];

 

        switch($_COOKIE["security_level"])
            {

 

            case "0" :     

      

                show_directory($directory);

                // echo "<br />" . $_GET['page'];

                break;

 

            case "1" :   

     

                $directory_traversal_error = directory_traversal_check_2($directory);

                if(!$directory_traversal_error)
                {

                    show_directory($directory);

                }

                else
                {

                    echo $directory_traversal_error;

                }          

                break;

 

            case "2" :

 

                $directory_traversal_error = directory_traversal_check_3($directory, $base_path = "./documents");          

                if(!$directory_traversal_error)
                {

                    show_directory($directory);

                }

                else
                {

                    echo $directory_traversal_error;

                }          

                break;

 

            default :     

     

                show_directory($directory);

                break;

 

        }
 

:q!

 

 

bee@bee-box:/var/www/bWAPP$ gedit functions_external.php

~ 중간 생략 ~

 

function directory_traversal_check_2($data)

{

 

    // Not bulletproof

   

    $directory_traversal_error = ""; 

   

    // Searches for special characters in the GET parameter

    if(strpos($data, "../") !== false ||

       strpos($data, "..\\") !== false ||

       strpos($data, "/..") !== false ||

       strpos($data, "\..") !== false ||

       strpos($data, ".") !== false)

           

    {

 

        $directory_traversal_error = "Directory Traversal detected!";

   

    }

   

    /*

    else

    {

   

        echo "Good path!";

   

    }    

     */

   

    return $directory_traversal_error;

 

}

 

function directory_traversal_check_3($user_path,$base_path = "")

{

   

    $directory_traversal_error = "";

   

    $real_base_path = realpath($base_path);

 

    // echo "base path: " . $base_path . " real base path: " . $real_base_path . "<br />";

 

    $real_user_path = realpath($user_path);

 

    // echo "user path: " . $user_path . " real user path: " . $real_user_path . "<br />";

 

    // int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

    // URL: http://php.net/manual/en/function.strpos.php

    if(strpos($real_user_path, $real_base_path) === false)

    {

 

~ 중간 생략 ~

 

 

 

 

Ex3) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

89-5. 디렉토리 검색 URL-6.txt

상대 경로를 이용하여 디렉토리 구조 파악 및 실패

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

웹해킹 89. A7 - bWAPP Missing Functional Level Access Control - Directory Traversal - Directories


https://youtu.be/k_F41Mm6B34



   

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q