Nikto 를 활용한 Kali 취약점 스캐닝

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 Kali Linux 환경에서 강력한 오픈 소스 도구인 Nikto 를 사용하여 웹 취약점 스캐닝의 핵심을 배웁니다. 목표는 스캔을 실행하고 결과를 해석하며, 추가 분석을 위해 보고서를 저장함으로써 웹 서버의 잠재적인 보안 문제를 식별하는 방법을 이해하는 것입니다. LabEx VM 에서 제공되는 단계별 실습을 통해 Nikto 의 명령줄 인터페이스를 실제로 다루는 경험을 쌓게 됩니다. 이 실습은 초보자를 위해 설계되었으며, 통제된 컨테이너 환경에서 각 과정을 안내하여 웹 보안 평가의 기초 역량을 키울 수 있도록 돕습니다.

이 실습은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 과거 데이터에 따르면 이 실습은 중급 수준이며 완료율은 65%입니다. 학습자들로부터 94%의 긍정적인 평가를 받았습니다.

환경 설정 및 Nikto 설치

첫 번째 단계에서는 Kali Linux 컨테이너에서 작업 환경을 설정하고 웹 취약점 스캐너인 Nikto 가 설치되어 사용할 준비가 되었는지 확인합니다. 이 실습은 LabEx VM 내에서 진행되며, 터미널을 열면 자동으로 Kali Linux 컨테이너의 셸에 연결됩니다. 컨테이너를 수동으로 시작하거나 셸에 진입할 필요가 없으며, 환경은 이미 여러분을 위해 구성되어 있습니다.

먼저 설정 내용을 이해해 봅시다. LabEx VM 은 Docker 가 사전 설치된 독립적인 클라우드 호스트에서 실행되며, Kali Linux 컨테이너가 자동으로 실행되도록 설정되어 있습니다. 모든 작업은 이 컨테이너의 터미널 내부에서 이루어집니다. Nikto 는 오래된 소프트웨어나 잘못된 설정과 같은 취약점을 웹 서버에서 찾아내는 도구이며, 진행하기 전에 설치 여부를 확인해야 합니다.

먼저, 사용 가능한 소프트웨어에 대한 최신 정보를 얻기 위해 Kali Linux 컨테이너의 패키지 목록을 업데이트합니다. 터미널에서 다음 명령을 실행하세요.

apt update

이 명령은 구성된 저장소에서 최신 패키지 정보를 가져옵니다. 완료까지 잠시 시간이 걸릴 수 있으며, 패키지 목록 다운로드 진행 상황을 나타내는 출력이 표시됩니다. 샘플 출력은 다음과 같습니다.

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
Get:2 http://mirrors.cloud.aliyuncs.com/kali kali-rolling/main amd64 Packages [18.1 MB]
...
Fetched 18.5 MB in 5s (3,700 kB/s)
Reading package lists... Done

업데이트가 완료되면 컨테이너에 Nikto 가 없는 경우 설치합니다. 다음 명령을 사용하여 설치하세요.

apt install -y nikto iputils-ping

-y 플래그는 별도의 확인 절차 없이 설치를 자동으로 승인합니다. 이 과정은 잠시 시간이 소요될 수 있으며, 패키지 다운로드 및 설정 등 설치 진행 상황이 출력됩니다. 샘플 출력은 다음과 같습니다.

Reading package lists... Done
Building dependency tree... Done
...
Setting up nikto (1:2.1.5-3.1) ...

설치 후, 버전을 확인하여 Nikto 가 올바르게 설치되었는지 검증합니다. 다음 명령을 실행하세요.

nikto -Version

이 명령은 설치된 Nikto 의 버전을 표시하여 사용 준비가 되었음을 확인해 줍니다. 예상 출력은 다음과 유사해야 합니다.

Nikto 2.5.0 (LW 2.5)

Nikto 설치가 완료되었으므로 이제 웹 서버 스캔을 수행하는 다음 단계로 넘어갈 준비가 되었습니다. 이 단계를 통해 환경이 적절히 구성되었고 향후 작업을 위한 필수 도구가 준비되었음을 확인했습니다.

기본 Nikto 웹 스캔 실행

이제 Kali Linux 컨테이너에 Nikto 가 설치되었으므로 기본적인 웹 취약점 스캔을 실행하는 방법을 배웁니다. 이 단계는 이전 단계의 환경 설정을 바탕으로 하며, Nikto 를 사용하여 웹 서버의 잠재적인 보안 문제를 식별하는 방법을 소개합니다. LabEx VM 에서 터미널을 열 때 이미 Kali Linux 컨테이너 셸에 접속되어 있으므로 컨테이너를 수동으로 시작할 필요가 없습니다.

