세상에 취약점 분석 툴은 굉장히 많습니다.
크게 상용 소프트웨어/오픈소스 소프트웨어로 나뉘며 많은 기업에서 사용중이죠.
저또한 수많은 웹 취약점 분석 툴을 사용했었는데요 제가 즐겨 사용하는 툴이 바로 Wapiti3 입니다.
좋아하는 이유는 정말 가볍고 빠릅니다. 그리고 결과도 보기 쉽게 표현해주죠.
더 깊게 들어가면 한계가 드러나지만, 간단히 취약점 분석이 필요할때 이만한게 없더군요.
이제 Wapiti3에 대한설치 방법, 사용법 등을 알아보겠습니다.
이름 | 구분 | 소프트웨어 구분 | 라이센스 | 홈페이지 |
Wapiti3 | 웹 취약점 분석 도구 | 오픈소스 소프트웨어 | GPL2 | https://wapiti-scanner.github.io/ |
1. 설치
첫째 설치 방법은 wapiti3 git 페이지에 가서 소스 코드를 다운로드 하여 직접 설치하는 방법이 있습니다.
https://wapiti-scanner.github.io/
그러나 우리는 간단한 설치를 선호하죠.
두번째 pip를 이용하는 방법
pip install wapiti3
세번째 apt를 이용한 설치 방법
apt install wapiti
그리고 Kali Linux에 기본으로 탑재되어 있으니 바로 사용하시면 됩니다.
2. 사용법
우선 기본적인 명령 형식은 아래와 같습니다.
wapiti -u <http://target> <options>
옵션 정보
Wapiti 3.1.3 (wapiti-scanner.github.io)
usage: wapiti [-h] [-u URL] [--data data] [--scope {page,folder,domain,url,punk}]
[-m MODULES_LIST] [--list-modules] [-l LEVEL] [-p PROXY_URL] [--tor]
[--mitm-port PORT] [-a CREDENTIALS] [--auth-type {basic,digest,ntlm,post}]
[-c COOKIE_FILE] [--drop-set-cookie] [--skip-crawl] [--resume-crawl]
[--flush-attacks] [--flush-session] [--store-session PATH]
[--store-config PATH] [-s URL] [-x URL] [-r PARAMETER] [--skip PARAMETER]
[-d DEPTH] [--max-links-per-page MAX] [--max-files-per-dir MAX]
[--max-scan-time SECONDS] [--max-attack-time SECONDS] [--max-parameters MAX]
[-S FORCE] [--tasks tasks] [--external-endpoint EXTERNAL_ENDPOINT_URL]
[--internal-endpoint INTERNAL_ENDPOINT_URL] [--endpoint ENDPOINT_URL]
[--dns-endpoint DNS_ENDPOINT_DOMAIN] [-t SECONDS] [-H HEADER] [-A AGENT]
[--verify-ssl {0,1}] [--color] [-v LEVEL] [--log OUTPUT_PATH] [-f FORMAT]
[-o OUTPUT_PATH] [-dr] [--no-bugreport] [--update] [--version]
wapiti: error: one of the arguments -u/--url --list-modules --update is required
옵션 상세
대상 사양
-u, --url
스캔의 기준으로 사용할 URL입니다. 스캔 중에 발견된 모든 URL은 기본 URL 및 해당 스캔 범위에 대해 확인됩니다(자세한 내용은 --scope 참조).
이것은 유일한 필수 인수입니다. URL의 스키마 부분은 http 또는 https여야 합니다.
--data<URL_ENCODED_DATA>
특정 POST 요청만 공격해야 하는 경우 이 옵션에 url 인코딩된 문자열을 제공할 수 있습니다. -u옵션 으로 지정된 URL에 대한 POST 매개변수로 사용됩니다 .
--scope
검사 및 공격 범위를 정의합니다. 유효한 선택은 다음과 같습니다.
url : -u 옵션으로 주어진 정확한 기본 URL만 스캔하고 공격합니다.
page : 기본 URL의 경로와 일치하는 모든 URL(모든 쿼리 문자열 변형)을 공격합니다.
폴더 : 기본 URL 값으로 시작하는 모든 URL을 검사하고 공격합니다. 이 기본 URL에는 후행 슬래시가 있어야 합니다(파일 이름 없음).
domain : 기본 URL의 도메인 이름과 일치하는 모든 URL을 검색하고 공격합니다.
punk : 도메인이 무엇이든 발견된 모든 URL을 스캔하고 공격합니다. 해당 범위를 사용하기 전에 두 번 생각하십시오.
공격 사양
-m, --module<MODULE_LIST>
대상에 대해 실행할 공격 모듈(모듈 이름을 쉼표로 구분) 목록을 설정합니다.
기본 동작(옵션이 설정되지 않은 경우)은 가장 일반적인 모듈을 사용하는 것입니다.
공통 모듈은 "common" 키워드를 사용하여 지정할 수도 있습니다.
XXE 모듈과 함께 공통 모듈을 사용하려면 -m common,xxe를 전달할 수 있습니다.
모든 모듈을 활성화하려면 "all" 키워드를 사용하여 수행할 수 있습니다(하지만 권장하지 않음).
공격을 시작하지 않고 스캔을 시작하려면 빈 값(-m "")을 지정하십시오.
http 메서드도 필터링할 수 있습니다(가져오기 또는 게시만). 예: -m "xss:get,exec:post".
--list-modules
사용 가능한 Wapiti 모듈 목록을 간단한 설명과 함께 인쇄한 다음 종료합니다.
-l, --level
이전 버전에서 Wapiti는 원래 URL에 매개변수가 없는 경우에도 쿼리 문자열에 공격 페이로드를 삽입하는 데 사용되었습니다.
그런 식으로 취약점을 찾는 데 성공할 수도 있지만 충분하지 않은 요청이 너무 많이 발생했습니다.
이 동작은 이제 이 옵션 뒤에 숨겨져 있으며 -l을 2로 설정하여 다시 활성화할 수 있습니다.
개발자가 쿼리 문자열 자체를 구문 분석해야 할 때 CGI에서 유용할 수 있습니다.
이 옵션의 기본값은 1입니다.
프록시 및 인증
-p, --proxy<PROXY_URL>
지정된 URL은 HTTP 및 HTTPS 요청에 대한 프록시로 사용됩니다. 이 URL은 http, https, socks 스키마 중 하나를 가질 수 있습니다.
--tor
Wapiti가 Tor 수신기를 사용하도록 합니다(--proxy socks://127.0.0.1:9050/과 동일).
--mitm-port 이 옵션을 사용하면 자동화된 크롤러를 사용하여 대상을 탐색하는 대신 지정된 포트에서 수신 대기하는 mitmproxy 인스턴스를 시작합니다. 가로채는 프록시를 사용하도록 브라우저를 구성한 다음 수동으로 대상을 탐색합니다. 완료되면 콘솔에서 Ctrl+C를 누릅니다.
-a, --auth-cred
대상에서 인증에 사용할 자격 증명을 설정합니다.
주어진 값은 login%password 형식이어야 합니다(%는 구분 기호로 사용됨)
--auth-type
사용할 인증 메커니즘을 설정합니다. 유효한 선택은 basic, digest, ntlm 및 post(웹 로그인 양식)입니다.
NTLM 인증을 사용하려면 추가 Python 모듈을 설치해야 할 수 있습니다. "게시" 인증을 결합 -s하여 로그인 양식을 찾을 위치를 지정할 수 있습니다.
-c, --cookie<COOKIE_FILE_OR_BROWSER_NAME>
Wapiti JSON 쿠키 파일에서 쿠키를 로드합니다. 자세한 내용은 wapiti-getcookie(1)를 참조하십시오.
"chrome" 또는 "firefox"를 값으로 전달하여 브라우저에서 쿠키를 가져올 수도 있습니다(MS Edge는 지원되지 않음).
--drop-set-cookie
HTTP 응답에 제공된 쿠키를 무시합니다. 를 사용하여 로드된 쿠키는 -c유지됩니다.
세션
Wapiti 3.0.0부터 스캔된 URL, 발견된 취약점 및 공격 상태는 Wapiti 세션 파일로 사용되는 sqlite3 데이터베이스에 저장됩니다.
주어진 기본 URL 및 범위에 대한 이전 스캔 세션이 존재할 때 기본 동작은 스캔 및 공격 상태를 재개하는 것입니다.
다음 옵션을 사용하면 이 동작을 우회할 수 있습니다.
--skip-crawl
이전 스캔이 수행되었지만 완료되지 않은 경우 스캔을 재개하지 마십시오. 추가 검사 없이 현재 알려진 URL에 대한 공격이 이루어집니다.
--resume-crawl
크롤링이 이전에 중지되고 공격이 시작된 경우 기본 동작은 세션이 복원되면 크롤링을 건너뛰는 것입니다.
세션에서 취약점과 공격을 유지하면서 스캔 프로세스를 계속하려면 이 옵션을 사용하십시오.
--flush-attacks
발견된 취약점과 어떤 모듈이 어떤 URL을 공격했는지에 대한 모든 것을 잊어버리십시오.
스캔(크롤링) 정보만 유지됩니다.
--flush-session
주어진 범위의 대상에 대한 모든 것을 잊어버리십시오.
--store-session
세션(.db 및 .pkl) 파일을 저장하기 위한 대체 경로를 지정합니다.
--store-config
apps.json특정 모듈( 및 nikto_db) 파일 을 저장하기 위한 대체 경로를 지정 합니다.
스캔 및 공격 조정
-s, --start
어떤 이유로 Wapiti가 기본 URL에서 URL을 찾지 못하는 경우에도 스캔을 시작하는 데 사용할 URL을 추가할 수 있습니다.
이러한 URL에는 기본 URL과 마찬가지로 깊이가 0으로 지정됩니다.
이 옵션은 여러 번 호출할 수 있습니다.
파일 이름을 지정할 수도 있으며 Wapiti는 주어진 파일(UTF-8로 인코딩되어야 함)에서 URL을 한 줄에 하나씩 읽습니다. 와 결합하여 --auth-type=postWapiti는 제공된 첫 번째 URL에서 로그인 양식을 찾고 주어진 자격 증명으로 인증을 시도합니다.
-x, --exclude
주어진 URL이 스캔되지 않도록 합니다. 일반적으로 세션 쿠키의 파괴를 방지하기 위해 로그아웃 URL을 제외하는 것입니다(--cookie로 쿠키 파일을 지정한 경우).
이 옵션은 여러 번 적용할 수 있습니다. 매개변수로 지정된 제외 URL에는 기본 패턴 일치를 위한 와일드카드가 포함될 수 있습니다.
-r, --remove
스캔한 URL에서 주어진 매개변수가 발견되면 자동으로 제거됩니다(URL 수정).
이 옵션은 여러 번 사용할 수 있습니다.
--skip
주어진 매개변수는 URL과 양식에 보관되지만 공격을 받지는 않습니다.
취약하지 않은 매개변수를 이미 알고 있는 경우에 유용합니다.
-d, --depth
Wapiti는 웹사이트를 크롤링할 때 발견된 각 URL에 깊이 값을 제공합니다.
기본 URL 및 추가 시작 URL(-s)에는 깊이가 0으로 지정
됩니다. 해당 URL에서 찾은 각 링크의 깊이는 1이 되는 식입니다.
기본 최대 깊이는 40이며 매우 큽니다.
이 제한은 스캔이 언젠가는 중지되도록 합니다.
빠른 스캔의 경우 5보다 낮은 깊이를 권장합니다.
--max-links-per-page
이것은 크롤러가 발견한 URL의 수를 줄일 수 있는 또 다른 옵션입니다.
각 웹페이지의 첫 번째 MAX 링크만 추출됩니다.
동일한 링크가 다른 웹페이지에 나타날 수 있으므로 이 옵션은 실제로 효과적이지 않습니다.
쿼리 문자열이 없는 웹 페이지가 많은 경우와 같이 드문 경우에 유용해야 합니다.
--max-files-per-dir
웹 서버에 있는 각 폴더에서 크롤링할 URL 수를 제한합니다.
경로에 슬래시가 있는 URL은 반드시 Wapiti가 있는 폴더가 있는 그대로 처리되는 것은 아닙니다.
이전 옵션과 마찬가지로 특정 상황에서만 유용해야 합니다.
--max-scan-time
SECONDS아직 실행 중인 경우 몇 초 후에 스캔을 중지합니다 . 다른 프로세스에서 스캔을 자동화하는 데 유용해야 합니다(연속 테스트).
--max-attack-time
각 공격 모듈 SECONDS은 아직 실행 중이면 몇 초 후에 중지됩니다. 다른 프로세스에서 스캔을 자동화하는 데 유용해야 합니다(연속 테스트).
--max-parameters
MAX 입력 매개변수를 초과하는 URL 및 양식은 공격 모듈을 실행하기 전에 폐기됩니다.
-S, --scan-force
URL 또는 양식에 더 많은 입력 매개변수가 있을수록 Wapiti는 더 많은 요청을 보냅니다.
요청의 합계는 빠르게 증가할 수 있으며 40개 이상의 입력 필드가 있는 양식을 공격하는 데 엄청난 시간이 걸릴 수 있습니다.
Wapiti는 매개변수 수가 증가할 때 주어진 패턴(동일한 변수 이름)에 대해 스캔되는 URL의 수를 줄이기 위해 수학 공식을 사용합니다.
공식은 maximum_allowed_patterns = 220 / (math.exp(number_of_parameters * factor) ** 2) factor가 옵션으로 제공한 값에 의한 내부 값 컨트롤러인 곳입니다.
사용 가능한 선택은 편집증, 교활함, 예의바름, 정상, 공격적, 미친 것입니다.
기본값은 normal(1개 매개변수의 경우 147개 URL, 5개의 경우 30개, 10개의 경우 5개, 14개 이상의 경우 1개)입니다.
Insane 모드는 이러한 제한 계산을 제거하기만 하면 모든 URL이 공격을 받게 됩니다.
편집증 모드는 1개의 매개변수, 5개의 매개변수, 3개 이상의 매개변수로 30개의 URL을 공격합니다.
--tasks
Wapiti가 사용해야 하는 동시 작업 수를 설정합니다.
Wapiti는 이를 위해 Python의 asyncio 프레임워크를 활용합니다.
엔드포인트 옵션
일부 공격 모듈은 HTTP 엔드포인트를 사용하여 취약점을 확인합니다.
예를 들어 SSRF 모듈은 대상 스크립트가 해당 URL을 가져오려고 하는지 확인하기 위해 끝점 URL을 웹 페이지 인수에 삽입합니다.
기본 HTTP 끝점은 http://wapiti3.ovh/ 입니다. 모듈이 작동하려면 대상과 컴퓨터가 해당 끝점에 조인할 수 있어야 합니다.
내부 침투 테스트에서 이 끝점은 대상에 액세스할 수 없으므로 고유한 끝점을 설정하는 것이 좋습니다.
--internal-endpoint 외부 엔드포인트와 다른 내부 엔드포인트를 지정할 수 있습니다.
내부 엔드포인트는 Wapiti에서 공격 결과를 가져오는 데 사용됩니다.
NAT 뒤에 있는 경우 로컬 서버의 URL일 수 있습니다(예: http://192.168.0.1/ ).
--external-endpoint 엔드포인트 URL(취약점이 있는 경우 대상이 가져올 URL)을 설정합니다.
자체 엔드포인트를 사용하면 NIDS 또는 WAF에 잡히는 위험을 줄일 수 있습니다.
--endpoint 이 옵션은 내부 및 외부 끝점 URL을 모두 동일한 값으로 설정합니다.
--dns-endpoint 이 옵션은 log4shell 공격 모듈에 사용할 DNS 끝점을 지정합니다.
기본값은 dns.wapiti3.ovh입니다.
HTTP 및 네트워크 옵션
-t, --timeout 실패를 고려하기 전에 HTTP 응답을 기다리는 시간(초)입니다.
-H,--header
Wapiti에서 보낸 모든 요청에 삽입할 사용자 지정 HTTM 헤더를 설정합니다. 이 옵션은 여러 번 사용할 수 있습니다.
값은 표준 HTTP 헤더 행이어야 합니다(매개변수와 값은 : 기호로 구분).
-A, --user-agent
Wapiti의 기본 동작은 TorBrowser와 동일한 사용자 에이전트를 사용하여 표준 웹사이트 또는 .onion 웹사이트를 크롤링할 때 신중하게 만드는 것입니다.
그러나 이 옵션이 여기에 있으므로 일부 제한을 우회하기 위해 변경해야 할 수도 있습니다.
--verify-ssl
Wapiti는 기본적으로 인증서 유효성 검사를 신경 쓰지 않습니다. 해당 옵션에 값으로 1을 전달하여 해당 동작을 변경할 수 있습니다.
출력 옵션
Wapiti는 상태를 표준 출력으로 인쇄합니다. 다음 두 가지 옵션을 사용하여 출력을 조정할 수 있습니다.
--color
출력은 정보의 심각도에 따라 색상이 지정됩니다(빨간색은 중요, 주황색은 경고, 녹색은 정보).
-v, --verbose
출력에 대한 자세한 표시 수준을 설정합니다. 가능한 값은 조용(O), 보통(1, 기본 동작) 및 상세(2)입니다.
--log<OUTPUT_PATH> 콘솔에서 정보를 얻는 것 외에도 로컬 파일에 출력을 기록할 수도 있습니다.
디버그 정보도 해당 파일에 저장되므로 이 옵션은 주로 와피티를 디버그하는 데 사용해야 합니다.
보고서 옵션
Wapiti는 공격 프로세스가 끝나면 보고서를 생성합니다. 여러 형식의 보고서를 사용할 수 있습니다.
-f, --format
보고서 형식을 설정합니다. 유효한 선택은 json, html, txt 및 xml입니다.
HTML 보고서가 응답성을 높이기 위해 다시 작성되었지만 발견된 취약점이 많이 있는 경우에는 여전히 실행 불가능합니다.
-o, --output<OUTPUT_PATH>
보고서가 생성될 경로를 설정합니다.
-dr, --detailed-report HTTP 응답(헤더 및 본문)이 보고서에 표시됩니다.
기타 옵션
--version
Wapiti 버전을 인쇄한 다음 종료합니다.
--no-bugreport
포착되지 않은 예외로 인해 Wapiti 공격 모듈이 충돌하는 경우 Wapiti 안정성을 개선하기 위해 버그 보고서가 생성되어 분석을 위해 전송됩니다. 보고서 내용만 보관됩니다.
해당 옵션을 사용하여 보고서가 전송되지 않도록 할 수 있습니다.
--update 특정 Wapiti 모듈을 업데이트( apps.json및 nikto_db파일의 새 버전 다운로드)한 다음 종료합니다. 와 결합하여 --store-config다운로드한 파일을 저장할 위치를 지정할 수 있습니다.
-h, --help
자세한 옵션 설명을 표시합니다. 자세한 내용은 이 맨페이지에서 확인할 수 있습니다.
모듈 정보
SQL Injections (Error based, boolean based, time based) and XPath Injections
Cross Site Scripting (XSS) reflected and permanent
File disclosure detection (local and remote include, require, fopen, readfile...)
Command Execution detection (eval(), system(), passtru()...)
XXE (Xml eXternal Entity) injection
CRLF Injection
Search for potentially dangerous files on the server (thanks to the Nikto db)
Bypass of weak htaccess configurations
Search for copies (backup) of scripts on the server
Shellshock
Folder and file enumeration (DirBuster like)
Server Side Request Forgery (through use of an external Wapiti website)
Open Redirects
Detection of uncommon HTTP methods (like PUT)
Basic CSP Evaluator
Brute Force login form (using a dictionary list)
Checking HTTP security headers
Checking cookie security flags (secure and httponly flags)
Cross Site Request Forgery (CSRF) basic detection
Fingerprinting of web applications using the Wappalyzer database
Enumeration of Wordpress and Drupal modules
Detection of subdomain takeovers vulnerabilities
Log4Shell vulnerability detection (CVE-2021-44228)
Wapiti는 모듈식 취약점 분석 도구입니다.
-m 옵션으로 조정이 가능하며 -m 옵션이 없을 경우 모든 모듈을 돌립니다.
모듈 사용 예
wapiti -u http://sites/ -m sql,xss,xxe
그리고 Wapiti-getcookie 를 사용하여 인증을 사용할 수 있습니다.
타겟 도메인의 로그인 페이지를 지정 하면 대화형 모드로 인증 값을 입력할 수 있습니다.
wapiti-getcookie -u http://target/login.jsp -c cookie.json
또한 -d 옵션을 통해 값을 입력 후 명령을 보낼 수 있습니다.
wapiti-getcookie -u http://target/login.jsp -c cookie.json -d "id=admin&passwd=pass&login__auto_login=0"
최종적으로 wapiti 명령 형식은 아래와 같을 수 있습니다.
wapiti --level 1 -u http://target/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentest' -p http://proxy:5556
위 명령을 풀이하자면
-u http://target 을 대상으로
--level 1: 레벨1의 강도로 (레벨2는 URL에 매개변수가 없어도 쿼리에 공격페이로드를 삽입합니다. 원래 2가 기본값이었으나 너무 많은 요청이 발생하여 기본값이 1로 바뀌었다고 합니다.)
-f html: html 형식으로 결과 출력 (기본이 html입니다.)
-o /tmp/vulns.html: 아웃풋 옵션을 사용하여 경로 지정
-m all: 모든 모듈을 사용 (기본값)
--color: 취약점의 중요도에 따라 색깔이 부여됨 빨간색 중요, 주황색 경고, 녹색, 정보성
--scope folder: 기본 URL 값으로 시작하는 모든 URL을 검사하고 공격합니다. 이 기본 URL에는 후행 슬래시가 있어야 합니다(파일 이름 없음)
--flush-session: 주어진 세션 정보를 모두 없앰
-A 'Pentest': user-agent 지정 (와피티의 기본 동작은 TorBrowser와 동일한 User-Agent를 사용하기 때문에 표준 웹 사이트나 .onion 웹 사이트를 탐색할 때 구분됩니다. 그러나 일부 제한을 무시하려면 이 옵션을 변경해야 할 수 있습니다.)
-p http://proxy:5556: 프록시 지정 (http, https, socks중에 선택가능)
점검 결과물
Wapiti3는 결과물이 기본으로 HTML형식으로 떨어집니다.
Summary에 취약점 개수가 나오고, 아래로 내리면 상세 취약점 정보를 확인할 수 있습니다.
이상 웹 취약점 분석도구 Wapiti3에 대하여 알아보았습니다.
'보안분석' 카테고리의 다른 글
[보안분석] 윈도우10에 내장된 샌드박스 기능 (0) | 2022.09.07 |
---|---|
[보안분석] Kali Linux 패키지 설치 방법 (1) | 2022.08.30 |
[보안분석] 윈도우에서 WSL을 이용하여 Kali Linux 사용하기 (0) | 2022.08.29 |
최근댓글