Nikto 이전 스캔 재실행 및 재포맷

Kali LinuxBeginner
지금 연습하기

소개

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

전체 Nikto 스캔은 특히 크고 복잡한 웹 애플리케이션의 경우 시간이 오래 걸릴 수 있습니다. 스캔 결과를 여러 형식 (예: 기술 보고서용 하나, 프레젠테이션용 하나) 으로 얻어야 하는 경우 스캔을 반복해서 실행하는 것은 비효율적입니다. Nikto 는 스캔 결과를 저장한 다음 다시 스캔하지 않고 다양한 형식으로 보고서를 생성하기 위해 "다시 재생 (replay)"할 수 있는 강력한 기능을 제공합니다.

이 랩에서는 초기 스캔을 수행하고, 결과를 XML 파일에 저장한 다음, -replay 옵션을 사용하여 HTML 형식으로 새 보고서를 효율적으로 생성하는 방법을 배웁니다.

스캔을 수행하고 출력을 XML 파일에 저장하기

이 단계에서는 로컬 테스트 웹 서버에 대해 기본적인 Nikto 스캔을 수행합니다. 핵심은 Nikto 가 나중에 파싱할 수 있는 구조화된 형식 (예: XML) 으로 출력을 파일에 저장하는 것입니다. -o 옵션을 사용하여 출력 파일을 지정하고 -Format 옵션을 사용하여 파일 형식을 정의합니다.

먼저 ~/project 디렉토리에 있는지 확인하십시오. 설정 스크립트가 이미 localhost의 포트 8000에서 간단한 웹 서버를 시작했습니다.

이제 터미널에서 다음 명령을 실행하여 로컬 웹 서버를 스캔하고 결과를 scan_results.xml이라는 파일에 저장하십시오.

nikto -h http://localhost:8000 -o scan_results.xml -Format xml

이 명령을 자세히 살펴보겠습니다.

  • nikto: Nikto 스캐너를 실행하는 명령입니다.
  • -h http://localhost:8000: 스캔할 호스트 (대상) 를 지정합니다.
  • -o scan_results.xml: 출력 파일 이름을 지정합니다.
  • -Format xml: Nikto 에 출력을 XML 형식으로 저장하도록 지시합니다.

스캔이 완료되는 데 잠시 시간이 걸립니다. 터미널에 다음과 유사한 출력이 표시됩니다 (세부 정보는 다를 수 있습니다).

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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)
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
...
+ 1 host(s) tested

명령이 완료된 후 현재 디렉토리 (~/project) 에 scan_results.xml이라는 파일이 생성됩니다.

저장된 XML 파일로 -replay 옵션 사용하기

이 단계에서는 Nikto 의 -replay 기능을 사용하는 방법을 배웁니다. 이 옵션을 사용하면 Nikto 가 이전에 저장된 XML 스캔 파일을 파싱하여 대상 서버에 다시 연결하지 않고도 결과를 표시할 수 있습니다. 이는 결과를 빠르게 검토하거나 대상 서버가 더 이상 온라인 상태가 아닌 경우에 매우 유용합니다.

방금 저장한 스캔을 다시 재생하려면 다음 명령을 사용하십시오.

nikto -replay scan_results.xml

이 명령은 Nikto 에게 scan_results.xml 파일을 읽고 결과를 터미널에 출력하도록 지시합니다. 출력은 원본 스캔의 터미널 출력과 거의 동일하게 보이지만, 파일에서 즉시 생성됩니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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.
...
+ 1 host(s) tested

명령이 얼마나 빨리 완료되는지 주목하십시오. 이는 Nikto 가 새로운 네트워크 스캔을 수행하는 것이 아니라 로컬 파일에서 읽고 있음을 보여줍니다.

-Format htm 을 사용하여 새 HTML 보고서 생성하기

이 단계에서는 -replay 옵션과 -Format 옵션을 결합하여 새로운 형식의 보고서를 생성합니다. 이것이 이 실습의 핵심입니다. 즉, 저장된 하나의 스캔으로 여러 유형의 보고서를 생성할 수 있습니다.

프레젠테이션을 위해 잘 형식화된 HTML 보고서가 필요하다고 가정해 봅시다. 저장된 scan_results.xml 파일에서 직접 생성할 수 있습니다.

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

nikto -replay scan_results.xml -o report.html -Format htm

