Nikto 스캔 디버깅을 통한 문제 해결

Kali LinuxBeginner
지금 연습하기

소개

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

Nikto 는 강력하지만 때로는 스캔이 실패하거나 예상치 못한 결과를 생성하거나 더 깊은 조사가 필요할 수 있습니다. 이러한 상황에서 Nikto 의 디버깅 기능은 매우 유용합니다. 이를 통해 전송되는 정확한 HTTP 요청과 수신된 응답을 볼 수 있어 네트워크 문제, 서버 잘못된 구성 또는 스캔 자체의 문제를 정확히 파악하는 데 도움이 됩니다.

이 랩에서는 Nikto 의 디버깅 옵션을 사용하여 웹 취약점 스캔을 효과적으로 문제 해결하고 이해하는 방법을 배우게 됩니다.

-debug 옵션으로 스캔 실행하기

이 단계에서는 -debug 옵션을 사용하여 기본적인 Nikto 스캔을 수행합니다. 이 옵션은 매우 상세한 출력을 제공하며, Nikto 가 보내는 모든 요청과 서버의 해당 응답에 대한 전체 세부 정보를 보여줍니다. 이는 모든 스캔의 문제 해결에 있어 첫 번째이자 가장 중요한 단계입니다.

먼저 ~/project 디렉토리에 있는지 확인하십시오. 스캔할 수 있도록 127.0.0.1의 포트 8000에서 실행되는 간단한 웹 서버를 이미 설정해 두었습니다.

로컬 웹 서버를 대상으로 -debug 옵션을 사용하여 Nikto 를 실행하려면 다음 명령을 실행하십시오.

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

화면을 스크롤하는 많은 출력이 표시될 것입니다. 이것이 디버그 정보입니다. 표준 Nikto 스캔 결과와 상세한 요청 및 응답 데이터가 혼합되어 있습니다.

출력의 일부는 다음과 같이 원시 HTTP 통신을 보여줄 것입니다.

- 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.12
+ 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)
DEBUG: User-Agent is 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
DEBUG: Request -> 127.0.0.1:8000
GET / HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


DEBUG: Response -> 127.0.0.1:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Date: ...
Content-type: text/html; charset=utf-8
Content-Length: 36
Last-Modified: ...

DEBUG: Received: <h1>Welcome to the Test Site</h1>

... (many more lines) ...

이 상세한 보기는 Nikto 가 정확히 무엇을 테스트하고 있는지 이해하는 데 필수적입니다.

상세 요청 및 응답 정보 관찰하기

이 단계에서는 이전 단계에서 생성된 출력을 더 자세히 살펴보겠습니다. 디버그 정보의 양이 방대할 수 있으므로 less와 같은 페이저 도구를 사용하여 검토하는 것이 좋습니다.

이번에는 출력을 less로 파이프하여 명령을 다시 실행해 보겠습니다. 이렇게 하면 한 번에 한 페이지씩 출력을 스크롤할 수 있습니다.

nikto -h http://127.0.0.1:8000 -debug | less

출력이 less에 나타나면 다음 키를 사용하여 탐색할 수 있습니다.

  • 화살표 키 또는 j/k를 사용하여 위아래로 스크롤합니다.
  • Page Up/Page Down 또는 스페이스바를 사용하여 페이지 단위로 이동합니다.
  • q를 눌러 종료하고 명령 프롬프트로 돌아갑니다.

스크롤하면서 각 테스트에 대한 디버그 출력의 다음 주요 부분에 주의를 기울이십시오.

  • DEBUG: Request ->: 이 섹션은 메서드 (GET, POST 등), URI 및 모든 헤더를 포함하여 전송되는 정확한 HTTP 요청을 보여줍니다.
  • DEBUG: Response ->: HTTP 상태 코드 (예: 200 OK, 404 Not Found) 를 포함한 서버의 응답 헤더를 보여줍니다.
  • DEBUG: Received:: 서버의 HTTP 응답 본문을 보여줍니다.

이 정보를 검토함으로써 서버가 예상대로 응답하는지, 방화벽이 요청을 차단하고 있는지 또는 Nikto 가 응답을 올바르게 해석하고 있는지 확인할 수 있습니다.

관찰이 끝나면 q를 눌러 less를 종료하십시오.

나중에 분석할 수 있도록 디버그 출력을 파일로 리디렉션하기

이 단계에서는 상세한 디버그 출력을 파일로 저장하는 방법을 배웁니다. 길거나 복잡한 스캔의 경우 실시간으로 출력을 분석하는 것은 비실용적입니다. 파일로 저장하면 오프라인 분석, 검색 및 팀원과의 공유가 가능합니다.

Nikto 의 디버그 정보는 표준 오류 (STDERR) 스트림으로 전송되는 반면, 일반 결과는 표준 출력 (STDOUT) 으로 전송됩니다. 모든 것을 캡처하려면 두 스트림 모두 파일로 리디렉션해야 합니다.

다음 명령을 사용하여 스캔을 실행하고 모든 출력을 debug_output.txt라는 파일에 저장하십시오.

nikto -h http://127.0.0.1:8000 -debug > debug_output.txt 2>&1

