==================================
Wapiti - 웹 취약점 스캐너
.. image:: https://img.shields.io/pypi/v/wapiti3?label=PyPI&logo=PyPI&logoColor=white&color=blue
:alt: PyPI version
:target: https://pypi.python.org/pypi/wapiti3
.. image:: https://img.shields.io/pypi/pyversions/wapiti3
:alt: Supported Python versions
:target: https://github.com/wapiti-scanner/wapiti/blob/master/INSTALL.md
.. image:: https://img.shields.io/github/license/wapiti-scanner/wapiti
:alt: License: GPL-2.0
:target: https://github.com/wapiti-scanner/wapiti/blob/master/LICENSE
.. image:: https://img.shields.io/pypi/dd/wapiti3
:alt: Downloads per day on PyPi
:target: https://pypi.python.org/pypi/wapiti3
.. image:: https://codecov.io/gh/wapiti-scanner/wapiti/branch/master/graph/badge.svg?token=GFEIORAFB8
:target: https://codecov.io/gh/wapiti-scanner/wapiti
Wapiti는 Python으로 작성된 웹 취약점 스캐너입니다.
http://wapiti-scanner.github.io/
요구 사항
올바르게 작동하려면 Wapiti에는 Python 3.12, 3.13 또는 3.14가 필요합니다.
setup.py 스크립트나 pip install wapiti3을 사용하면 모든 Python 모듈 의존성이 자동으로 설치됩니다.
설치에 대한 자세한 내용은 INSTALL.md <https://github.com/wapiti-scanner/wapiti/blob/master/INSTALL.md>__를 참조하세요.
Windows에서 Wapiti를 실행하려면 WSL <https://learn.microsoft.com/en-us/training/modules/get-started-with-windows-subsystem-for-linux/>__을 사용할 수 있습니다.
작동 방식
Wapiti는 "블랙박스(black-box)" 취약점 스캐너로 작동합니다. 즉, 웹 애플리케이션의 소스 코드를 분석하지 않고 퍼저(fuzzer)처럼 작동하여, 배포된 웹 애플리케이션의 페이지를 스캔하고 링크와 폼을 추출한 뒤 스크립트를 공격하고 페이로드를 전송하여 오류 메시지, 특수 문자열 또는 비정상적인 동작을 찾아냅니다.
일반 기능
- 다양한 형식(HTML, XML, JSON, TXT, CSV, Markdown)의 취약점 보고서를 생성합니다.
- 스캔이나 공격을 일시 중지하고 재개할 수 있습니다(sqlite3 데이터베이스를 사용하는 세션 메커니즘).
- 터미널에서 색상을 사용하여 취약점을 강조할 수 있습니다.
- 다양한 수준의 상세 출력(verbosity)을 제공합니다.
- 공격 모듈을 빠르고 쉽게 활성화/비활성화할 수 있습니다.
- 페이로드 추가는 텍스트 파일에 한 줄을 추가하는 것만큼 간단합니다.
- HTTP 요청을 수행하는 동시 작업 수를 구성할 수 있습니다.
탐색 기능
- HTTP, HTTPS 및 SOCKS5 프록시를 지원합니다.
- 대상에 대한 HTTP 인증(Basic, Digest, NTLM)
- 로그인 폼 작성을 통한 인증.
- 스캔 범위를 제한하는 기능(도메인, 폴더, 페이지, URL).
- URL에서 하나 이상의 매개변수를 자동으로 제거.
- 스캔 무한 루프에 대한 여러 안전 장치(예: 매개변수 값의 제한).
- 먼저 탐색할 URL을 설정할 수 있습니다(범위에 없더라도).
- 스캔 및 공격에서 일부 URL을 제외할 수 있습니다(예: 로그아웃 URL).
- Chrome 또는 Firefox 브라우저에서 쿠키를 가져오거나
wapiti-getcookie 도구를 사용합니다.
- SSL 인증서 검증을 활성화/비활성화할 수 있습니다.
- JavaScript에서 URL 추출을 시도합니다(매우 기본적인 JS 인터프리터).
- HTML5 인식(최신 HTML 태그 이해).
- 크롤러 동작과 제한을 제어하는 여러 옵션.
- 공격 중 일부 매개변수 이름을 건너뜁니다.
- 스캔 프로세스의 최대 시간을 설정합니다.
- 사용자 정의 HTTP 헤더를 추가하거나 사용자 정의 User-Agent를 설정합니다.
- 크롤링에 Firefox 헤드리스 브라우저 사용
- 복잡한 인증 사례를 위해 자체 Python 코드 로드(
--form-script 옵션 참조)
- Wappalyzer 데이터베이스를 업데이트하기 위한 사용자 정의 URL 또는 PATH 추가
- OpenAPI(swagger) 파일이 주어진 REST API 스캔
지원되는 공격
- SQL 인젝션(오류 기반, 부울 기반, 시간 기반) 및 XPath 인젝션
- LDAP 인젝션(오류 기반 및 부울 기반)
- 반사형(Reflected) 및 저장형(Permanent) 크로스 사이트 스크립팅(XSS)
- 파일 노출 탐지(로컬 및 원격 include, require, fopen, readfile 등)
- 명령 실행 탐지(eval(), system(), passtru() 등)
- XXE(XML 외부 엔티티) 인젝션
- CRLF 인젝션
- 서버에서 잠재적으로 위험한 파일 검색(Nikto DB 덕분)
- 취약한 htaccess 구성 우회
- 서버에서 스크립트 사본(백업) 검색
- Shellshock
- 폴더 및 파일 열거(DirBuster 유사)
- 서버 측 요청 위조(SSRF, Server Side Request Forgery) (외부 Wapiti 웹사이트를 통해)
- 오픈 리다이렉트(Open Redirects)
- 일반적이지 않은 HTTP 메서드 탐지(PUT 등)
- 기본 CSP 평가기
- 사전 목록을 사용한 로그인 폼 무차별 대입 공격
- HTTP 보안 헤더 확인
- 쿠키 보안 플래그 확인(secure 및 httponly 플래그)
- CSRF(Cross Site Request Forgery, 교차 사이트 요청 위조) 기본 탐지
- Wappalyzer 데이터베이스를 사용한 웹 애플리케이션 핑거프린팅, 관련 CVE 정보 제공
- Wordpress, Drupal, Joomla, Magento, SPIP, Typo3 등의 CMS 모듈 열거
- 서브도메인 탈취 탐지
- Log4Shell(CVE-2021-44228) 탐지
- Spring4Shell(CVE-2022-22965) 탐지
- HTTPS 리다이렉션 확인
- 파일 업로드 취약점 확인
- 네트워크 장치 탐지
- JSON 본문에도 페이로드 주입
Wapiti는 공격에 GET 및 POST HTTP 메서드를 모두 지원합니다.
또한 multipart를 지원하며 파일명(업로드)에 페이로드를 주입할 수 있습니다.
이상 징후(예: 500 오류 및 시간 초과)가 발견되면 경고를 표시합니다.
저장형(영구적) XSS와 반사형 XSS 취약점을 구분합니다.
모듈 이름
위에서 언급한 공격은 다음 모듈 이름에 연결됩니다:
- backup (웹 서버에서 스크립트 및 아카이브 사본 검색)
- brute_login_form (사전 목록을 사용한 로그인 폼 무차별 대입 공격)
- buster (DirBuster 유사 모듈)
- cms (CMS 및 해당 버전을 탐지하는 스캔)
- cookieflags (Secure 및 HttpOnly 플래그 확인)
- crlf (HTTP 헤더의 CR-LF 인젝션)
- csp (CSP 부재 또는 취약한 CSP 구성 탐지)
- csrf (CSRF로부터 보호되지 않거나 취약한 anti-CSRF 토큰을 사용하는 폼 탐지)
- exec (코드 실행 또는 명령 인젝션)
- file (경로 탐색, 파일 포함 등)
- htaccess (잘못 구성된 htaccess 제한)
- htp (HashThePlanet 데이터베이스를 사용하여 웹 기술 식별)
- http_headers (HTTP 보안 헤더 확인)
- https_redirect (HTTPS 리다이렉션 확인)
- ldap (오류 기반 및 부울 기반 LDAP 인젝션 탐지)
- log4shell (CVE-2021-44228에 취약한 웹사이트 탐지)
- methods (PUT과 같은 일반적이지 않은 사용 가능한 HTTP 메서드 검색)
- network_device (네트워크 장치 탐지를 위해 일반적인 파일을 찾음)
- nikto (URL 존재 여부를 테스트하고 응답을 확인하여 알려진 취약점 검색)
- permanentxss (xss 모듈 실행 후 전체 대상을 다시 스캔하여 이전에 오염된 페이로드를 찾음)
- printer (네트워크 프린터를 탐지하고 모델 및 펌웨어 정보를 검색)
- redirect (오픈 리다이렉트)
- shellshock (Shellshock 공격 테스트,
Wikipedia <https://en.wikipedia.org/wiki/Shellshock_%28software_bug%29>__ 참조)
- spring4shell (CVE-2020-5398에 취약한 웹사이트 탐지)
- sql (오류 기반 및 부울 기반 SQL 인젝션 탐지)
- ssl (SSL/TLS 인증서 구성의 보안 평가,
sslscan <https://github.com/rbsec/sslscan>__ 필요)
- ssrf (서버 측 요청 위조)
- takeover (서브도메인 탈취)
- timesql (시간 기반 방법으로 탐지된 SQL 인젝션 취약점)
- upload (파일 업로드 취약점)
- wapp (공격 모듈이 아님. 대상에서 사용 중인 웹 기술을 버전 및 카테고리와 함께 검색하고 해당 CVE를 찾음)
- wp_enum (Wordpress 웹사이트의 플러그인 및 테마 열거)
- xss (XSS 인젝션 모듈)
- xxe (XML 외부 엔티티 공격)
모듈 이름은 "-m" 또는 "--module" 옵션을 사용하여 쉼표로 구분된 목록으로 지정할 수 있습니다.
최상의 결과를 얻는 방법
더 많은 취약점을 찾으려면(일부 공격은 오류 기반이므로) 웹서버 구성을 수정할 수 있습니다.
예를 들어 PHP 구성에서 다음 값을 설정할 수 있습니다:
.. code-block::
safe_mode = Off
display_errors = On (recommended)
magic_quotes_gpc = Off
allow_url_fopen = On
mysql.trace_mode = On
도움말 얻는 곳
프롬프트에서 다음 명령을 입력하면 기본 사용법을 확인할 수 있습니다:
각 옵션에 대한 자세한 내용은 매뉴얼 페이지(wapiti.1 또는 wapiti.1.html)에서도 확인할 수 있습니다.
더 포괄적인 내용을 담은 공식 위키도 있습니다: https://github.com/wapiti-scanner/wapiti/wiki
다른 질문이 있다면 먼저 FAQ <https://github.com/wapiti-scanner/wapiti/blob/master/doc/FAQ.md>__를 확인하세요.
버그를 발견하면 이슈를 등록하세요: https://github.com/wapiti-scanner/wapiti/issues
Wapiti 프로젝트에 기여하는 방법
다음과 같이 참여할 수 있습니다:
라이선스
Wapiti는 GNU 일반 공중 사용 허가서 버전 2(GPL)로 배포됩니다.
소스 코드는 Github <https://github.com/wapiti-scanner/wapiti>__에서 확인할 수 있습니다.
Nicolas SURRIBAS가 만들었습니다.
스폰서
Cyberwatch https://cyberwatch.com/
Security For Everyone https://securityforeveryone.com/
IP-Nina https://ip-ninja.com/
면책 조항
Wapiti는 사이버 보안 소프트웨어입니다. 제공된 대상에 대해 보안 평가를 수행하며, 이로 인해 대상에 오작동과 충돌이 발생하고 잠재적인 데이터 손실이 발생할 수 있습니다.
소유자의 사전 동의 없이 대상을 공격하는 데 Wapiti를 사용하는 것은 불법입니다. 모든 관련 현지 법률을 준수하는 것은 최종 사용자의 책임입니다.
Wapiti 프로젝트에 참여한 개발자와 관계자는 이 프로그램으로 인해 발생한 오용 또는 손해에 대해 어떠한 책임도 지지 않습니다.