기본적인 Nikto 스캔이 무엇을 하는지 이해해 봅시다. Nikto 는 대상 웹 서버에서 오래된 소프트웨어 버전이나 악용될 수 있는 잘못된 설정과 같은 일반적인 취약점을 스캔합니다. 이 실습에서는 취약점 스캐닝 학습 및 연습을 위해 설계된 공개 테스트 서버인 testphp.vulnweb.com을 사용합니다. 이를 통해 윤리적이고 안전한 방식으로 스캔을 수행할 수 있습니다.

먼저, Nikto 를 사용하여 테스트 서버에 대한 기본 스캔을 시작합니다. 터미널에 다음 명령을 입력하세요.

nikto -h testphp.vulnweb.com

-h 옵션은 스캔할 호스트를 지정하며, 여기서는 testphp.vulnweb.com입니다. 이 스캔은 네트워크 상태와 대상 서버의 구성에 따라 완료까지 몇 분 정도 걸릴 수 있습니다. 스캔이 진행되는 동안 터미널에 진행 상황이 표시됩니다. 샘플 출력은 다음과 같습니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Start Time:         2025-04-21 07:29:12 (GMT0)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ /: Retrieved x-powered-by header: PHP/5.6.40-38+ubuntu20.04.1+deb.sury.org+1.
...
---------------------------------------------------------------------------
+ 1 host(s) tested

niktotestphp.vulnweb.com을 스캔할 때 오류 메시지가 나타날 수 있습니다. 이는 예상된 결과이므로 주요 정보에 집중해 주시기 바랍니다.

이 출력은 대상의 IP 주소, 호스트 이름, 포트와 같은 초기 정보를 제공합니다. 또한 누락된 보안 헤더나 오래된 구성 요소와 같은 잠재적인 문제 목록도 보여줍니다. 출력이 너무 상세하더라도 걱정하지 마세요. 지금은 스캔을 실행하고 과정을 관찰하는 것이 핵심입니다. 다음 단계에서 이러한 결과를 더 자세히 분석할 것입니다.

스캔이 시작되지 않거나 출력이 나타나지 않으면 LabEx VM 내의 인터넷 연결이 활성화되어 있는지 확인하세요. 다음 명령을 실행하여 대상 서버와의 연결을 테스트할 수 있습니다.

ping -c 4 testphp.vulnweb.com

이 명령은 대상 서버에 몇 개의 패킷을 보내 도달 가능한지 확인합니다. 응답이 오면 서버에 접속할 수 있는 상태이며, 응답이 없으면 스캔을 다시 시도하거나 LabEx VM 의 네트워크 설정을 확인하세요.

PING testphp.vulnweb.com (44.228.249.3) 56(84) bytes of data.
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=1 ttl=55 time=21.4 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=2 ttl=55 time=21.7 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=3 ttl=55 time=21.5 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=4 ttl=55 time=21.5 ms

--- testphp.vulnweb.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 21.435/21.523/21.699/0.103 ms

이 단계를 통해 기본적인 Nikto 스캔 실행 방법을 익혔으며, 이는 다음 단계에서 진행할 더 구체적인 스캔 및 분석의 토대가 됩니다. 여러분은 Kali Linux 컨테이너 터미널에서 직접 스캔 명령을 실행하고 초기 결과를 관찰했습니다.

정밀 스캐닝을 위한 Nikto 튜닝 옵션 활용

이전 단계에서 수행한 기본 스캔을 바탕으로, 이제 Nikto 의 튜닝 옵션을 사용하여 더 정밀한 스캔을 수행하는 방법을 배웁니다. Nikto 를 사용하면 특정 유형의 취약점에 집중하여 스캔할 수 있으며, 이는 특정 문제를 찾거나 스캔 시간을 단축하고 싶을 때 유용합니다.

이 단계에서는 Kali Linux 컨테이너 환경에서 Nikto 의 튜닝 기능을 사용하여 스캔을 맞춤 설정하는 방법을 알아봅니다.

먼저 Nikto 에서 사용 가능한 튜닝 옵션이 무엇인지 이해해 봅시다. 다음 명령을 사용하여 사용 가능한 전체 튜닝 옵션 목록을 볼 수 있습니다.

nikto -h testphp.vulnweb.com -Display V

-Display V 옵션은 튜닝 정보를 포함한 상세 출력을 보여줍니다. 출력 내용에서 숫자와 문자로 표시된 다양한 테스트 카테고리를 확인할 수 있습니다.

이제 일반적인 파일 관련 취약점에 집중하여 정밀 스캔을 실행해 보겠습니다. 다음 명령을 실행하세요.

nikto -h testphp.vulnweb.com -Tuning 2