새로운 명령의 세부 정보는 다음과 같습니다.

  • nikto -replay scan_results.xml: 이 부분은 이전 단계와 동일합니다. Nikto 에게 저장된 데이터를 사용하도록 지시합니다.
  • -o report.html: report.html이라는 새 출력 파일을 지정합니다.
  • -Format htm: Nikto 에게 출력을 HTML 파일 형식으로 지정하도록 지시합니다.

이 명령은 매우 빠르게 실행되며 보고서를 report.html 파일에 직접 쓰기 때문에 터미널에 최소한의 출력만 표시됩니다.

- Nikto v2.5.0
+ 1 host(s) tested

이제 대상 서버를 다시 스캔하지 않고도 다른 형식으로 새 보고서를 성공적으로 생성했습니다.

새 보고서가 재스캔 없이 생성되었는지 확인하기

이 단계에서는 새 HTML 보고서 파일이 생성되었는지 확인하고 유효한 HTML 콘텐츠를 포함하고 있는지 확인합니다. 이를 통해 이전 명령이 파일 기반 보고서를 생성했음을 다시 한번 확인할 수 있습니다.

먼저 현재 디렉토리 (~/project) 의 파일을 나열하여 새로 생성된 보고서를 확인합니다.

ls -l

출력에서 원본 XML 파일과 새 HTML 파일 모두를 볼 수 있어야 합니다.

total 12
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

다음으로, 새 보고서의 내용을 빠르게 확인하기 위해 head 명령을 사용하여 report.html 파일의 처음 몇 줄을 볼 수 있습니다.

head report.html

출력에는 HTML 문서의 시작 부분이 표시되어 파일이 올바르게 생성되었음을 확인할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Nikto Report</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
...

가장 중요한 관찰은 속도입니다. 3 단계의 명령은 거의 즉시 완료된 반면, 1 단계의 원본 스캔은 눈에 띄는 시간이 걸렸습니다. 이것이 새로운 시간 소모적인 스캔을 수행하는 것이 아니라 기존 데이터를 다시 형식화하고 있다는 확실한 증거입니다.

저장된 결과 재실행의 효율성 이해하기

이 마지막 단계에서는 재실행 기능을 사용하여 얻은 효율성에 대한 이해를 공고히 할 것입니다. 추가 분석을 위해 스프레드시트로 가져오기 위한 CSV(쉼표로 구분된 값) 형식으로도 결과가 필요하다고 가정해 봅시다. 다른 스캔을 실행하는 대신 동일한 scan_results.xml 파일에서 다른 보고서를 생성하기만 하면 됩니다.

CSV 보고서를 생성하려면 다음 명령을 실행하십시오.

nikto -replay scan_results.xml -o report.csv -Format csv

이 명령은 HTML 명령과 동일한 구조를 가지지만, 새 파일 이름 (report.csv) 과 새 형식 (csv) 을 지정합니다. 마찬가지로 몇 초 안에 완료됩니다.

이제 파일을 다시 나열하여 생성된 모든 보고서를 확인합니다.

ls -l

이제 단일 스캔에서 생성된 세 개의 보고서 파일을 볼 수 있습니다.

total 16
-rw-r--r-- 1 labex labex  68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.csv
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml

이 워크플로—한 번 스캔하고 여러 번 보고—는 효율적인 취약점 평가의 초석입니다. 몇 시간씩 걸릴 수 있는 대규모 스캔의 경우, 이 기능은 엄청난 시간과 컴퓨팅 리소스를 절약하여 스캔 완료를 기다리는 대신 결과 분석에 집중할 수 있도록 합니다.

요약

이 실습에서는 Nikto 스캔 결과로 작업하는 매우 효율적인 워크플로를 배웠습니다. 웹 서버 스캔을 성공적으로 수행하고 그 결과를 XML 파일에 저장했습니다. 그런 다음 강력한 -replay 옵션을 사용하여 이 저장된 데이터를 파싱하고 시간 소모적인 네트워크 스캔을 다시 실행할 필요 없이 다른 형식 (HTML 및 CSV) 으로 새 보고서를 생성했습니다.

연습한 주요 명령 및 개념은 다음과 같습니다.

  • nikto -h [host] -o [file.xml] -Format xml: 스캔을 수행하고 결과를 저장합니다.
  • nikto -replay [file.xml] -o [new_report] -Format [htm/csv/txt]: 저장된 데이터에서 새 보고서를 생성합니다.

스캔 단계와 보고 단계 를 분리하는 이 기술은 효율적인 보안 테스트 및 분석에 매우 중요합니다.