Nikto 스크립팅을 위한 콘솔 출력 음소거

PythonBeginner
지금 연습하기

소개

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

명령줄에서 Nikto 를 실행하면 대화형 사용에 유용한 많은 실시간 출력이 생성됩니다. 하지만 스크립트를 사용하여 스캔을 자동화하려는 경우 이러한 상세한 출력은 바람직하지 않을 수 있습니다.

이 랩에서는 -Mute 옵션을 사용하여 Nikto 스캔을 조용하게 실행하는 방법을 배웁니다. 이는 Nikto 를 자동화된 보안 워크플로우 및 쉘 스크립트에 통합하는 데 중요한 기술로, 콘솔을 어지럽히지 않고 파일에 결과를 캡처할 수 있습니다.

표준 스캔 실행 및 상세한 콘솔 출력 관찰

이 단계에서는 테스트 웹 서버에 대해 기본적인 Nikto 스캔을 수행합니다. 이를 통해 기본 동작과 콘솔에 출력되는 정보의 양을 이해할 수 있습니다.

먼저 표준 스캔을 실행해 보겠습니다. -h 옵션은 대상 호스트를 지정하는 데 사용됩니다. 테스트 서버는 로컬에서 포트 8000에서 실행 중입니다.

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

nikto -h http://127.0.0.1:8000

Nikto 버전 배너, 대상 정보 및 스캔이 진행됨에 따라 실시간 상태 업데이트를 포함한 많은 출력을 볼 수 있습니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ 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)
... (many more lines of output) ...
+ 1 host(s) tested

이 상세한 출력은 스캔을 실시간으로 모니터링하는 데 유용하지만 자동화에는 이상적이지 않습니다.

-Mute 옵션을 사용하여 일반 콘솔 출력 억제

이 단계에서는 -Mute 옵션을 사용하여 콘솔 출력을 크게 줄이는 방법을 배웁니다. 이 옵션은 Nikto 에게 스캔 중에 일반적으로 표시되는 일반 HTTP 요청 및 응답을 억제하도록 지시합니다.

-Mute 옵션은 단계별 진행 상황이 아닌 최종 결과에만 관심이 있는 상황에 완벽합니다.

이제 이전과 동일한 스캔을 실행하되, 명령 끝에 -Mute 옵션을 추가하십시오.

nikto -h http://127.0.0.1:8000 -Mute

이제 출력을 관찰하십시오. 훨씬 깔끔해졌습니다. 배너와 실시간 상태 업데이트가 사라졌습니다. 최종 결과 요약만 표시됩니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ 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)
+ 1 host(s) tested

보시다시피 출력의 혼란이 훨씬 줄어들어 더 큰 프로세스의 일부로 스캔이 수행될 때 구문 분석하거나 읽기 쉬워집니다.

-Mute 와 -o 를 결합하여 결과를 조용히 파일에 저장

이 단계에서는 muting 을 한 단계 더 진행합니다. 목표는 콘솔에 출력이 전혀 없는 스캔을 실행하고 모든 결과를 파일에 직접 저장하는 것입니다. 이는 자동화된 스크립팅에 가장 일반적인 요구 사항입니다.

이를 달성하기 위해 -Mute 옵션과 출력 파일 (-o 또는 --output) 을 지정하는 옵션을 결합할 수 있습니다.

다음 명령을 실행하십시오. 이 명령은 스캔을 수행하고 모든 콘솔 출력을 억제하며 보고서를 nikto_report.txt라는 파일에 저장합니다.

nikto -h http://127.0.0.1:8000 -Mute -o nikto_report.txt

명령을 실행한 후 터미널 프롬프트가 스캔 결과를 출력하지 않고 즉시 반환되는 것을 알 수 있습니다. 스캔은 백그라운드에서 조용히 실행되었습니다.

보고서가 생성되었는지 확인하려면 먼저 현재 디렉토리의 파일을 나열하십시오.

ls

목록에서 nikto_report.txt를 볼 수 있어야 합니다.

nikto_report.txt  www

이제 보고서 파일의 내용을 확인하십시오.

cat nikto_report.txt