-Tuning 2 옵션은 특히 파일 노출 (File Disclosure) 취약점을 테스트합니다. 이 스캔은 완료까지 몇 분 정도 걸릴 수 있으며, 터미널에 다음과 유사한 출력이 표시됩니다.

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ Scanning for File Upload vulnerabilities...
+ Multiple file upload fields found on login.php
...

여러 튜닝 옵션을 조합할 수도 있습니다. 예를 들어, 파일 노출 (2) 과 잘못된 설정 (9) 취약점을 모두 스캔하려면 다음과 같이 입력합니다.

nikto -h testphp.vulnweb.com -Tuning 2,9

이 조합 스캔은 두 카테고리의 문제를 모두 확인하여, 전체 스캔을 실행하지 않고도 특정 취약점 유형에 대해 더 포괄적인 시각을 제공합니다.

스캔 결과가 나오지 않거나 오류가 발생하면 다음 명령으로 연결 상태를 확인하여 인터넷이 활성화되어 있는지 확인하세요.

ping -c 4 testphp.vulnweb.com

이 단계를 통해 Nikto 의 튜닝 옵션을 사용하여 특정 보안 관심사에 집중하고 더 정밀한 스캔을 수행하는 방법을 이해했습니다. 다음 단계에서는 취약점 스캐닝 능력을 향상시키는 추가적인 Nikto 기능들을 살펴보겠습니다.

출력 형식 맞춤 설정 및 스캔 결과 저장

Nikto 를 사용한 정밀 스캔 방법을 익힌 후, 이제 문서화 및 분석을 위해 출력 형식을 맞춤 설정하고 스캔 결과를 저장하는 방법을 살펴봅니다. 발견된 사항을 적절히 문서화하는 것은 보안 평가의 중요한 측면이며, Nikto 는 스캔 결과를 형식화하고 저장할 수 있는 여러 옵션을 제공합니다.

이 단계에서는 Kali Linux 컨테이너 터미널에서 직접 다양한 형식의 보고서를 생성하는 방법을 배웁니다.

먼저 Nikto 가 제공하는 다양한 출력 형식 옵션을 살펴보겠습니다. 가장 일반적인 형식은 다음과 같습니다.

  1. Text (기본값): 일반 텍스트 출력
  2. HTML: 서식이 지정된 HTML 보고서
  3. CSV: 스프레드시트로 가져오기 위한 쉼표로 구분된 값
  4. XML: 자동화된 처리를 위한 구조화된 XML 데이터

스캔 결과를 기본 텍스트 형식으로 저장하려면 다음을 실행하세요.

nikto -h testphp.vulnweb.com -o /root/nikto_text_report.txt

-o 옵션은 출력 파일 경로를 지정합니다. 스캔이 완료된 후, 파일이 생성되었는지 내용을 확인하여 검증합니다.

cat /root/nikto_text_report.txt

더 읽기 쉽고 구조화된 형식을 제공하는 HTML 보고서를 생성하려면 다음을 사용하세요.

nikto -h testphp.vulnweb.com -Format htm -o /root/nikto_report.html

-Format htm 옵션은 Nikto 에게 출력을 HTML 로 형식화하도록 지시합니다. 터미널에서 HTML 파일을 직접 볼 수는 없지만, 파일이 생성되었는지는 확인할 수 있습니다.

ls -l /root/nikto_report.html

다른 도구나 스프레드시트로 가져와야 하는 데이터의 경우 CSV 형식 보고서를 생성할 수 있습니다.

nikto -h testphp.vulnweb.com -Format csv -o /root/nikto_report.csv

스캔이 완료되면 CSV 파일을 확인해 보세요.

head /root/nikto_report.csv

이 명령은 CSV 파일의 처음 몇 줄을 표시하여 데이터가 어떻게 구조화되어 있는지 보여줍니다.

이러한 각 출력 형식은 서로 다른 용도로 사용됩니다.

  • 텍스트 보고서는 터미널에서 읽기 쉽습니다.
  • HTML 보고서는 시각적으로 잘 정리되어 있어 팀과 공유하기 좋습니다.
  • CSV 및 XML 형식은 다른 보안 도구나 데이터베이스로 가져오기에 매우 적합합니다.

출력 형식을 맞춤 설정하는 방법을 배움으로써, 여러분은 발견한 내용을 효과적으로 문서화하고 전달하는 능력을 갖추게 되었습니다.

심층 스캐닝을 위한 Nikto 고급 옵션

마지막 단계에서는 더 깊고 포괄적인 스캐닝을 가능하게 하는 몇 가지 고급 Nikto 옵션을 살펴봅니다. 이러한 기능은 숨겨진 취약점을 찾아내고 잠재적인 보안 문제에 대해 더 많은 맥락을 제공하는 데 도움이 됩니다. 이는 이전 단계의 지식을 바탕으로 Kali Linux 컨테이너 환경 내에서 Nikto 의 고급 기능을 활용하는 데 중점을 둡니다.

