Nikto 를 이용한 웹 서버 스캔

사이버 보안Beginner
지금 연습하기

소개

Nikto 를 이용한 웹 서버 스캔 실습에 오신 것을 환영합니다.

Nikto 는 널리 사용되는 오픈 소스 웹 서버 취약점 스캐너입니다. 이 도구는 6,700 개 이상의 잠재적으로 위험한 파일 및 프로그램, 1,250 개 이상의 서버 버전에 대한 오래된 구성 요소 확인, 버전별 문제 식별 등 웹 서버에 대한 포괄적인 테스트를 수행합니다. Nikto 는 은밀하게 작동하도록 설계되지 않았으며 (상당히 "시끄럽고" 침입 탐지 시스템 (IDS) 에 쉽게 감지됨), 기본 보안 감사를 수행하는 데 매우 빠르고 효과적입니다.

Nikto 는 빠른 너비 우선 (breadth-first) 감사 도구로 이해하는 것이 가장 좋습니다. 웹 서버의 명백한 문제를 빠르게 식별하는 데 도움을 주지만, 신중한 수동 검증을 대체할 수는 없습니다. 그 소란스러움은 이러한 광범위한 탐색을 위한 절충안입니다.

이 실습에서는 Nikto 를 사용하여 로컬 웹 서버를 스캔하고, 특정 취약점에 집중하도록 스캔을 조정하며, 결과를 구조화된 보고서로 저장하고, 발견된 내용을 분석하여 서버 보안을 개선하는 방법을 배웁니다.

기본 Nikto 스캔 실행

이 단계에서는 Nikto 를 사용하여 대상 웹 서버에 대한 기본적인 취약점 스캔을 수행하는 방법을 배웁니다.

이번 실습을 위해 로컬 Apache 웹 서버가 이미 설치되어 실행 중입니다. 이 서버가 우리의 대상이 됩니다. Nikto 는 명령줄을 통해 작동하며, 가장 기본적인 사용법은 -h (host) 플래그 뒤에 대상 IP 주소나 도메인 이름을 입력하는 것입니다.

로컬 웹 서버에 대한 기본 스캔을 시작하려면 터미널에서 다음 명령을 실행하세요:

nikto -h http://localhost

이 단계의 목표는 모든 보고된 항목에 대한 익스플로잇 가능성을 증명하는 것이 아니라, 눈에 보이는 약점과 설정 오류의 기준선을 설정하는 것입니다.

명령을 실행하면 Nikto 가 웹 서버를 탐색하기 시작합니다. Nikto 가 정보를 발견함에 따라 화면에 출력이 나타나는 것을 볼 수 있습니다.

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:00:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined.
+ The X-Content-Type-Options header is not set.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 8000 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2026-10-25 10:00:15 (GMT0) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

출력 결과는 풍부한 정보를 제공합니다. 서버 소프트웨어 버전 (Apache/2.4.52) 을 식별하고, 누락된 보안 헤더 (X-Frame-Options 등) 를 지적하며, /admin.txt 및 /info.php와 같이 서버에 남아 있는 잠재적으로 민감한 파일을 강조합니다.

오탐지 무시 (튜닝)

이 단계에서는 Nikto 스캔을 튜닝하는 방법을 배웁니다.

Nikto 는 수천 가지의 잠재적 문제를 확인하기 때문에 기본 스캔은 때때로 시간이 오래 걸리고 많은 "노이즈"나 오탐지 (false positives) 를 생성할 수 있습니다. 스캔을 더 빠르고 집중적으로 만들기 위해 Nikto 는 -Tuning 플래그를 제공합니다.

이는 스캐너 출력의 품질이 범위에 의해 결정된다는 점을 상기시켜 줍니다. 테스트 범주를 좁히면 발견된 결과의 유용성이 향상되는 경우가 많습니다.

-Tuning 플래그를 사용하면 실행할 테스트 범주를 정확하게 지정할 수 있습니다. 각 범주는 숫자나 문자로 표시됩니다. 예:

  • 1 - 흥미로운 파일 / 로그에서 발견됨
  • 2 - 설정 오류 / 기본 파일
  • 3 - 정보 노출
  • 4 - 인젝션 (XSS/스크립트/HTML)
  • 9 - SQL 인젝션

설정 오류 (2) 와 정보 노출 (3) 만 확인하려면 이 숫자들을 조합할 수 있습니다.

다음 명령을 실행하여 설정 오류와 정보 노출만 확인하는 튜닝된 스캔을 수행하세요:

nikto -h http://localhost -Tuning 23

