정보보안(구버전)/ bWAPP 2019. 2. 22. 21:19
웹 해킹 bWAPP - 90. A7 - Missing Functional Level Access Control - Directory Traversal - Files
본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.
1. Missing Functional Level Access Control
- OWASP Top10 A7 - 기능 수준의 접근 통제 누락
- 접근 통제 및 검증이 서버 설정, 관리 부분에서 제대로 구성되지 않았을때 중요 자원 접근이 가능한 취약점이다.
- Ex) 디렉토리 접근, 파일 접근, 파일 다운로드 및 업로드
2. Directory Traversal - Files
- 웹 브라우저를 통해서 확인 가능한 상위 디렉토리를 검색하여 시스템 파일을 검색/접근하거나 다운로드하는 취약점이다.
- 해결하는 방법으로는 변수를 이용하여 기본적으로 접근 가능한 경로를 제한하거나, 상대 경로를 절대 경로로 반환한다.
- 디렉토리 리스팅 : 웹브라우저를 통해서 서버 관리자가 관리적으로 리스팅하도록 지정한 디렉토리가 접근되는 취약점
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/passwd
/var/www/bWAPP/../../../etc/passwd
3. Missing Functional Level Access Control - Directory Traversal - Files
- 이 시나리오는 URL 주소창에 ../(상위 디렉토리 이동)를 실시하여 다른 디렉토리로 이동되는 취약점을 알아보는 내용이다.
Ex1) Missing Functional Level Access Control - Directory Traversal - Files 이해
보안 레벨 선택 및 시나리오 선택
상위 디렉토리로 이동을 시도하라는 메세지 확인
상대 경로를 이용하여 '/etc/passwd' 유무 확인-1
상대 경로를 이용하여 '/etc/passwd' 유무 확인-2
상대 경로를 이용하여 '/etc/passwd' 유무 확인-3
절대 경로를 이용하여 '/etc/passwd' 유무 확인
Ex2) 'directory_traversal_1.php' & 'functions_external.php' 파일 내용 확인
bee@bee-box:/var/www/bWAPP$ ls -l directory_traversal_1.php
-rw-rw-r-- 1 root www-data 9026 2014-11-02 23:52 directory_traversal_1.php
bee@bee-box:/var/www/bWAPP$ vi directory_traversal_1.php
~ 중간 생략 ~
<?php if(isset($_GET["page"]))
$file = $_GET["page"];
switch($_COOKIE["security_level"])
case "0" :
show_file($file); // Debugging break;
case "1" :
$directory_traversal_error = directory_traversal_check_1($file); if(!$directory_traversal_error) show_file($file); } else echo $directory_traversal_error; } // Debugging break;
case "2" :
$directory_traversal_error = directory_traversal_check_3($file); if(!$directory_traversal_error) show_file($file); } else echo $directory_traversal_error; } // Debugging break;
show_file($file); // Debugging 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' 변경
보안 레벨 및 시나리오 선택
상대 경로를 이용하여 '/etc/passwd' 유무 확인 실패
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 90. A7 - bWAPP Missing Functional Level Access Control - Directory Traversal - Files