소개
Nikto 는 인기 있는 오픈 소스 웹 서버 스캐너로, 6,700 개 이상의 잠재적으로 위험한 파일/프로그램, 1,250 개 이상의 서버에 대한 최신 버전 확인, 270 개 이상의 서버에 대한 버전별 문제 등 다양한 항목에 대해 웹 서버를 포괄적으로 테스트합니다.
많은 웹 애플리케이션에는 사용자가 유효한 자격 증명을 제공한 후에만 액세스할 수 있는 제한된 영역이 있습니다. HTTP Basic Authentication 은 이러한 영역을 보호하는 데 사용되는 가장 간단한 방법 중 하나입니다. 철저한 보안 평가를 수행하려면 이러한 인증된 섹션을 스캔하는 것이 중요합니다.
이 랩에서는 Nikto 를 사용하여 Basic Authentication 으로 보호된 웹 디렉토리에 대한 인증 스캔을 수행하는 방법을 배웁니다. -id 옵션을 사용하여 필요한 자격 증명을 제공함으로써 Nikto 가 보호된 리소스에 액세스하고 취약점을 테스트할 수 있도록 합니다.
Basic Authentication 으로 보호된 웹 리소스 식별
이 단계에서는 대상 웹 리소스가 실제로 Basic Authentication 으로 보호되어 있는지 먼저 확인할 것입니다. 이를 확인하는 일반적인 방법은 curl 명령을 사용하여 리소스에 액세스하려고 할 때 서버에서 반환하는 HTTP 헤더를 검사하는 것입니다.
보호되지 않은 리소스는 200 OK 상태를 반환하는 반면, 보호된 리소스는 401 Unauthorized 상태와 함께 필요한 인증 유형을 나타내는 WWW-Authenticate 헤더를 반환합니다.
-I 옵션 (HTTP 헤더만 가져옴) 을 사용하여 curl로 보호된 디렉토리 http://localhost/protected/에 액세스해 보겠습니다.
터미널에서 다음 명령을 실행하십시오.
curl -I http://localhost/protected/
다음과 유사한 출력이 표시됩니다. HTTP/1.1 401 Unauthorized 상태와 WWW-Authenticate: Basic realm="..." 헤더에 주목하십시오. 이는 디렉토리가 보호되어 있음을 확인합니다.
HTTP/1.1 401 Unauthorized
Date: [current_date]
Server: Apache/2.4.52 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Type: text/html; charset=iso-8859-1
필요한 사용자 이름 및 비밀번호 얻기
이 단계에서는 보호된 영역에 액세스하는 데 필요한 자격 증명을 확인합니다. 실제 침투 테스트에서는 암호 추측, 공개 코드 저장소에서 찾기 또는 소셜 엔지니어링과 같은 다양한 방법을 통해 이러한 자격 증명을 얻을 수 있습니다.
이 랩에서는 환경이 특정 사용자 이름과 비밀번호로 사전 구성되었습니다. 인증된 스캔을 수행하기 위한 후속 단계에서 이러한 자격 증명이 필요합니다.
자격 증명은 다음과 같습니다.
- 사용자 이름:
labex - 비밀번호:
P@ssw0rd123
이 단계에서는 실행할 명령이 없습니다. 위의 자격 증명을 기록해 두었다가 다음 단계로 진행하여 인증에 사용하십시오.
'user:password' 형식의 -id 옵션 사용
이 단계에서는 HTTP 인증에 사용할 자격 증명을 제공하는 데 사용되는 Nikto 의 -id 옵션에 대해 알아봅니다. 형식은 콜론 (:) 으로 구분된 사용자 이름과 비밀번호를 포함하는 단일 문자열입니다.
구문은 다음과 같습니다: -id <username>:<password>
Nikto 에서 이 옵션을 사용하기 전에 자격 증명이 작동하는지 확인하는 것이 좋습니다. curl을 사용하여 이번에는 --user 옵션을 사용하여 자격 증명을 제공함으로써 이를 다시 수행할 수 있습니다.
올바른 자격 증명으로 보호된 페이지에 액세스하려면 다음 명령을 실행하십시오.
curl --user labex:P@ssw0rd123 http://localhost/protected/
자격 증명이 올바르면 서버에서 액세스를 허용하고 아래와 같이 페이지의 콘텐츠를 반환합니다. 이는 성공적으로 인증할 수 있음을 확인합니다.
This is a protected page accessible only with credentials.
이제 자격 증명을 확인하고 형식을 이해했으므로 Nikto 스캔에 사용할 준비가 되었습니다.
보호된 영역에 대한 인증 스캔 실행
이 단계에서는 이전 단계에서 습득한 지식을 활용하여 Nikto 로 전체 인증 스캔을 실행합니다. 대상 호스트와 인증 자격 증명을 지정해야 합니다.
명령 구조는 다음과 같습니다.
nikto: 실행할 프로그램입니다.-h http://localhost/protected/: 스캔하려는 디렉토리를 직접 가리키는-h(host) 옵션입니다.-id labex:P@ssw0rd123: 사용자 이름과 비밀번호가 포함된-id옵션입니다.
이제 터미널에서 전체 명령을 실행하십시오. 스캔이 완료되는 데 몇 분이 걸릴 수 있습니다.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123
Nikto 가 스캔을 시작합니다. 유효한 자격 증명을 제공했기 때문에 http://localhost/protected/에 액세스하고 해당 디렉토리 내의 취약점을 테스트할 수 있습니다. 출력은 다음과 유사하게 표시됩니다.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: [scan_start_time]
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /: 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.
+ /: Server may leak inodes via ETags, header found with file /, fields: 0x1ed 0x5f7e21e8a2e80
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD.
+ /: Apache/2.4.52 appears to be outdated (current is at least Apache/2.4.54).
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: [scan_end_time] (30 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Nikto 가 보호된 리소스에 성공적으로 액세스했는지 확인
이 단계에서는 스캔 출력을 분석하여 Nikto 가 성공적으로 인증하고 보호된 영역을 스캔했는지 확인합니다. 인증된 스캔의 성공을 나타내는 주요 지표는 광범위한 인증 오류가 없다는 것입니다.
스캔 결과를 분석하는 좋은 방법은 출력을 파일로 저장하는 것입니다. -o (output) 옵션을 사용하여 이를 수행할 수 있습니다. 스캔을 다시 실행하고 보고서를 nikto_report.txt라는 텍스트 파일로 저장해 보겠습니다.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123 -o nikto_report.txt -Format txt
스캔이 완료되면 현재 디렉토리 (~/project) 에 nikto_report.txt라는 파일이 생성됩니다. 이 파일을 검사하여 결과를 확인할 수 있습니다. 성공 여부를 확인하는 빠른 방법은 오류 수를 나타내는 요약 줄을 확인하는 것입니다.
grep 명령을 사용하여 보고서 파일에서 "error(s)"가 포함된 줄을 검색하십시오.
grep "error(s)" nikto_report.txt
출력에는 0 error(s)가 표시되어야 하며, 이는 Nikto 가 요청 시 401 Unauthorized와 같은 문제를 겪지 않았음을 확인합니다. 이는 발견된 항목 목록과 함께 인증된 스캔이 성공했음을 증명합니다.
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
요약
이 실습을 완료하신 것을 축하드립니다! Nikto 를 사용하여 인증된 웹 취약점 스캔을 성공적으로 수행했습니다.
이 실습에서는 다음을 배웠습니다.
curl을 사용하여 HTTP Basic Authentication 으로 보호된 웹 리소스를 식별하는 방법.- 인증된 스캔에 필요한 자격 증명의 형식을 이해하는 방법.
- Nikto 의
-id옵션을 사용하여 사용자 이름과 비밀번호를 제공하는 방법. - 보호된 디렉토리에 대한 스캔을 실행하고 출력을 분석하여 성공을 확인하는 방법.
인증된 스캔을 마스터하는 것은 로그인 장벽 뒤에 숨겨진 취약점을 발견함으로써 웹 애플리케이션의 보안 상태를 훨씬 더 깊고 포괄적으로 평가할 수 있게 해주므로 모든 보안 전문가에게 중요한 기술입니다.


