Nikto 를 사용한 기본 웹 서버 스캔 실행

Kali LinuxBeginner
지금 연습하기

소개

Nikto 는 웹 서버를 대상으로 포괄적인 테스트를 수행하는 오픈 소스 웹 서버 스캐너입니다. 6,700 개 이상의 잠재적으로 위험한 파일/프로그램, 1,250 개 이상의 서버에 대한 최신 버전 확인, 270 개 이상의 서버에 대한 버전별 문제 등을 테스트합니다. 또한 여러 인덱스 파일의 존재 및 HTTP 서버 옵션과 같은 서버 구성 항목도 확인합니다.

이 실습에서는 Nikto 를 사용하여 기본 스캔을 수행하는 기본 사항을 배우게 됩니다. 먼저 대상 역할을 할 간단한 로컬 웹 서버를 설정한 다음, Nikto 를 사용하여 스캔하고 결과를 분석할 것입니다.

대상 IP 주소 또는 호스트 이름 식별

이 단계에서는 대상 웹 서버의 주소를 식별하고 확인합니다. 스캔을 실행하기 전에 대상의 IP 주소 또는 호스트 이름을 알아야 합니다. 이 실습에서는 설정 스크립트가 로컬 머신에서 실행되는 간단한 웹 서버를 이미 시작했습니다.

네트워크 맥락에서 자신의 머신은 호스트 이름 localhost 또는 IP 주소 127.0.0.1로 참조될 수 있습니다. 이 특별한 주소는 "루프백 (loopback)" 주소로, 항상 로컬 머신으로 다시 가리킵니다.

웹 서버가 실행 중이고 접근 가능한지 확인해 보겠습니다. curl 명령을 사용하여 로컬 서버로 요청을 보낼 수 있습니다. 서버는 포트 8000에서 실행 중입니다.

터미널에서 다음 명령을 실행하십시오.

curl http://localhost:8000

간단한 웹 페이지의 HTML 콘텐츠가 표시되어야 하며, 이는 서버가 활성 상태이며 스캔 준비가 되었음을 확인합니다.

<h1>Welcome to the Test Server</h1>

이제 localhost:8000에서 대상을 확인했으므로 다음 단계로 진행할 수 있습니다.

-h 플래그를 사용하여 기본 스캔 명령 구성

이 단계에서는 기본 Nikto 스캔 명령을 구성하는 방법을 배웁니다. Nikto 에는 많은 옵션이 있지만 가장 기본적인 것은 대상 호스트를 지정하는 것입니다.

-h 또는 -host 플래그는 Nikto 에게 어떤 서버를 스캔할지 알려주는 데 사용됩니다. 이 옵션 및 기타 옵션에 익숙해지려면 Nikto 의 도움말 메뉴를 볼 수 있습니다.

도움말 정보를 표시하려면 다음 명령을 실행하십시오.

nikto -Help

출력은 상당히 길며 사용 가능한 모든 옵션을 나열합니다. 스크롤하거나 터미널의 검색 기능을 사용하여 -h 옵션을 찾으십시오. 다음과 유사한 설명을 볼 수 있습니다.

...
-h, -host       대상 호스트/IP/SSL-이름
...

저희 서버는 표준 HTTP 포트 (80) 에서 실행되지 않으므로 포트 번호도 지정해야 합니다. 이는 -p 또는 -port 플래그를 사용하여 수행할 수 있습니다.

이를 바탕으로 포트 8000에서 로컬 서버를 스캔하는 명령은 nikto -h localhost -p 8000이 됩니다. 다음 단계에서 이 명령을 실행할 것입니다.

대상 서버에 대한 스캔 실행

이 단계에서는 구성한 명령을 사용하여 Nikto 스캔을 실행합니다. 이렇게 하면 스캔 프로세스가 시작되며, Nikto 는 대상 서버에 일련의 요청을 보내 잠재적인 문제를 탐색합니다.

이제 로컬 웹 서버에 대한 스캔을 실행하십시오.

nikto -h localhost -p 8000

명령을 실행하면 Nikto 가 스캔을 시작합니다. 먼저 대상에 대한 몇 가지 기본 정보를 표시한 다음 테스트 실행을 시작합니다. 프로세스가 완료되는 데 몇 분 정도 걸릴 수 있습니다. 결과가 실시간으로 터미널에 직접 출력되는 것을 볼 수 있습니다.

