[PHP]PHP 경로 탐색 공격 예방하기 - idongmai

Program/오래된 PHP 게시판2





지금 매우 짧은 강좌인데요. PHP내의 경로 탐색 공격에 대해 알려드리려 합니다.


경로 탐색 공격이라 함은 흔히 파일 다운로드에서 잘 일어나는데요, 프로그래머의 부주의로 흔히 생기는 일입니다.

[특히 웹서버가 윈도우인경우 위험합니다.]


지금 이 자리에서 간단하게나마 설명을 하는터이니 잘 들어주세요.


먼저 경로 탐색 취약점은 이러한 소스때문에 발생됩니다.


<?php

echo $_GET[name]; //GET로 불러온 파일 이름에 대한 파일을 표시

@include "$_GET[name]"; //GET로 불러온 파일 이름에 대한 파일을 포함(참조)

?>

색을 입히니까 볼만하죠?


본 위 소스의 요약설명은


GET값으로 받아들여진 변수 name에 관한 파일이 표시되거나 파일에 포함되어 내부 파일 이름을 알수 있는건데요. 2번째 줄은 파일 내용이 안보이고 그냥 전송되어진 값만 보이는 겁니다.


3번째 줄은 값을 인클루드 함으로 인하여 파일이 그대로 보일뿐 더러 함수의 에러를 막기위해 사용되는 @ 골뱅이 표시까지 사용되고있어 에러를 무시해버립니다.


만약 이를 이용해 테스트를 하면 어떻게 되는걸까요..


실제 테스트는 지금 못하는 터라 모의적으로 진행하기로 하였습니다.


http://test.domain/name=file.php - file.php 의 내용이 공개 되었습니다.

http://test.domain/name=../../../../../../../../../../../etc/passwd - 리눅스 사용자 파일이 노출되었습니다.

원격 명령을 실행할수 있으면

http://test.domain/name=rm -rf /* 로 하드 전체를 날릴수 있습니다.


단 아파치 권한을 root로 주면 안됩니다. root로 주면 시스탬 파일까지 손대거든요.


이 같은 상황을 막으려면 간단한 소스가 필요합니다.


<?php

if ($_GET[name]=='file.php'){

include "file.php";

}

?>

형식으로 작성하시면 경로탐색 공격을 쉽게 막을수 있습니다.



아래의 손가락버튼을 눌러주시면 블로그에 매우 큰 도움이됩니다. 히히




Copyright © 이동마이의 컴퓨터 하루 All Rights Reserved.



Name(이름)
Password(비밀번호)
Homepage(홈페이지)
Secret(비밀글)