파일 인클루젼 공격은 주로 php 페이지에서 발생합니다
파일 인크로젼 공격은 두 가지로 분류됩니다.
1. 로컬 파일 인클루젼(LFI) - 이미 시스템에 존재하는 파일을 인클루드
2. 리모트 파일 인클루젼(RFI) - 외부에 있는 파일을 원격으로 인클루드
실습 환경을 DVWA를 활용해 보겠습니다.
파일 인클루젼 공격은 요청하는 페이지의 경로를 변경해 줌으로써 정보를 탈취하는 방식입니다.
www.tistory.com/page=incloud.php
저런 식으로 tistory 페이지에서 incloud.php라는 페이지를 호출하는 상황이라고 가정합니다.
외부에 있는 파일을 원격으로 인클루드 하는 경우라면
www.tistory.com/page=http://127.x.x.x/../../change.php
다음과 같은 형태로 외부로부터 요청된 php 페이지를 전달하는 것입니다.
내부에 있는 파일을 원격으로 인클루드 한다면
www.tistory.com/../../../../../../../../../etc/passwd/
위와 같은 방식으로 최 상위 경로로 이동하여 원하는 정보를 탈취할 수 있습니다.
DVWA에서 파일 인클루젼 공격을 막기 위해 어떤 방법을 사용했을까요?
<?php
$file = $_GET[ 'page' ];
$file = str_replace( array( "http://", "https://), "",$file);
$file = str_replace( array( "../", "..\""), "", $file);
?>
처음 단계에서는
단순히 http:// , https:// 와 같은 부분을 "" 삭재하고 읽거나, 디렉터리의 상위로 이동할 수 있는 ../ , ..\ 와같은
명령이 들어오면 공백 처리로 막으려는 모습을 보여줍니다.
그렇다면?
htthttp://p://www.tistory.com/~~
http:// 속 http://를 넣어준다면??
속에 있는 http://를 삭재시키면서 http://www.tistory.com/~~ 항목이 그대로 전달되게 됩니다.
이와 같은 경우는 한 번만 처리를 해주기에 이러한 취약점이 발생하였습니다.
보안 레벨을 올려서 파일 인클로젼 공격을 막기 위한 코드를 살펴봅시다
<?php
$file = $_GET['page'];
if(!fnmatch("file*", $file) && $file != "include.php")
echo "ERROR: File not found!";
exit;
}
?>
이번에는
입력값 검증 방식이 달라진 것을 확인할 수 있습니다.
fnmatch를 이용하여 뒤에 있는 파일 이름과 매치가 안된다면 에러를 출력하는 방식이네요
하지만
이 코드의 문제점은 파일 이름에서 살펴볼 수 있습니다.
예제에서 제공하는 php 페이지는 include.php , file1,php , file2.php , file3.php 등 4가지의 페이를 제공합니다.
그럼 file4.php를 입력하면 어떻게 될까요??
숨겨진 파일이라고 해서 file4.php에 일반 사용자는 접근할 수 없는 숨겨진 페이지가 나오게 됩니다.
이처럼
파일명을 file*.php로 file 뒤에 올 수 있는 숫자를 정확히 명시하지 않았기 때문에 이러한 문제가 생기는 것을 알 수 있습니다.
파일 인클루젼 공격을 대응하기 위해서는 불필요한 정보를 최소화하고 정확히 명시함으로써 파일 인클루젼 공격을 대응할 수 있습니다.
'Security' 카테고리의 다른 글
[Kali Linux] 설치 파일을 위변조 후 백신을 우회하여 권한 탈취 (0) | 2021.05.30 |
---|---|
[Kali Linux] 설치 파일을 위변조하여 사용자 권한 탈취 (Reverse Shell) (0) | 2021.05.21 |
[Kail Linux] Captcha에 대해 알아보기 (0) | 2020.02.07 |
[Kail Linux] Command Injection 알아보기 (커맨드인젝션) (0) | 2020.02.03 |
[Kail Linux] Brute force 알아보기 (0) | 2020.02.03 |
댓글