파일의 내용은 이전 단계에서 본 muted 출력과 동일합니다. 이 기술은 로그를 유지하거나 스캔 결과를 프로그래밍 방식으로 처리하는 데 필수적입니다.

음소거된 Nikto 스캔을 호출하는 간단한 bash 스크립트 작성

이 단계에서는 자동화된 무음 Nikto 스캔을 위한 간단한 bash 스크립트를 생성합니다. 이는 -Mute-o 옵션이 실제 자동화 시나리오에서 어떻게 사용되는지를 보여줍니다.

먼저 nano 텍스트 편집기를 사용하여 scan.sh라는 새 파일을 만듭니다.

nano scan.sh

nano 편집기 내부에 다음 내용을 추가합니다. 이 스크립트는 사용자에게 상태 메시지를 출력하고, 무음 Nikto 스캔을 실행하며, 결과를 script_report.txt라는 새 파일에 저장합니다.

#!/bin/bash

echo "Starting silent Nikto scan..."
nikto -h http://127.0.0.1:8000 -Mute -o script_report.txt
echo "Scan complete. Report saved to script_report.txt"

Ctrl+X를 눌러 종료하고, Y를 눌러 변경 사항을 저장하고, Enter를 눌러 파일 이름을 확인합니다.

다음으로 스크립트를 실행 가능하게 만들어야 합니다. chmod 명령을 사용하여 실행 권한을 추가합니다.

chmod +x scan.sh

마지막으로 새 스크립트를 실행합니다.

./scan.sh

스크립트는 "Starting" 및 "Scan complete" 메시지를 표시하지만 Nikto 스캔 자체는 콘솔 출력을 생성하지 않습니다.

Starting silent Nikto scan...
Scan complete. Report saved to script_report.txt

ls 명령을 다시 사용하여 새 보고서 파일 script_report.txt가 생성되었는지 확인할 수 있습니다.

스크립트의 종료 코드를 확인하여 스캔 완료 여부 결정

이 단계에서는 스크립트의 종료 코드를 확인하는 방법을 배웁니다. 쉘 스크립팅에서 종료 코드는 명령 또는 스크립트가 실행을 마친 후 반환하는 숫자입니다. 종료 코드 0은 일반적으로 명령이 성공적으로 완료되었음을 의미합니다.

이는 신뢰할 수 있는 스크립트를 구축하는 데 있어 기본적인 개념으로, 다음 단계로 진행하기 전에 특정 단계가 성공했는지 확인할 수 있게 해줍니다.

먼저 스크립트를 다시 실행합니다.

./scan.sh

스크립트가 완료된 직후, 특수 쉘 변수인 $?를 검사하여 종료 코드를 확인할 수 있습니다. 이 변수는 항상 마지막으로 실행된 명령의 종료 코드를 보유합니다.

다음 명령을 실행합니다.

echo $?

출력은 0이어야 하며, 이는 scan.sh 스크립트가 오류 없이 완료되었음을 나타냅니다.

0

더 고급 스크립트에서는 이 확인을 if 문에서 사용하여 오류를 처리할 수 있습니다. 예를 들어 다음과 같습니다.

./scan.sh
if [ $? -eq 0 ]; then
  echo "Script completed successfully."
else
  echo "Script failed with an error."
fi

이를 통해 스크립트 내에서 음소거된 Nikto 스캔을 안정적으로 실행하고 완료 여부를 프로그래밍 방식으로 확인할 수 있음을 확인했습니다.

요약

이 실습에서는 효과적인 스크립팅 및 자동화를 위해 Nikto 의 콘솔 출력을 제어하는 방법을 배웠습니다.

표준 Nikto 스캔의 상세한 출력을 관찰하는 것으로 시작했습니다. 그런 다음 -Mute 옵션을 사용하여 불필요한 출력을 억제하고 -o 옵션을 사용하여 스캔 결과를 파일에 조용히 저장했습니다. 마지막으로 이러한 옵션을 bash 스크립트에 통합하고 스크립트의 종료 코드를 확인하여 성공적인 완료를 검증하는 방법을 배웠습니다.

이러한 기술은 웹 보안 평가를 자동화하고 강력한 비대화형 보안 도구를 구축하려는 모든 사람에게 기본적입니다.