Nikto 로 특정 가상 호스트 스캔하기

Kali LinuxBeginner
지금 연습하기

소개

Nikto 는 인기 있는 오픈 소스 웹 서버 스캐너로, 6,700 개 이상의 잠재적으로 위험한 파일/프로그램, 1,250 개 이상의 서버의 오래된 버전 확인, 270 개 이상의 서버에 대한 버전별 문제 등 다양한 항목에 대해 웹 서버를 포괄적으로 테스트합니다.

일반적인 웹 서버 구성은 가상 호스팅으로, 하나의 IP 주소를 가진 단일 서버가 여러 웹사이트 (예: site1.example.comsite2.example.com) 를 호스팅합니다. 서버의 IP 주소를 직접 스캔할 때 Nikto 와 같은 스캐너는 서버에 구성된 기본 웹사이트만 테스트하고 다른 사이트는 완전히 놓칠 수 있습니다.

이 실습에서는 Nikto 의 -vhost 옵션을 사용하여 서버의 가상 호스트 중 하나를 구체적으로 타겟팅하는 방법을 배우고, 스캔이 정확하고 집중되도록 할 것입니다.

하나의 IP 에서 여러 웹사이트를 호스팅하는 서버 식별

이 단계에서는 환경 내 웹 서버가 동일한 IP 주소 (127.0.0.1) 에서 두 개의 다른 웹사이트를 호스팅하고 있는지 확인할 것입니다. curl 명령을 사용하여 다른 Host 헤더를 가진 HTTP 요청을 보냄으로써 이를 수행할 수 있습니다. Host 헤더는 클라이언트가 액세스하려는 웹사이트를 웹 서버에 알려줍니다.

먼저 site1.labex.io로 요청을 보내겠습니다. --header "Host: site1.labex.io" 옵션은 curl에게 지정된 호스트 헤더를 보내도록 지시합니다.

curl --header "Host: site1.labex.io" http://127.0.0.1

첫 번째 사이트의 HTML 콘텐츠가 표시되어야 합니다.

<html><body><h1>Welcome to Site 1</h1></body></html>

다음으로, Host 헤더를 변경하여 site2.labex.io로 요청을 보내겠습니다.

curl --header "Host: site2.labex.io" http://127.0.0.1

이번에는 두 번째 사이트의 콘텐츠가 표시됩니다.

<html><body><h1>This is Site 2</h1><p>This site has a test.txt file.</p></body></html>

이는 127.0.0.1의 서버가 호스트 이름을 기반으로 다른 콘텐츠를 제공하고 있음을 확인시켜 주며, 이것이 바로 가상 호스팅의 정의입니다.

특정 타겟 가상 호스트의 호스트 이름 찾기

이 단계에서는 로컬 서버에 구성된 호스트 이름을 확인할 것입니다. 실제 시나리오에서는 DNS 열거 (enumeration) 또는 SSL 인증서 분석과 같은 정찰 기법을 사용하여 가상 호스트를 찾을 것입니다. 이 실습에서는 호스트 이름이 /etc/hosts 파일에 미리 구성되어 있습니다. 이 파일은 운영 체제에서 호스트 이름을 IP 주소에 매핑하는 데 사용됩니다.

cat 명령을 사용하여 /etc/hosts 파일의 내용을 살펴보고 매핑을 확인해 보겠습니다.

cat /etc/hosts

출력에는 표준 localhost 매핑과 함께 가상 호스트에 대해 추가한 두 개의 사용자 지정 항목이 표시됩니다.

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 site1.labex.io
127.0.0.1 site2.labex.io

이 출력에서 site1.labex.iosite2.labex.io가 타겟 스캔에 사용할 수 있는 호스트 이름임을 확인할 수 있습니다. 다음 단계에서는 site2.labex.io를 타겟으로 할 것입니다.

-vhost 옵션을 사용하여 타겟 호스트 이름 지정하기

이 단계에서는 특정 가상 호스트를 스캔하는 데 사용되는 Nikto 옵션에 대해 알아보겠습니다. 기본적으로 nikto -h 127.0.0.1은 구성된 첫 번째 가상 호스트 (site1.labex.io) 를 스캔합니다. Nikto 에게 다른 가상 호스트를 스캔하도록 지시하려면 -vhost (또는 -host+) 옵션을 사용해야 합니다.

이 옵션은 Nikto 가 모든 HTTP 요청의 Host 헤더에 제공된 호스트 이름을 사용하도록 지시하여 웹 서버가 요청을 올바른 웹사이트로 라우팅하도록 합니다.