SQL 인젝션이나 서비스 거부 (DoS) 확인과 같은 수백 개의 관련 없는 테스트를 건너뛰기 때문에 이 스캔이 기본 스캔보다 훨씬 빠르게 완료되는 것을 확인할 수 있습니다.

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:05:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 1500 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2026-10-25 10:05:03 (GMT0) (3 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

-Tuning 플래그를 사용하면 특정 감사 요구 사항에 맞게 Nikto 를 조정하여 시간을 절약하고 보고서의 복잡성을 줄일 수 있습니다.

보고서로 출력 저장

이 단계에서는 Nikto 스캔 결과를 구조화된 보고서 파일로 저장하는 방법을 배웁니다.

전문적인 보안 감사를 수행할 때는 발견 사항을 기록하는 것이 필수적입니다. 터미널에서 직접 결과를 읽는 것은 빠른 확인에는 좋지만, 팀과 결과를 공유하려면 적절한 문서가 필요합니다. Nikto 는 HTML, CSV, XML 및 일반 텍스트를 포함한 여러 형식으로 출력을 저장하는 것을 지원합니다.

보고서를 저장하려면 두 가지 플래그가 필요합니다:

  • -o (또는 -output): 보고서가 저장될 파일 경로와 이름을 지정합니다.
  • -Format: 보고서 형식 (예: htm, csv, xml, txt) 을 지정합니다.

스캔을 실행하고 프로젝트 디렉토리에 HTML 파일로 출력을 저장해 보겠습니다. 다음 명령을 실행하세요:

nikto -h http://localhost -Format htm -o /home/labex/project/report.html

스캔이 실행되는 동안 터미널에서 표준 출력을 계속 볼 수 있습니다. 스캔이 완료되면 Nikto 가 지정한 경로에 HTML 파일을 생성합니다.

현재 디렉토리의 내용을 나열하여 파일이 성공적으로 생성되었는지 확인할 수 있습니다:

ls -l /home/labex/project/report.html
-rw-r--r-- 1 root root 4521 Oct 25 10:10 /home/labex/project/report.html

이 HTML 보고서는 나중에 다운로드하여 표준 웹 브라우저에서 열 수 있으며, 발견된 모든 취약점을 깔끔한 표 형식으로 제공합니다.

Nikto 취약점 보고서 분석

마지막 단계에서는 명령줄 도구를 사용하여 생성된 보고서를 빠르게 분석하는 방법을 배웁니다.

HTML 보고서는 브라우저에서 보기에 좋지만, 그래픽 인터페이스 없이 터미널 환경에서만 작업해야 하는 경우도 많습니다. 이러한 경우 grep과 같은 표준 리눅스 텍스트 처리 도구를 사용하여 보고서에서 특정 정보를 추출할 수 있습니다.

이전 단계에서 생성한 HTML 보고서를 검색하여 Nikto 가 Apache 서버 상태 정보 노출을 성공적으로 기록했는지 확인해 보겠습니다.

grep 명령을 사용하여 보고서 내에서 "server-status"라는 단어를 검색하세요:

grep "server-status" /home/labex/project/report.html
    <td>/server-status: This reveals Apache information. Comment out appropriate line in httpd.conf or restrict access to allowed hosts.</td>

다음으로, 보고서가 누락된 X-Frame-Options 보안 헤더를 포착했는지 확인해 보겠습니다. 이 헤더는 클릭재킹 공격을 방지하는 데 중요합니다.

grep "X-Frame-Options" /home/labex/project/report.html
    <td>The anti-clickjacking X-Frame-Options header is not present.</td>

Nikto 의 보고 기능과 리눅스 명령줄 유틸리티를 결합하면 대규모 취약점 스캔 결과를 빠르게 파싱하고, 중요한 발견 사항을 추출하며, 웹 서버 보안을 강화하는 프로세스를 시작할 수 있습니다.

요약

축하합니다! Nikto 를 이용한 웹 서버 스캔 실습을 성공적으로 완료했습니다.

이번 실습에서 배운 내용은 다음과 같습니다:

  • Nikto 를 사용하여 대상 웹 서버에 대한 기본 취약점 스캔을 실행하는 방법.
  • -Tuning 플래그를 사용하여 특정 취약점 범주에 스캔을 집중시켜 오탐지와 스캔 시간을 줄이는 방법.
  • 문서화 및 공유를 위해 스캔 결과를 구조화된 HTML 보고서로 내보내는 방법.
  • grep과 같은 명령줄 도구를 사용하여 생성된 보고서를 분석하고 중요한 보안 결함을 빠르게 식별하는 방법.

이러한 기술은 웹 인프라에 대한 신속하고 초기적인 보안 평가를 수행하기 위한 강력한 기반이 됩니다.