스캔 중 실시간 출력 관찰

이 단계에서는 Nikto 스캔에서 생성된 출력을 살펴봅니다. 스캔이 실행되는 동안 Nikto 는 발견 사항을 보고합니다. 각 발견 사항은 일반적으로 더하기 기호 (+) 로 접두사가 붙습니다.

이전 단계의 출력은 다음과 유사해야 합니다. 버전 번호와 시간은 다를 수 있습니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ 대상 IP:          127.0.0.1
+ 대상 호스트 이름:    localhost
+ 대상 포트:        8000
+ 시작 시간:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ 서버: SimpleHTTP/0.6 Python/3.10.12
+ 클릭재킹 방지 X-Frame-Options 헤더가 없습니다.
+ X-XSS-Protection 헤더가 정의되지 않았습니다. 이 헤더는 사용자 에이전트에게 일부 형태의 XSS로부터 보호하도록 힌트를 줄 수 있습니다.
+ X-Content-Type-Options 헤더가 설정되지 않았습니다. 이는 사용자 에이전트가 MIME 유형과 다른 방식으로 사이트 콘텐츠를 렌더링하도록 허용할 수 있습니다.
+ CGI 디렉토리를 찾을 수 없습니다 ('-C all'을 사용하여 가능한 모든 디렉토리를 강제로 확인하십시오).
+ 허용된 HTTP 메서드: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE 메서드가 활성화되어 있어 호스트가 XST에 취약할 수 있습니다.
...
+ 테스트된 호스트 수: 1

잠시 시간을 내어 출력을 읽어보십시오. Nikto 가 서버 소프트웨어를 식별하고, 중요한 보안 헤더 (예: X-Frame-Options) 를 확인하고, 허용된 HTTP 메서드를 나열하고, 잠재적인 취약점을 보고하는 것을 볼 수 있습니다. 이 정보는 서버의 보안 상태를 이해하는 데 중요합니다.

서버 배너 및 버전 정보 식별

이 단계에서는 Nikto 가 제공하는 가장 중요한 정보 중 하나인 서버 배너에 초점을 맞출 것입니다. 서버 배너는 웹 서버가 응답 헤더에서 보내는 텍스트 문자열로, 일반적으로 서버 소프트웨어와 해당 버전을 식별합니다.

공격자는 이 정보를 사용하여 특정 소프트웨어 버전과 관련된 알려진 취약점을 찾습니다. 이전 단계의 스캔 결과에서 + Server:로 시작하는 줄을 볼 수 있어야 합니다.

+ Server: SimpleHTTP/0.6 Python/3.10.12

이 줄은 웹 서버가 Python/3.10.12에서 실행되는 SimpleHTTP/0.6임을 알려줍니다.

더 큰 출력에서 특정 정보를 분리하는 연습을 하려면 스캔을 다시 실행하고 grep 명령을 사용하여 결과를 필터링하여 "Server"를 포함하는 줄만 표시할 수 있습니다.

다음 명령을 실행하십시오.

nikto -h localhost -p 8000 | grep Server

이 명령은 Nikto 의 출력을 grep으로 파이프하고, grep은 "Server"라는 단어를 포함하는 줄만 필터링하여 표시합니다. 이는 대규모 로그 파일이나 명령 출력을 구문 분석하는 데 매우 유용한 기술입니다. 출력은 서버를 식별하는 단일 줄이어야 합니다.

+ Server: SimpleHTTP/0.6 Python/3.10.12

요약

이 실습에서는 Nikto 를 사용하여 기본적인 웹 서버 스캔을 성공적으로 수행했습니다. 대상 식별 방법, -h-p 플래그를 사용한 기본 스캔 명령 구성 및 실행 방법을 배웠습니다. 또한 실시간 출력을 관찰하고 grep과 같은 도구를 사용하여 서버 배너와 같은 특정 정보를 분리하는 연습을 했습니다.

이것은 Nikto 가 할 수 있는 일의 시작에 불과합니다. SSL 검사, 취약점 데이터베이스 조회 및 다양한 출력 형식을 포함하여 보다 표적화되고 심층적인 스캔을 위한 방대한 옵션을 제공합니다. 이제 이러한 고급 기능을 탐색하고 웹 보안 테스트 기술을 향상시킬 수 있는 기초 지식을 갖추게 되었습니다.