
취약점을 탐지하고 플러그인/테마/사용자를 열거하며 약한 비밀번호를 점검하는 WordPress 보안 스캐너입니다. 실시간 취약점 데이터를 위해 WPScan API와 통합됩니다.
WordPress 보안 스캐너
WPScan WordPress 취약점 데이터베이스 - WordPress 보안 플러그인
Stream error in the HTTP/2 framing layer 오류가 발생할 수 있습니다Kali Linux와 같은 침투 테스트 배포판을 사용하는 경우, 가능하다면 패키지 관리자를 통해 wpscan을 설치/업데이트하는 것이 좋습니다.
brew install wpscanteam/tap/wpscan
WPScan은 네이티브 확장(native extension)이 포함된 젬(예: yajl-ruby, nokogiri, ffi)에 의존하므로, gem install wpscan을 실행하기 전에 C 툴체인과 Ruby 개발 헤더가 설치되어 있어야 합니다. 없으면 Failed to build gem native extension 또는 make: x86_64-linux-gnu-gcc: No such file or directory와 같은 오류로 설치가 실패합니다 (참조: #1844).
sudo apt install build-essential ruby-dev
sudo dnf install @development-tools ruby-devel
sudo pacman -S base-devel ruby
sudo apk add build-base ruby-dev
xcode-select --install).그런 다음 젬을 설치합니다:
gem install wpscan
macOS에서 Apple의 System Integrity Protection(SIP)으로 인해 Gem::FilePermissionError가 발생하면, RVM을 설치한 후 wpscan을 다시 설치하거나 sudo gem install -n /usr/local/bin wpscan을 실행하세요 (참조: #1286)
wpscan --update 명령으로 로컬 데이터베이스를 업데이트할 수 있습니다.
WPScan 자체의 업데이트는 WPScan이 (사전) 설치된 방식에 따라 gem update wpscan 또는 패키지 관리자(Kali Linux와 같은 배포판에서는 apt-get update && apt-get upgrade가 매우 중요합니다)를 통해 수행합니다.
docker pull wpscanteam/wpscan 명령으로 저장소를 가져옵니다.
사용자 이름 열거
docker run -it --rm -v wpscan-db:/wpscan/.cache/wpscan/db wpscanteam/wpscan --url https://target.tld/ --enumerate u
사용자 이름 범위 열거
docker run -it --rm -v wpscan-db:/wpscan/.cache/wpscan/db wpscanteam/wpscan --url https://target.tld/ --enumerate u1-100
** u1-100을 원하는 범위로 바꾸세요.
이미지에는 빌드 시점에 로컬 데이터베이스 사본이 포함되어 있습니다. 위 예제 명령은 --rm을 사용하므로 실행 중 수행된 데이터베이스 업데이트는 컨테이너가 종료되면 삭제되며, 다음 실행 시 (오래되었을 수 있는) 포함된 사본으로 다시 시작합니다.
/wpscan/.cache/wpscan/db(컨테이너 내 wpscan 사용자의 캐시 디렉터리)에 명명된 볼륨(named volume)을 마운트하면 실행 간에 데이터베이스가 유지되므로 wpscan --update는 체크섬이 실제로 변경된 파일만 다시 다운로드하며, 5일 경과 알림은 로컬 설치와 동일하게 동작합니다:
docker run -it --rm -v wpscan-db:/wpscan/.cache/wpscan/db wpscanteam/wpscan --update
명명된 볼륨(named volume)은 아직 존재하지 않는 경우 첫 사용 시 자동으로 생성됩니다.
전체 사용자 문서는 여기에서 확인할 수 있습니다: https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation
wpscan --url blog.tld 이 명령은 속도와 정확성 사이의 적절한 균형을 유지하는 기본 옵션으로 블로그를 스캔합니다. 버전 감지, 테마 감지, 흥미로운 발견 사항 탐색을 수행합니다. 플러그인, 테마, 사용자, 백업 폴더 등을 열거하려면 -e 옵션을 사용하세요 (예: 전체 플러그인은 -e ap, 취약한 플러그인은 -e vp, 백업 폴더는 -e bf).
더 은밀한 접근이 필요하다면 wpscan --stealthy --url blog.tld를 사용할 수 있습니다.
따라서 --enumerate 옵션을 사용할 때는 기본값이 'passive'이므로 --plugins-detection을 그에 맞게 설정하는 것을 잊지 마세요.
더 많은 옵션을 보려면 터미널을 열고 wpscan --help를 입력하세요 (소스에서 wpscan을 빌드한 경우 git 저장소 밖에서 명령을 입력해야 합니다)
데이터베이스 위치는 XDG Base Directory Specification을 따릅니다:
~/.cache/wpscan/db (설정된 경우 $XDG_CACHE_HOME/wpscan/db)~/.wpscan/db (하위 호환성을 위해 유지되는 레거시 경로)기본 HTTP 캐시 및 쿠키 저장소(cookie jar)와 같은 런타임 파일은 $TMPDIR이 설정된 경우 $TMPDIR/wpscan 아래에 저장됩니다. 그렇지 않으면 동일한 사용자별 XDG 캐시 디렉터리(예: ~/.cache/wpscan/cache 및 ~/.cache/wpscan/cookie_jar.txt)를 사용합니다. 이러한 기본값은 --cache-dir 및 --cookie-jar 옵션으로 재정의할 수 있습니다.
기존 설치를 XDG 경로로 마이그레이션하려면:
mv ~/.wpscan ~/.cache/wpscan
WPScan CLI 도구는 WordPress Vulnerability Database API를 사용하여 WordPress 취약점 데이터를 실시간으로 가져옵니다. WPScan이 취약점 데이터를 가져오려면 아래에서 설명하는 대로 --api-token 옵션 또는 구성 파일을 통해 API 토큰을 제공해야 합니다. API 토큰은 WPScan.com에서 계정을 등록하면 얻을 수 있습니다.
하루 최대 25회의 API 요청이 무료로 제공되며, 이는 대부분의 WordPress 웹사이트를 하루에 최소 한 번 스캔하기에 충분합니다. 일일 25회의 API 요청이 모두 소진되면 WPScan은 취약점 데이터 없이 정상적으로 계속 작동합니다.
WPScan은 구성 파일에서 모든 옵션(--url 포함)을 로드할 수 있으며, 다음 위치가 확인됩니다(순서: 먼저부터 나중까지):
$XDG_CONFIG_HOME/wpscan/scan.json (XDG_CONFIG_HOME이 설정된 경우)$XDG_CONFIG_HOME/wpscan/scan.yml (XDG_CONFIG_HOME이 설정된 경우)~/.config/wpscan/scan.json (XDG_CONFIG_HOME이 설정되지 않은 경우)~/.config/wpscan/scan.yml (XDG_CONFIG_HOME이 설정되지 않은 경우)~/.wpscan/scan.json~/.wpscan/scan.ymlpwd/.wpscan/scan.jsonpwd/.wpscan/scan.yml이러한 파일이 존재하면 cli_options 키의 옵션이 로드되며 중복으로 발견되면 재정의됩니다.
예:
~/.config/wpscan/scan.yml:
cli_options:
proxy: 'http://127.0.0.1:8080'
verbose: true
pwd/.wpscan/scan.yml:
cli_options:
proxy: 'socks5://127.0.0.1:9090'
url: 'http://target.tld'
현재 디렉터리(pwd)에서 wpscan을 실행하는 것은 wpscan -v --proxy socks5://127.0.0.1:9090 --url http://target.tld를 실행하는 것과 동일합니다.
다른 명령줄 옵션은 snake case 규칙을 사용하여 추가할 수 있습니다. 예:
cli_options:
user_agent: "Testing UA"
max_threads: 1
headers: "Custom-Header: aaaa; Another Header: bbb"
위에서 언급한 기능은 API 토큰을 구성 파일에 보관하여 매번 CLI로 제공하지 않아도 되게 해 주므로 유용합니다. 이렇게 하려면 아래 내용이 포함된 ~/.config/wpscan/scan.yml 파일을 만드세요:
cli_options:
api_token: 'YOUR_API_TOKEN'
API 토큰은 WPSCAN_API_TOKEN ENV 변수가 존재하는 경우 자동으로 로드됩니다. --api-token CLI 옵션도 함께 제공된 경우에는 CLI의 값이 사용됩니다.
WPScan API 연결 문제가 발생하는 경우 https://status.wpscan.com/에서 서비스 상태를 확인할 수 있습니다. API 연결 오류가 발생하면 WPScan은 오류 메시지에 상태 페이지 링크를 포함합니다.
wpscan --url https://target.tld/ --enumerate u
사용자 이름 범위 열거
wpscan --url https://target.tld/ --enumerate u1-100
** u1-100을 원하는 범위로 바꾸세요.
wpscan --url https://target.tld/ --enumerate bf
이 옵션은 널리 사용되는 WordPress 백업 플러그인이 생성한 백업 폴더를 확인합니다. 이러한 폴더에는 데이터베이스 덤프, 구성 파일 또는 전체 사이트 백업과 같은 민감한 데이터가 포함될 수 있습니다.
WPScan 소프트웨어(이하 "WPScan"이라 함)는 이중 라이선스로 제공됩니다 - Copyright 2011-2019 WPScan Team.
WPScan의 상업화를 포함하는 경우 상업용 유료(비자유) 라이선스가 필요합니다. 그 외에는 아래에 명시된 조건에 따라 WPScan을 무료로 사용할 수 있습니다.
1.1 "License"란 본 문서를 의미합니다.