리디렉션 부분을 분석해 보겠습니다.

  • >: 이것은 표준 출력 리디렉션 연산자입니다. STDOUT 을 debug_output.txt로 보냅니다.
  • 2>&1: 이것은 STDERR(파일 디스크립터 2) 을 STDOUT(파일 디스크립터 1) 과 동일한 위치, 즉 파일로 리디렉션합니다.

명령이 완료된 후 파일이 생성되었는지 확인하십시오.

ls -l debug_output.txt

출력에서 파일이 나열된 것을 볼 수 있습니다.

-rw-r--r-- 1 labex labex ... ... debug_output.txt

이제 cat 또는 less를 사용하여 파일 내용을 검토할 수 있습니다.

less debug_output.txt

이제 상세 검토를 위해 스캔 및 해당 디버그 정보의 영구 기록을 보유하게 되었습니다. less를 종료하려면 q를 누르십시오.

스캔 데이터베이스의 구문 검사를 위해 -dbcheck 사용하기

이 단계에서는 -dbcheck 옵션을 사용합니다. 이것은 스캔을 수행하지 않고 Nikto 의 내부 데이터베이스 및 플러그인의 구문을 확인하는 진단 도구입니다. Nikto 가 충돌하거나 시작에 실패하거나 비정상적으로 작동하는 경우, 자체 파일이 손상되지 않았는지 확인하기 위해 데이터베이스 검사를 실행하는 것이 좋은 첫 번째 단계입니다.

데이터베이스에는 Nikto 가 수행하는 모든 취약점 검사에 대한 정의가 포함되어 있습니다. 이러한 파일 중 하나에 구문 오류가 있으면 테스트가 조용히 실패하거나 전체 프로그램이 충돌할 수 있습니다.

검사를 수행하려면 다음 명령을 실행하십시오.

nikto -dbcheck

Nikto 는 플러그인 파일과 데이터베이스를 구문 분석합니다. 모든 것이 올바르면 오류가 발견되지 않았음을 확인하는 출력이 표시됩니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_variables'
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_tests'
... (더 많은 줄) ...
+ DBCheck: 0 error(s) found in database.

오류가 발견되면 출력에서 특정 파일과 줄 번호를 가리키므로 문제를 해결하는 데 도움이 됩니다 (필요한 경우 Nikto 를 다시 설치). 이 간단한 명령은 도구 자체를 문제 해결할 때 많은 시간을 절약할 수 있습니다.

디버그 출력을 사용하여 실패한 스캔 문제 해결하기

이 단계에서는 학습한 내용을 실제 문제 해결 시나리오에 적용합니다. 일반적인 문제인 대상 호스트에 연결할 수 없어 스캔이 실패하는 상황을 시뮬레이션합니다. 디버그 출력 없이는 원인이 즉시 명확하지 않을 수 있습니다.

존재하지 않는 로컬 네트워크 IP 주소인 10.255.255.1을 스캔해 보겠습니다. 또한 스캔이 신속하게 종료되도록 -maxtime 10s를 사용합니다.

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

nikto -h 10.255.255.1 -maxtime 10s -debug

출력을 주의 깊게 관찰하십시오. 호스트가 존재하지 않기 때문에 Nikto 는 연결을 설정할 수 없습니다. 디버그 출력은 이러한 연결 시도 및 실패를 명확하게 보여줍니다.

디버그 로그 전체에 다음과 같은 오류 메시지가 산재해 있는 것을 볼 수 있습니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          10.255.255.1
+ Target Hostname:    10.255.255.1
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
DEBUG: Request -> 10.255.255.1:80
GET / HTTP/1.1
Host: 10.255.255.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


+ ERROR: Cannot connect to 10.255.255.1:80 (No route to host)
...

여기서 핵심 메시지는 ERROR: Cannot connect... (No route to host)입니다. 이는 웹 서버 구성이나 Nikto 의 버그가 아니라 기본적인 네트워크 연결 문제임을 즉시 알려줍니다. 대상에 연결할 수 없기 때문에 스캔이 "실패"하는 것입니다. 이는 -debug 옵션이 문제의 근본 원인을 신속하게 진단하는 데 필요한 컨텍스트를 제공하는 방법을 보여줍니다.

요약

이 실습에서는 Nikto 웹 서버 스캔의 디버깅 및 문제 해결에 대한 필수 기술을 배웠습니다.

먼저 -debug 옵션을 사용하여 상세한 요청 및 응답 데이터를 보고 스캐너의 동작을 명확하게 파악했습니다. 그런 다음 오프라인 분석을 위해 파일을 리디렉션하여 이 출력을 관리하는 방법을 배웠습니다. 또한 -dbcheck 유틸리티를 사용하여 Nikto 자체의 데이터베이스 파일 무결성을 확인했으며, 이는 도구 자체를 문제 해결할 때 중요한 단계입니다. 마지막으로 이러한 기술을 실제 시나리오에 적용하여 네트워크 연결 문제를 실패한 스캔의 원인으로 신속하게 식별했습니다.

이러한 기술을 통해 문제점을 진단하고 해결할 수 있는 능력이 향상되어 Nikto 스캔이 효과적이고 안정적으로 수행되도록 보장할 수 있습니다.