
취약점을 탐지하고 플러그인/테마/사용자를 열거하며 약한 비밀번호를 점검하는 WordPress 보안 스캐너입니다. 실시간 취약점 데이터를 위해 WPScan API와 통합됩니다.
<p align="center">
<a href="https://wpscan.com/">
<img src="https://assets.kitploit.com/production/public/readmes/203/c3143aca4c894753cffdf1b314e19df72e588310fccde3db2d2e09dfbf4b2474.png" alt="WPScan 로고">
</a>
</p>
<h3 align="center">WPScan</h3>
<p align="center">
WordPress 보안 스캐너
<br>
<br>
<a href="https://wpscan.com/" title="홈페이지" target="_blank">WPScan WordPress 취약점 데이터베이스</a> - <a href="https://wordpress.org/plugins/wpscan/" title="워드프레스 보안 플러그인" target="_blank">WordPress 보안 플러그인</a>
</p>
<p align="center">
<a href="https://badge.fury.io/rb/wpscan" target="_blank"><img src="https://badge.fury.io/rb/wpscan.svg"></a>
<a href="https://hub.docker.com/r/wpscanteam/wpscan/" target="_blank"><img src="https://img.shields.io/docker/pulls/wpscanteam/wpscan.svg"></a>
<a href="https://github.com/wpscanteam/wpscan/actions?query=workflow%3ABuild" target="_blank"><img src="https://github.com/wpscanteam/wpscan/workflows/Build/badge.svg"></a>
<a href="https://qlty.sh/gh/wpscanteam/projects/wpscan" target="_blank"><img src="https://qlty.sh/gh/wpscanteam/projects/wpscan/maintainability.svg" alt="Maintainability"></a>
<a href="https://coveralls.io/github/wpscanteam/wpscan?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/wpscanteam/wpscan/badge.svg?branch=master" alt="Coverage Status"></a>
</p>
# 설치
## 사전 요구 사항
- (선택 사항이지만 적극 권장: [rbenv](https://github.com/rbenv/rbenv))
- Ruby >= 3.3 - 권장: 최신 안정 버전
- Curl >= 7.72 - 권장: 최신 안정 버전
- 7.29 버전에는 세그폴트(segfault)가 있습니다
- 7.72 미만 버전은 경우에 따라 `Stream error in the HTTP/2 framing layer` 오류가 발생할 수 있습니다
- RubyGems - 권장: 최신 안정 버전
- Nokogiri는 OS에 따라 패키지 관리자를 통해 설치해야 하는 패키지가 필요할 수 있습니다. https://nokogiri.org/tutorials/installing_nokogiri.html 참조
### 침투 테스트 배포판에서
Kali Linux와 같은 침투 테스트 배포판을 사용하는 경우, 가능하다면 패키지 관리자를 통해 wpscan을 설치/업데이트하는 것이 좋습니다.
### macOSX에서 Homebrew를 통한 설치
```shell
brew install wpscanteam/tap/wpscan
```
### RubyGems에서 설치
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](https://github.com/wpscanteam/wpscan/issues/1844)).
- **Debian / Ubuntu**:
```shell
sudo apt install build-essential ruby-dev
```
- **Fedora / RHEL / CentOS**:
```shell
sudo dnf install @development-tools ruby-devel
```
- **Arch Linux**:
```shell
sudo pacman -S base-devel ruby
```
- **Alpine**:
```shell
sudo apk add build-base ruby-dev
```
- **macOS**: Xcode Command Line Tools를 설치합니다 (`xcode-select --install`).
그런 다음 젬을 설치합니다:
```shell
gem install wpscan
```
macOS에서 Apple의 System Integrity Protection(SIP)으로 인해 ```Gem::FilePermissionError```가 발생하면, RVM을 설치한 후 wpscan을 다시 설치하거나 ```sudo gem install -n /usr/local/bin wpscan```을 실행하세요 (참조: [#1286](https://github.com/wpscanteam/wpscan/issues/1286))
# 업데이트
```wpscan --update``` 명령으로 로컬 데이터베이스를 업데이트할 수 있습니다.
WPScan 자체의 업데이트는 WPScan이 (사전) 설치된 방식에 따라 ```gem update wpscan``` 또는 패키지 관리자(Kali Linux와 같은 배포판에서는 ```apt-get update && apt-get upgrade```가 매우 중요합니다)를 통해 수행합니다.
# Docker
```docker pull wpscanteam/wpscan``` 명령으로 저장소를 가져옵니다.
사용자 이름 열거
```shell
docker run -it --rm -v wpscan-db:/wpscan/.cache/wpscan/db wpscanteam/wpscan --url https://target.tld/ --enumerate u
```
사용자 이름 범위 열거
```shell
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일 경과 알림은 로컬 설치와 동일하게 동작합니다:
```shell
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](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)을 따릅니다:
- **새 설치**: `~/.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 경로로 마이그레이션하려면:
```shell
mv ~/.wpscan ~/.cache/wpscan
```
## 선택 사항: WordPress 취약점 데이터베이스 API
WPScan CLI 도구는 [WordPress Vulnerability Database API](https://wpscan.com/api)를 사용하여 WordPress 취약점 데이터를 실시간으로 가져옵니다. WPScan이 취약점 데이터를 가져오려면 아래에서 설명하는 대로 `--api-token` 옵션 또는 구성 파일을 통해 API 토큰을 제공해야 합니다. API 토큰은 [WPScan.com](https://wpscan.com/register)에서 계정을 등록하면 얻을 수 있습니다.
하루 최대 **25**회의 API 요청이 무료로 제공되며, 이는 대부분의 WordPress 웹사이트를 하루에 최소 한 번 스캔하기에 충분합니다. 일일 25회의 API 요청이 모두 소진되면 WPScan은 취약점 데이터 없이 정상적으로 계속 작동합니다.
### API 요청이 얼마나 필요한가요?
- 당사의 WordPress 스캐너는 WordPress 버전에 대해 1회, 설치된 플러그인마다 1회, 설치된 테마마다 1회의 API 요청을 수행합니다.
- 평균적으로 WordPress 웹사이트에는 22개의 플러그인이 설치되어 있습니다.
## 파일에서 CLI 옵션 로드
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.yml`
- `pwd/.wpscan/scan.json`
- `pwd/.wpscan/scan.yml`
이러한 파일이 존재하면 `cli_options` 키의 옵션이 로드되며 중복으로 발견되면 재정의됩니다.
예:
`~/.config/wpscan/scan.yml`:
```yml
cli_options:
proxy: 'http://127.0.0.1:8080'
verbose: true
```
`pwd/.wpscan/scan.yml`:
```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 규칙을 사용하여 추가할 수 있습니다. 예:
```yml
cli_options:
user_agent: "Testing UA"
max_threads: 1
headers: "Custom-Header: aaaa; Another Header: bbb"
```
## API 토큰을 파일에 저장
위에서 언급한 기능은 API 토큰을 구성 파일에 보관하여 매번 CLI로 제공하지 않아도 되게 해 주므로 유용합니다. 이렇게 하려면 아래 내용이 포함된 ~/.config/wpscan/scan.yml 파일을 만드세요:
```yml
cli_options:
api_token: 'YOUR_API_TOKEN'
```
## ENV에서 API 토큰 로드 (v3.7.10부터)
API 토큰은 `WPSCAN_API_TOKEN` ENV 변수가 존재하는 경우 자동으로 로드됩니다. `--api-token` CLI 옵션도 함께 제공된 경우에는 CLI의 값이 사용됩니다.
## API 서비스 상태
WPScan API 연결 문제가 발생하는 경우 https://status.wpscan.com/에서 서비스 상태를 확인할 수 있습니다. API 연결 오류가 발생하면 WPScan은 오류 메시지에 상태 페이지 링크를 포함합니다.
## 사용자 이름 열거
```shell
wpscan --url https://target.tld/ --enumerate u
```
사용자 이름 범위 열거
```shell
wpscan --url https://target.tld/ --enumerate u1-100
```
** u1-100을 원하는 범위로 바꾸세요.
## 백업 폴더 열거
```shell
wpscan --url https://target.tld/ --enumerate bf
```
이 옵션은 널리 사용되는 WordPress 백업 플러그인이 생성한 백업 폴더를 확인합니다. 이러한 폴더에는 데이터베이스 덤프, 구성 파일 또는 전체 사이트 백업과 같은 민감한 데이터가 포함될 수 있습니다.
# 라이선스
## WPScan 공개 소스 라이선스
WPScan 소프트웨어(이하 "WPScan"이라 함)는 이중 라이선스로 제공됩니다 - Copyright 2011-2019 WPScan Team.
WPScan의 상업화를 포함하는 경우 상업용 유료(비자유) 라이선스가 필요합니다. 그 외에는 아래에 명시된 조건에 따라 WPScan을 무료로 사용할 수 있습니다.
### 1. 정의
1.1 "License"란 본 문서를 의미합니다.
1.2 "Contributor"란 WPScan을 생성하거나 생성에 기여하거나 소유하는 각 개인 또는 법인을 의미합니다.
1.3 "WPScan Team"이란 WPScan의 핵심 개발자들을 의미합니다.
### 2. 상업화
상업적 사용이란 상업적 이익 또는 금전적 보상을 목적으로 하는 사용을 의미합니다.
상업화의 예는 다음과 같습니다:
- WPScan을 사용하여 상업적 관리형/서비스형 소프트웨어(SaaS) 서비스를 제공하는 경우.
- WPScan을 상용 제품으로 또는 그 일부로 배포하는 경우.
- WPScan을 부가가치 서비스/제품으로 사용하는 경우.
상업용 라이선스가 필요하지 않아 아래에 명시된 조건에 해당하는 예로는 다음이 포함됩니다(이에 국한되지 않음):
- 평가 도구 키트의 일부로 WPScan을 사용하는 침투 테스터(또는 침투 테스트 조직).
- Kali Linux, SamuraiWTF, BackBox Linux를 포함하되 이에 국한되지 않는 침투 테스트 Linux 배포판.
- 자체 시스템을 테스트하기 위해 WPScan을 사용하는 경우.
- WPScan의 모든 비상업적 사용.
상업용 라이선스 구매가 필요하거나 구매가 필요한지 확실하지 않은 경우 문의하세요 - [email protected].
무료 사용 약관;
### 3. 재배포
재배포는 다음 조건에서 허용됩니다:
- 수정되지 않은 License가 WPScan과 함께 제공됩니다.
- 수정되지 않은 저작권 고지가 WPScan과 함께 제공됩니다.
- 상업화 조항과 충돌하지 않습니다.
### 4. 복사
복사는 재배포 조항과 충돌하지 않는 한 허용됩니다.
### 5. 수정
수정은 재배포 조항과 충돌하지 않는 한 허용됩니다.
### 6. 기여
모든 기여는 Contributor가 WPScan Team에게 기여자의 콘텐츠를 재사용, 수정 및 재라이선스할 수 있는 무제한적이고 비독점적인 권리를 부여하는 것으로 간주됩니다.
### 7. 지원, 업데이트 및 유지보수
WPScan은 AS-IS 기준으로 제공되며 어떠한 지원, 업데이트 또는 유지보수도 포함되지 않습니다. 지원, 업데이트 및 유지보수는 WPScan Team의 단독 재량에 따라 제공될 수 있습니다.
### 8. 보증 면책
WPScan은 본 License에 따라 명시적, 묵시적 또는 법정 보증 없이 "있는 그대로(as is)" 기준으로 제공되며, 여기에는 WPScan에 결함이 없음, 상품성, 특정 목적에의 적합성 또는 비침해성에 대한 보증이 포함되되 이에 국한되지 않습니다.
### 9. 책임 제한
법이 허용하는 범위 내에서 WPScan은 AS-IS 기준으로 제공됩니다. WPScan Team은 어떠한 경우에도, 그리고 무제한으로, WPScan의 행위, 실패, 버그 및/또는 WPScan과 최종 장비, 컴퓨터, 기타 소프트웨어 또는 제3자, 최종 장비, 컴퓨터 또는 서비스 간의 기타 상호작용으로 인해 발생하는 어떠한 손해, 비용, 지출 또는 기타 지불에 대해 책임을 지지 않습니다.
### 10. 면책 고지
사전 상호 동의 없이 웹사이트에 대해 WPScan을 실행하는 것은 귀하의 국가에서 불법일 수 있습니다. WPScan Team은 WPScan으로 인해 발생하는 어떠한 오용 또는 손해에 대해서도 책임을 지지 않습니다.
### 11. 상표
"wpscan"이라는 용어는 등록 상표입니다. 본 License는 "wpscan" 상표 또는 WPScan 로고의 사용을 허가하지 않습니다.