구문은 다음과 같습니다: nikto -h <IP_ADDRESS> -vhost <HOSTNAME>

전체 스캔을 실행하지 않고 간단한 테스트를 해보겠습니다. -Display V 옵션을 사용하여 상세 출력을 표시하면 스캔에 대한 유효한 구성을 확인할 수 있습니다. site2.labex.io를 타겟으로 하겠습니다.

nikto -h 127.0.0.1 -vhost site2.labex.io -Display V

출력에는 스캔 구성에 대한 세부 정보가 표시됩니다. Host 헤더 값을 확인하여 올바르게 설정되었는지 확인하십시오.

...
---------------------------------------------------------------------------
- Nikto 2.x
---------------------------------------------------------------------------
...
- Scan Options:
    ...
    Host -> 127.0.0.1
    ...
    VHost -> site2.labex.io
...
- Headers:
    ...
    Host: site2.labex.io
    ...
---------------------------------------------------------------------------
+ 1 host(s) to test

출력에서 Nikto 가 요청에 Host: site2.labex.io를 사용할 것임을 명확하게 보여주며, 이는 우리가 원하는 것입니다.

vhost 플래그를 사용하여 서버 IP 에 대한 스캔 실행하기

이제 -vhost 옵션이 어떻게 작동하는지 이해했으므로, 타겟 가상 호스트인 site2.labex.io에 대한 전체 스캔을 실행할 차례입니다.

터미널에서 다음 명령을 실행하십시오. Nikto 가 다양한 테스트를 실행하므로 스캔이 완료되는 데 몇 분 정도 걸립니다.

nikto -h 127.0.0.1 -vhost site2.labex.io

스캔이 시작된 후 다음과 유사한 출력이 표시됩니다. Target Hostsite2.labex.io로 표시되어 올바른 가상 호스트를 스캔하고 있음을 확인할 수 있습니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    site2.labex.io
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ /test.txt: A text file was found.
+ 7 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           ...
+ 1 host(s) tested

+ /test.txt: A text file was found. 줄에 주목하십시오. 이 파일은 site2.labex.io에만 존재하며, 이는 스캔이 올바르게 타겟팅되었음을 더욱 확인시켜 줍니다.

결과가 타겟 vhost 에 특정한지 확인하기

마지막 단계에서는 결과를 비교하기 위해 이번에는 -vhost 플래그를 사용하지 않고 스캔을 다시 실행하여 차이점을 보여드리겠습니다. 이를 통해 가상 호스팅 환경에서 특정 사이트를 정확하게 스캔하는 데 -vhost 옵션이 필수적임을 증명할 것입니다.

서버 IP 주소에 대해 표준 Nikto 스캔을 실행합니다.

nikto -h 127.0.0.1

이 새로운 스캔의 출력을 관찰하십시오.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
...
(other findings)
...
+ End Time:           ...
+ 1 host(s) tested

이 출력을 이전 단계의 스캔과 비교하십시오. 두 가지 주요 차이점을 발견할 수 있습니다.

  1. Target Hostname이 이제 서버의 기본값인 localhost (또는 127.0.0.1) 로 변경되었습니다.
  2. + /test.txt: A text file was found.라는 결과가 누락되었습니다. 이는 test.txt 파일이 기본 사이트 (site1.labex.io) 에 존재하지 않으며, 이 스캔이 site2.labex.io를 타겟으로 하지 않았기 때문입니다.

이 비교를 통해 -vhost 없이 스캔하면 site2.labex.io에 특정한 취약점 및 정보를 놓칠 수 있음을 명확하게 알 수 있습니다.

요약

이 실습에서는 웹 서버 취약점 스캔에 대한 중요한 기술을 배웠습니다. 가상 호스팅이 무엇인지, 그리고 보안 평가 중에 왜 특별한 처리가 필요한지에 대해 이해하게 되었습니다.

다음 내용을 실습했습니다.

  • 사용자 정의 Host 헤더와 함께 curl을 사용하여 동일한 IP 에 있는 다른 웹사이트를 수동으로 검사했습니다.
  • Nikto 의 -vhost 옵션의 목적을 파악했습니다.
  • nikto -h <IP> -vhost <HOSTNAME>를 사용하여 특정 가상 호스트에 대한 타겟 스캔을 실행했습니다.
  • 타겟 스캔과 기본 스캔의 결과를 비교하여 이 기술의 중요성을 이해했습니다.

이 기술은 모든 침투 테스터 또는 보안 분석가가 서버의 모든 웹 애플리케이션을 철저히 테스트하도록 보장하는 데 필수적이며, 기본 애플리케이션만 테스트하는 것이 아닙니다.