소개
Nikto 는 인기 있는 오픈 소스 웹 서버 스캐너로, 6,700 개 이상의 잠재적으로 위험한 파일/프로그램, 1,250 개 이상의 서버에 대한 최신 버전 확인, 270 개 이상의 서버에 대한 버전별 문제 등 다양한 항목에 대해 웹 서버를 포괄적으로 테스트합니다.
주요 기능 중 하나는 Common Gateway Interface (CGI) 디렉토리 스캔입니다. CGI 스크립트는 제대로 보안되지 않은 경우 상당한 취약점의 원천이 될 수 있습니다. 기본적으로 Nikto 는 미리 정의된 일반적인 CGI 디렉토리 목록을 스캔합니다. 그러나 보다 효율적이고 목표 지향적인 스캔을 위해서는 이 동작을 제어하는 방법을 아는 것이 중요합니다.
이 실습에서는 Nikto 의 -Cgidirs 옵션을 사용하여 CGI 디렉토리 스캔을 관리하는 방법을 배우게 됩니다. 여기에는 스캔 비활성화, 가능한 모든 디렉토리 스캔, 테스트할 사용자 지정 디렉토리 지정 등이 포함됩니다.
Nikto 의 기본 CGI 디렉토리 스캔 동작 이해하기
이 단계에서는 간단한 웹 서버를 시작하고 기본 Nikto 스캔을 실행하여 CGI 디렉토리를 찾는 표준 동작을 관찰합니다.
먼저 간단한 웹 서버를 설정해 보겠습니다. 이를 위해 Python 의 내장 http.server 모듈을 사용합니다.
준비된 webroot 디렉토리로 이동합니다.
cd ~/project/webroot
이제 포트 8000 에서 웹 서버를 시작합니다. 명령 끝에 있는 &는 서버를 백그라운드에서 실행하여 터미널을 계속 사용할 수 있도록 합니다.
python3 -m http.server 8000 &
서버가 실행 중임을 나타내는 메시지가 표시됩니다.
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
서버가 실행 중인 상태에서 기본 Nikto 스캔을 수행해 보겠습니다. -h 옵션은 대상 호스트를 지정하는 데 사용됩니다.
nikto -h http://localhost:8000
스캔이 완료된 후 출력을 검토합니다. Nikto 는 여러 가지를 확인하지만 /cgi-bin/ 디렉토리를 찾았음을 나타내는 줄을 찾을 수 있습니다. 이는 /cgi-bin/이 Nikto 가 기본적으로 확인하는 일반적인 디렉토리 중 하나이기 때문입니다.
- Nikto v2.x
---------------------------------------------------------------------------
+ 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-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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)
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
참고: 일부 최신 Nikto 버전 또는 구성에서는 특정 테스트가 트리거되지 않는 한 기본 스캔에서
/cgi-bin/을 보고하지 않을 수 있습니다. 핵심은 기본 경로 세트가 확인되고 있다는 점을 이해하는 것입니다. 다음 단계에서 이러한 검사를 강제하여 더 명확한 결과를 보겠습니다.
-Cgidirs none 을 사용하여 모든 CGI 디렉토리 스캔 비활성화하기
이 단계에서는 CGI 디렉토리 스캔을 완전히 비활성화하는 방법을 배웁니다. 이는 다른 취약점에 초점을 맞춘 빠른 스캔을 수행하려는 경우 또는 대상 서버가 CGI 스크립트를 사용하지 않는다고 확신하는 경우에 유용합니다.
-Cgidirs 옵션은 CGI 스캔을 제어합니다. 이 옵션의 값을 none으로 설정하면 Nikto 가 테스트의 이 부분을 완전히 건너뛰도록 지시합니다.
CGI 스캔을 비활성화한 상태에서 서버를 다시 스캔하려면 다음 명령을 실행합니다.
nikto -h http://localhost:8000 -Cgidirs none
출력을 검토합니다. 이전 스캔과 매우 유사하지만 CGI 디렉토리가 스캔되지 않았음을 명확하게 확인합니다. No CGI directories found 줄은 여전히 표시되지만, 이번에는 Nikto 에게 해당 디렉토리를 찾지 않도록 지시했기 때문입니다. 이렇게 하면 스캔이 약간 더 빨라집니다.
- Nikto v2.x
---------------------------------------------------------------------------
+ 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-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ CGI directory scanning has been disabled.
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
명령이 예상대로 작동했음을 확인하는 + CGI directory scanning has been disabled. 줄에 주목하십시오.
-Cgidirs all 을 사용하여 모든 구성된 CGI 디렉토리 스캔하기
이 단계에서는 -Cgidirs 옵션에 all 값을 사용합니다. 이렇게 하면 Nikto 가 내부 구성에 나열된 모든 디렉토리를 확인하여 가장 포괄적인 CGI 스캔을 수행하도록 강제합니다. 이는 기본 스캔보다 더 철저합니다.
-Cgidirs all 옵션을 사용하여 Nikto 스캔을 실행합니다.
nikto -h http://localhost:8000 -Cgidirs all
이제 출력을 주의 깊게 검사합니다. 이번에는 테스트 서버에 /cgi-bin/ 디렉토리가 있고 all 플래그가 이를 확인하도록 보장하므로 Nikto 가 명시적으로 보고할 것입니다.
- Nikto v2.x
---------------------------------------------------------------------------
+ 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-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ OSVDB-3233: /cgi-bin/: Directory indexing found.
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
/cgi-bin/과 관련된 두 가지 새로운 발견 사항을 볼 수 있으며, 이는 강제 스캔이 성공했음을 확인합니다.
스캔할 사용자 지정 CGI 디렉토리 경로 지정하기
이 단계에서는 특정 비표준 CGI 디렉토리를 스캔하는 방법을 배웁니다. 이는 스크립트를 고유한 위치에 배치하는 사용자 지정 웹 애플리케이션을 평가할 때 매우 유용합니다.
저희 설정에는 /cgi-custom/이라는 디렉토리가 포함되어 있습니다. 기본 Nikto 스캔으로는 이 디렉토리를 찾을 수 없습니다. -Cgidirs 옵션에 경로를 전달하여 Nikto 가 이를 특정하여 확인하도록 지시할 수 있습니다.
/cgi-custom/ 디렉토리만 스캔하려면 다음 명령을 실행합니다.
nikto -h http://localhost:8000 -Cgidirs /cgi-custom/
출력을 검토합니다. 이제 Nikto 는 /cgi-custom/을 찾았다고 보고할 것입니다. 우리가 스캔을 지정한 경로로만 제한했기 때문에 /cgi-bin/은 보고하지 않습니다.
- Nikto v2.x
---------------------------------------------------------------------------
+ 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-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ 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
+ OSVDB-3233: /cgi-custom/: Directory indexing found.
+ OSVDB-3092: /cgi-custom/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
보시다시피 스캔은 사용자 지정 디렉토리를 성공적으로 식별했으며, 이는 Nikto 의 CGI 스캔을 특정 요구 사항에 맞게 조정하는 방법을 보여줍니다.
다양한 CGI 스캔 전략 결과 비교하기
마지막 단계에서는 사용한 다양한 스캔 전략의 결과를 검토하고 비교해 보겠습니다. 이를 통해 Nikto 의 CGI 스캔을 제어하는 방법을 더 확실하게 이해할 수 있습니다.
다음 네 가지 유형의 스캔을 수행했습니다.
- 기본 스캔 (
nikto -h ...): 일반적인 디렉토리의 기본 목록을 스캔했습니다. 저희 경우, 초기에는/cgi-bin/을 플래그로 지정하지 않았지만 해당 디렉토리가 존재했습니다. 이 스캔은 좋은 기준선을 제공합니다. - CGI 스캔 없음 (
-Cgidirs none): 모든 CGI 디렉토리 검사를 완전히 건너뛰었습니다. 출력에서CGI directory scanning has been disabled라고 확인되었습니다. CGI 를 확인할 필요가 없다면 가장 빠른 옵션입니다. - 모든 CGI 스캔 (
-Cgidirs all): Nikto 에 알려진 모든 CGI 디렉토리를 강제로 확인했습니다. 이 스캔은/cgi-bin/디렉토리를 성공적으로 찾아서 보고했습니다. 가장 철저하지만 가장 느린 옵션입니다. - 사용자 지정 CGI 스캔 (
-Cgidirs /cgi-custom/):/cgi-custom/이라는 특정 디렉토리만 스캔하여 성공적으로 찾았으며,/cgi-bin/과 같은 다른 모든 디렉토리는 무시했습니다. 가장 표적화된 접근 방식입니다.
올바른 전략을 선택하는 것은 목표에 따라 달라집니다.
- 빠른 개요를 보려면 기본 스캔이 종종 충분합니다.
- 절대적으로 철저하게 하려면 **
all**을 사용하십시오. - 알려진 비-CGI 서버에서 시간을 절약하려면 **
none**을 사용하십시오. - 사용자 지정 애플리케이션의 경우 사용자 지정 경로를 지정하는 것이 가장 효율적인 방법입니다.
마지막으로 Python 웹 서버를 중지하여 정리하겠습니다. 시작한 첫 번째이자 유일한 백그라운드 작업이었으므로 kill %1 명령으로 중지할 수 있습니다.
kill %1
"Terminated" 메시지가 표시되어 서버가 종료되었음을 확인합니다.
요약
이 실습에서는 Nikto 에서 CGI 디렉토리 스캔을 제어하는 실질적인 경험을 쌓았습니다. 테스트 목적으로 간단한 웹 서버를 시작하는 방법을 배우고, -Cgidirs 옵션을 사용하여 다양한 스캔 전략을 적용했습니다.
다음 작업을 성공적으로 수행했습니다.
- 기본 Nikto 스캔 수행.
-Cgidirs none을 사용하여 CGI 스캔을 완전히 비활성화.-Cgidirs all을 사용하여 알려진 모든 CGI 디렉토리에 대한 포괄적인 스캔 수행.- 사용자 지정 경로를 제공하여 특정 비표준 디렉토리 타겟팅.
이러한 옵션을 숙달함으로써 이제 Nikto 를 사용하여 더 효율적이고 표적화되며 효과적인 웹 서버 취약점 스캔을 실행할 수 있으며, 테스트를 대상의 특정 특성에 맞게 조정할 수 있습니다.