Nikto 에서 가장 유용한 고급 옵션 몇 가지를 살펴보겠습니다.

먼저, 단순한 침입 탐지 시스템 (IDS) 을 우회하기 위해 -evasion 기법을 사용해 보겠습니다. 이는 보안 제어 항목을 테스트할 때 유용할 수 있습니다.

nikto -h testphp.vulnweb.com -evasion 1

-evasion 1 옵션은 무작위 대소문자를 사용하여 URL 을 인코딩합니다. 다음과 유사한 출력이 표시될 수 있습니다.

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Evasion technique:  Random URI encoding (non-UTF8)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
...

다음으로, 특정 포트와 프로토콜을 지정하여 스캔해 보겠습니다. 지금까지는 기본 HTTP 포트인 80 번을 스캔했지만, 다른 포트를 지정할 수도 있습니다.

nikto -h testphp.vulnweb.com -port 443 -ssl

-port 443 옵션은 443 번 포트를 대상으로 하며, -ssl은 Nikto 에게 HTTPS 프로토콜을 사용하도록 지시합니다. 이 테스트 서버의 경우 HTTPS 가 활성화되어 있지 않아 결과가 나오지 않을 수 있지만, 보안 웹 서비스를 스캔하는 방법을 잘 보여줍니다.

인증이 필요한 사이트의 경우, Nikto 는 기본 HTTP 인증을 처리하는 옵션을 제공합니다.

nikto -h testphp.vulnweb.com -id admin:password

-id 옵션을 사용하면 사용자이름:비밀번호 형식으로 자격 증명을 지정할 수 있습니다. 이 테스트 서버에서는 이 자격 증명이 작동하지 않겠지만, 인증된 스캔을 구성하는 방법을 보여줍니다.

또한 스캔의 상세 수준 (verbosity) 을 높여 더 자세한 정보를 얻을 수 있습니다.

nikto -h testphp.vulnweb.com -Display V -o /root/nikto_verbose_report.txt

-Display V 옵션은 수행된 각 테스트에 대한 더 많은 세부 정보를 보여주는 상세 출력을 제공합니다. 이를 -o를 사용하여 파일로 저장하면 스캔에 대한 포괄적인 문서가 생성됩니다.

마지막으로, 포괄적인 스캔을 위해 여러 옵션을 조합해 보겠습니다.

nikto -h testphp.vulnweb.com -Tuning x -no404 -Format htm -o /root/final_report.html

이 명령의 의미는 다음과 같습니다.

  • -Tuning x: DoS 취약점을 제외한 모든 항목을 테스트합니다.
  • -no404: 404 오류를 보고하지 않음으로써 오탐 (False Positive) 을 줄입니다.
  • -Format htm: 보고서를 HTML 형식으로 저장합니다.
  • -o: 출력 파일을 지정합니다.

이 단계를 통해 웹 취약점 스캐닝 능력을 확장해 주는 여러 고급 Nikto 옵션을 익혔습니다. 이러한 다양한 기법을 조합함으로써 철저한 보안 평가를 수행하고 특정 요구 사항에 맞는 포괄적인 보고서를 생성할 수 있습니다.

요약

이 실습에서는 Kali Linux 환경에서 강력한 웹 취약점 스캐너인 Nikto 를 사용하는 방법을 배웠습니다. 환경 설정과 Nikto 설치부터 시작하여 점차 정교한 스캐닝 기법으로 나아갔습니다.

기본 스캔을 통해 테스트 서버의 일반적인 취약점을 식별하는 것으로 시작하여, Nikto 의 튜닝 옵션을 사용해 특정 유형의 취약점에 집중하는 정밀 스캔 방법을 익혔습니다. 또한 발견한 내용을 효과적으로 문서화하고 전달하기 위해 텍스트, HTML, CSV 를 포함한 다양한 출력 형식을 살펴보았습니다.

마지막으로 우회 기법, 포트 및 프로토콜 지정, 인증 처리, 상세 출력 등 심층 스캐닝을 위한 고급 옵션들을 발견했습니다. 이러한 기술은 교육 목적이나 전문적인 보안 테스트를 위한 웹 보안 평가를 수행하는 데 있어 견고한 토대가 됩니다.

이 실습을 통해 얻은 실무 경험은 Nikto 의 명령줄 인터페이스에 대한 실제적인 지식과 특정 요구 사항에 따라 스캔을 맞춤 설정할 수 있는 능력을 제공합니다. 이는 웹 보안 및 취약점 평가에 관심이 있는 모든 이에게 필수적인 기술입니다.