Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
641108e7eb | ||
|
|
0e87384b0a | ||
|
|
5175170c4b | ||
|
|
79864cae7b | ||
|
|
ca5f92ca61 | ||
|
|
d29de83c41 | ||
|
|
1f42ce6e2f | ||
|
|
0dc7128582 | ||
|
|
21f4de2ec1 | ||
|
|
d65567fc8f | ||
|
|
20af778fa1 | ||
|
|
5f77832386 | ||
|
|
6ccfe70775 | ||
|
|
6b0f687abb | ||
|
|
67ba526b5b | ||
|
|
e186ec7534 | ||
|
|
23ef1e75b3 | ||
|
|
8170390f92 | ||
|
|
c148295f64 | ||
|
|
37b99f9baa | ||
|
|
8e4643874d | ||
|
|
0522023fd4 | ||
|
|
711ee730a0 | ||
|
|
f3bd995528 | ||
|
|
beec0bd35a | ||
|
|
9d7f35f3b2 | ||
|
|
c7488e28f7 | ||
|
|
9150e0ca52 | ||
|
|
475288deeb | ||
|
|
82335d7399 | ||
|
|
338eacd63b | ||
|
|
0b9b79f55f | ||
|
|
5303b28957 | ||
|
|
11c05a3590 | ||
|
|
862c0a9014 | ||
|
|
487a483aa6 | ||
|
|
030c20a11b | ||
|
|
ec831f7fed | ||
|
|
50fa79b331 | ||
|
|
edab0e812a | ||
|
|
f0126ca860 | ||
|
|
01261d4d29 | ||
|
|
f97d3436a5 | ||
|
|
0bcb8b4b3b | ||
|
|
489545dd75 | ||
|
|
f6c152f58a | ||
|
|
16734418be | ||
|
|
b17ee20f58 | ||
|
|
aaee6f1e6d | ||
|
|
64d8240b8a | ||
|
|
0a6d430c9f | ||
|
|
7bf0314561 | ||
|
|
409897fec4 | ||
|
|
91b0d20665 | ||
|
|
f6644eebf9 | ||
|
|
88bddd4f87 | ||
|
|
c61b023fb7 | ||
|
|
1b5df8751f | ||
|
|
314c98f101 | ||
|
|
8274e2efe9 |
@@ -16,3 +16,6 @@ CREDITS
|
|||||||
data.zip
|
data.zip
|
||||||
DISCLAIMER.txt
|
DISCLAIMER.txt
|
||||||
example.conf.json
|
example.conf.json
|
||||||
|
bin/
|
||||||
|
log.txt
|
||||||
|
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
.ash_history
|
||||||
cache
|
cache
|
||||||
coverage
|
coverage
|
||||||
.bundle
|
.bundle
|
||||||
@@ -6,10 +7,10 @@ coverage
|
|||||||
*.sublime-*
|
*.sublime-*
|
||||||
.idea
|
.idea
|
||||||
.*.swp
|
.*.swp
|
||||||
Gemfile.lock
|
|
||||||
log.txt
|
log.txt
|
||||||
.yardoc
|
.yardoc
|
||||||
debug.log
|
debug.log
|
||||||
wordlist.txt
|
wordlist.txt
|
||||||
rspec_results.html
|
rspec_results.html
|
||||||
data/
|
data/
|
||||||
|
vendor/
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2.3.1
|
2.4.1
|
||||||
|
|||||||
@@ -10,11 +10,18 @@ rvm:
|
|||||||
- 2.2.4
|
- 2.2.4
|
||||||
- 2.3.0
|
- 2.3.0
|
||||||
- 2.3.1
|
- 2.3.1
|
||||||
|
- 2.3.2
|
||||||
|
- 2.3.3
|
||||||
|
- 2.4.1
|
||||||
before_install:
|
before_install:
|
||||||
|
- "env"
|
||||||
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
|
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
|
||||||
|
- "gem install bundler"
|
||||||
|
- "bundler --version"
|
||||||
before_script:
|
before_script:
|
||||||
- "unzip -o $TRAVIS_BUILD_DIR/data.zip -d $TRAVIS_BUILD_DIR"
|
- "unzip -o $TRAVIS_BUILD_DIR/data.zip -d $TRAVIS_BUILD_DIR"
|
||||||
script: bundle exec rspec
|
script:
|
||||||
|
- "bundle exec rspec"
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
- team@wpscan.org
|
- team@wpscan.org
|
||||||
|
|||||||
23
CHANGELOG.md
23
CHANGELOG.md
@@ -1,6 +1,27 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
## Master
|
## Master
|
||||||
[Work in progress](https://github.com/wpscanteam/wpscan/compare/2.9.2...master)
|
[Work in progress](https://github.com/wpscanteam/wpscan/compare/2.9.3...master)
|
||||||
|
|
||||||
|
## Version 2.9.3
|
||||||
|
Released: 2017-07-19
|
||||||
|
|
||||||
|
* Updated dependencies and required ruby version
|
||||||
|
* Made some changes so wpscan works in ruby 2.4
|
||||||
|
* Added a Gemfile.lock to lock all dependencies
|
||||||
|
* You can now pass a wordlist from stdin via "--wordlist -"
|
||||||
|
* Improved version detection regexes
|
||||||
|
* Added an optional paramter to --log to specify a filename
|
||||||
|
|
||||||
|
WPScan Database Statistics:
|
||||||
|
* Total tracked wordpresses: 251
|
||||||
|
* Total tracked plugins: 68818
|
||||||
|
* Total tracked themes: 15132
|
||||||
|
* Total vulnerable wordpresses: 243
|
||||||
|
* Total vulnerable plugins: 1527
|
||||||
|
* Total vulnerable themes: 280
|
||||||
|
* Total wordpress vulnerabilities: 5263
|
||||||
|
* Total plugin vulnerabilities: 2406
|
||||||
|
* Total theme vulnerabilities: 349
|
||||||
|
|
||||||
## Version 2.9.2
|
## Version 2.9.2
|
||||||
Released: 2016-11-15
|
Released: 2016-11-15
|
||||||
|
|||||||
27
Dockerfile
27
Dockerfile
@@ -1,24 +1,29 @@
|
|||||||
FROM ruby:2.3-slim
|
FROM ruby:2.4-alpine
|
||||||
MAINTAINER WPScan Team <team@wpscan.org>
|
MAINTAINER WPScan Team <team@wpscan.org>
|
||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive && \
|
ARG BUNDLER_ARGS="--jobs=8 --without test"
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get --no-install-recommends -qq -y install curl git ca-certificates openssl libcurl4-openssl-dev libxml2 libxml2-dev libxslt1-dev build-essential procps
|
|
||||||
|
|
||||||
RUN useradd -d /wpscan wpscan
|
RUN adduser -h /wpscan -g WPScan -D wpscan
|
||||||
RUN echo "gem: --no-ri --no-rdoc" > /etc/gemrc
|
RUN echo "gem: --no-ri --no-rdoc" > /etc/gemrc
|
||||||
RUN mkdir /wpscan
|
|
||||||
|
COPY Gemfile /wpscan
|
||||||
|
COPY Gemfile.lock /wpscan
|
||||||
|
|
||||||
|
# runtime dependencies
|
||||||
|
RUN apk add --no-cache libcurl procps && \
|
||||||
|
# build dependencies
|
||||||
|
apk add --no-cache --virtual build-deps alpine-sdk ruby-dev libffi-dev zlib-dev && \
|
||||||
|
bundle install --system --gemfile=/wpscan/Gemfile $BUNDLER_ARGS && \
|
||||||
|
apk del --no-cache build-deps
|
||||||
|
|
||||||
COPY . /wpscan
|
COPY . /wpscan
|
||||||
|
|
||||||
WORKDIR /wpscan
|
|
||||||
|
|
||||||
RUN bundle install --without test
|
|
||||||
RUN chown -R wpscan:wpscan /wpscan
|
RUN chown -R wpscan:wpscan /wpscan
|
||||||
|
|
||||||
USER wpscan
|
USER wpscan
|
||||||
|
|
||||||
RUN /wpscan/wpscan.rb --update --verbose --no-color
|
RUN /wpscan/wpscan.rb --update --verbose --no-color
|
||||||
|
|
||||||
|
WORKDIR /wpscan
|
||||||
|
|
||||||
ENTRYPOINT ["/wpscan/wpscan.rb"]
|
ENTRYPOINT ["/wpscan/wpscan.rb"]
|
||||||
CMD ["--help"]
|
CMD ["--help"]
|
||||||
|
|||||||
18
Gemfile
18
Gemfile
@@ -1,15 +1,15 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'typhoeus', '>=1.0.0'
|
gem 'typhoeus', '>=1.1.2'
|
||||||
gem 'nokogiri', '>=1.6.7.2'
|
gem 'nokogiri', '>=1.7.0.1'
|
||||||
gem 'addressable'
|
gem 'addressable', '>=2.5.0'
|
||||||
gem 'yajl-ruby' # Better JSON parser regarding memory usage
|
gem 'yajl-ruby', '>=1.3.0' # Better JSON parser regarding memory usage
|
||||||
gem 'terminal-table', '>=1.6.0'
|
gem 'terminal-table', '>=1.6.0'
|
||||||
gem 'ruby-progressbar', '>=1.6.0'
|
gem 'ruby-progressbar', '>=1.8.1'
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'webmock', '>=1.17.2'
|
gem 'webmock', '>=2.3.2'
|
||||||
gem 'simplecov'
|
gem 'simplecov', '>=0.13.0'
|
||||||
gem 'rspec', '>=3.3.0'
|
gem 'rspec', '>=3.5.0'
|
||||||
gem 'rspec-its'
|
gem 'rspec-its', '>=1.2.0'
|
||||||
end
|
end
|
||||||
|
|||||||
69
Gemfile.lock
Normal file
69
Gemfile.lock
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
addressable (2.5.1)
|
||||||
|
public_suffix (~> 2.0, >= 2.0.2)
|
||||||
|
crack (0.4.3)
|
||||||
|
safe_yaml (~> 1.0.0)
|
||||||
|
diff-lcs (1.3)
|
||||||
|
docile (1.1.5)
|
||||||
|
ethon (0.10.1)
|
||||||
|
ffi (>= 1.3.0)
|
||||||
|
ffi (1.9.18)
|
||||||
|
hashdiff (0.3.4)
|
||||||
|
json (2.1.0)
|
||||||
|
mini_portile2 (2.2.0)
|
||||||
|
nokogiri (1.8.0)
|
||||||
|
mini_portile2 (~> 2.2.0)
|
||||||
|
public_suffix (2.0.5)
|
||||||
|
rspec (3.6.0)
|
||||||
|
rspec-core (~> 3.6.0)
|
||||||
|
rspec-expectations (~> 3.6.0)
|
||||||
|
rspec-mocks (~> 3.6.0)
|
||||||
|
rspec-core (3.6.0)
|
||||||
|
rspec-support (~> 3.6.0)
|
||||||
|
rspec-expectations (3.6.0)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.6.0)
|
||||||
|
rspec-its (1.2.0)
|
||||||
|
rspec-core (>= 3.0.0)
|
||||||
|
rspec-expectations (>= 3.0.0)
|
||||||
|
rspec-mocks (3.6.0)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.6.0)
|
||||||
|
rspec-support (3.6.0)
|
||||||
|
ruby-progressbar (1.8.1)
|
||||||
|
safe_yaml (1.0.4)
|
||||||
|
simplecov (0.14.1)
|
||||||
|
docile (~> 1.1.0)
|
||||||
|
json (>= 1.8, < 3)
|
||||||
|
simplecov-html (~> 0.10.0)
|
||||||
|
simplecov-html (0.10.1)
|
||||||
|
terminal-table (1.8.0)
|
||||||
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||||
|
typhoeus (1.1.2)
|
||||||
|
ethon (>= 0.9.0)
|
||||||
|
unicode-display_width (1.3.0)
|
||||||
|
webmock (3.0.1)
|
||||||
|
addressable (>= 2.3.6)
|
||||||
|
crack (>= 0.3.2)
|
||||||
|
hashdiff
|
||||||
|
yajl-ruby (1.3.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
addressable (>= 2.5.0)
|
||||||
|
nokogiri (>= 1.7.0.1)
|
||||||
|
rspec (>= 3.5.0)
|
||||||
|
rspec-its (>= 1.2.0)
|
||||||
|
ruby-progressbar (>= 1.8.1)
|
||||||
|
simplecov (>= 0.13.0)
|
||||||
|
terminal-table (>= 1.6.0)
|
||||||
|
typhoeus (>= 1.1.2)
|
||||||
|
webmock (>= 2.3.2)
|
||||||
|
yajl-ruby (>= 1.3.0)
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.14.6
|
||||||
71
README.md
71
README.md
@@ -95,11 +95,49 @@ WPScan comes pre-installed on the following Linux distributions:
|
|||||||
- [SamuraiWTF](http://samurai.inguardians.com/)
|
- [SamuraiWTF](http://samurai.inguardians.com/)
|
||||||
- [BlackArch](http://blackarch.org/)
|
- [BlackArch](http://blackarch.org/)
|
||||||
|
|
||||||
|
On macOS WPScan is packaged by [Homebrew](https://brew.sh/) as [`wpscan`](http://braumeister.org/formula/wpscan).
|
||||||
|
|
||||||
Windows is not supported
|
Windows is not supported
|
||||||
|
|
||||||
|
We suggest you use our official Docker image from https://hub.docker.com/r/wpscanteam/wpscan/ to avoid installation problems.
|
||||||
|
|
||||||
|
# DOCKER
|
||||||
|
Pull the repo with `docker pull wpscanteam/wpscan`
|
||||||
|
|
||||||
|
## Start WPScan
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm wpscanteam/wpscan -u https://yourblog.com [options]
|
||||||
|
```
|
||||||
|
|
||||||
|
For the available Options, please see https://github.com/wpscanteam/wpscan#wpscan-arguments
|
||||||
|
|
||||||
|
If you run the git version of wpscan we included some binstubs in ./bin for easier start of wpscan.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Mount a local wordlist to the docker container and start a bruteforce attack for user admin
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm -v ~/wordlists:/wordlists wpscanteam/wpscan --url https://yourblog.com --wordlist /wordlists/crackstation.txt --username admin
|
||||||
|
```
|
||||||
|
|
||||||
|
Use logfile option
|
||||||
|
```
|
||||||
|
# the file must exist prior to starting the container, otherwise docker will create a directory with the filename
|
||||||
|
touch ~/FILENAME
|
||||||
|
docker run -it --rm -v ~/FILENAME:/wpscan/output.txt wpscanteam/wpscan --url https://yourblog.com --log /wpscan/output.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
(This mounts the host directory `~/wordlists` to the container in the path `/wordlists`)
|
||||||
|
|
||||||
|
Published on https://hub.docker.com/r/wpscanteam/wpscan/
|
||||||
|
|
||||||
|
# Manual install
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Ruby >= 2.1.9 - Recommended: 2.3.1
|
- Ruby >= 2.1.9 - Recommended: 2.4.1
|
||||||
- Curl >= 7.21 - Recommended: latest - FYI the 7.29 has a segfault
|
- Curl >= 7.21 - Recommended: latest - FYI the 7.29 has a segfault
|
||||||
- RubyGems - Recommended: latest
|
- RubyGems - Recommended: latest
|
||||||
- Git
|
- Git
|
||||||
@@ -110,7 +148,7 @@ Windows is not supported
|
|||||||
|
|
||||||
### Installing dependencies on Debian
|
### Installing dependencies on Debian
|
||||||
|
|
||||||
sudo apt-get install git ruby ruby-dev libcurl4-openssl-dev make zlib1g-dev
|
sudo apt-get install gcc git ruby ruby-dev libcurl4-openssl-dev make zlib1g-dev
|
||||||
|
|
||||||
### Installing dependencies on Fedora
|
### Installing dependencies on Fedora
|
||||||
|
|
||||||
@@ -121,11 +159,11 @@ Windows is not supported
|
|||||||
pacman -Syu ruby
|
pacman -Syu ruby
|
||||||
pacman -Syu libyaml
|
pacman -Syu libyaml
|
||||||
|
|
||||||
### Installing dependencies on Mac OSX
|
### Installing dependencies on macOS
|
||||||
|
|
||||||
Apple Xcode, Command Line Tools and the libffi are needed (to be able to install the FFI gem), See [http://stackoverflow.com/questions/17775115/cant-setup-ruby-environment-installing-fii-gem-error](http://stackoverflow.com/questions/17775115/cant-setup-ruby-environment-installing-fii-gem-error)
|
Apple Xcode, Command Line Tools and the libffi are needed (to be able to install the FFI gem), See [http://stackoverflow.com/questions/17775115/cant-setup-ruby-environment-installing-fii-gem-error](http://stackoverflow.com/questions/17775115/cant-setup-ruby-environment-installing-fii-gem-error)
|
||||||
|
|
||||||
## Installing with RVM (recommended)
|
## Installing with RVM (recommended when doing a manual install)
|
||||||
|
|
||||||
If you are using GNOME Terminal, there are some steps required before executing the commands. See here for more information:
|
If you are using GNOME Terminal, there are some steps required before executing the commands. See here for more information:
|
||||||
https://rvm.io/integration/gnome-terminal#integrating-rvm-with-gnome-terminal
|
https://rvm.io/integration/gnome-terminal#integrating-rvm-with-gnome-terminal
|
||||||
@@ -136,10 +174,9 @@ https://rvm.io/integration/gnome-terminal#integrating-rvm-with-gnome-terminal
|
|||||||
curl -sSL https://get.rvm.io | bash -s stable
|
curl -sSL https://get.rvm.io | bash -s stable
|
||||||
source ~/.rvm/scripts/rvm
|
source ~/.rvm/scripts/rvm
|
||||||
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
|
echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc
|
||||||
rvm install 2.3.1
|
rvm install 2.4.1
|
||||||
rvm use 2.3.1 --default
|
rvm use 2.4.1 --default
|
||||||
echo "gem: --no-ri --no-rdoc" > ~/.gemrc
|
echo "gem: --no-ri --no-rdoc" > ~/.gemrc
|
||||||
gem install bundler
|
|
||||||
git clone https://github.com/wpscanteam/wpscan.git
|
git clone https://github.com/wpscanteam/wpscan.git
|
||||||
cd wpscan
|
cd wpscan
|
||||||
gem install bundler
|
gem install bundler
|
||||||
@@ -151,19 +188,6 @@ https://rvm.io/integration/gnome-terminal#integrating-rvm-with-gnome-terminal
|
|||||||
cd wpscan
|
cd wpscan
|
||||||
sudo gem install bundler && bundle install --without test
|
sudo gem install bundler && bundle install --without test
|
||||||
|
|
||||||
# DOCKER
|
|
||||||
Pull the repo with `docker pull wpscanteam/wpscan`
|
|
||||||
|
|
||||||
## Start WPScan
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run --rm wpscanteam/wpscan -u http://yourblog.com [options]
|
|
||||||
```
|
|
||||||
|
|
||||||
For the available Options, please see https://github.com/wpscanteam/wpscan#wpscan-arguments
|
|
||||||
|
|
||||||
Published on https://hub.docker.com/r/wpscanteam/wpscan/
|
|
||||||
|
|
||||||
# KNOWN ISSUES
|
# KNOWN ISSUES
|
||||||
|
|
||||||
- Typhoeus segmentation fault
|
- Typhoeus segmentation fault
|
||||||
@@ -236,7 +260,7 @@ Published on https://hub.docker.com/r/wpscanteam/wpscan/
|
|||||||
--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not
|
--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not
|
||||||
--batch Never ask for user input, use the default behaviour.
|
--batch Never ask for user input, use the default behaviour.
|
||||||
--no-color Do not use colors in the output.
|
--no-color Do not use colors in the output.
|
||||||
--log Creates a log.txt file with WPScan's output.
|
--log [filename] Creates a log.txt file with WPScan's output if no filename is supplied. Otherwise the filename is used for logging.
|
||||||
--no-banner Prevents the WPScan banner from being displayed.
|
--no-banner Prevents the WPScan banner from being displayed.
|
||||||
--disable-accept-header Prevents WPScan sending the Accept HTTP header.
|
--disable-accept-header Prevents WPScan sending the Accept HTTP header.
|
||||||
--disable-referer Prevents setting the Referer header.
|
--disable-referer Prevents setting the Referer header.
|
||||||
@@ -250,6 +274,7 @@ Published on https://hub.docker.com/r/wpscanteam/wpscan/
|
|||||||
--proxy-auth <username:password> Supply the proxy login credentials.
|
--proxy-auth <username:password> Supply the proxy login credentials.
|
||||||
--basic-auth <username:password> Set the HTTP Basic authentication.
|
--basic-auth <username:password> Set the HTTP Basic authentication.
|
||||||
--wordlist | -w <wordlist> Supply a wordlist for the password brute forcer.
|
--wordlist | -w <wordlist> Supply a wordlist for the password brute forcer.
|
||||||
|
If the "-" option is supplied, the wordlist is expected via STDIN.
|
||||||
--username | -U <username> Only brute force the supplied username.
|
--username | -U <username> Only brute force the supplied username.
|
||||||
--usernames <path-to-file> Only brute force the usernames from the file.
|
--usernames <path-to-file> Only brute force the usernames from the file.
|
||||||
--cache-dir <cache-directory> Set the cache directory.
|
--cache-dir <cache-directory> Set the cache directory.
|
||||||
@@ -273,6 +298,10 @@ Do wordlist password brute force on enumerated users using 50 threads...
|
|||||||
|
|
||||||
```ruby wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads 50```
|
```ruby wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads 50```
|
||||||
|
|
||||||
|
Do wordlist password brute force on enumerated users using STDIN as the wordlist...
|
||||||
|
|
||||||
|
```crunch 5 13 -f charset.lst mixalpha | ruby wpscan.rb --url www.example.com --wordlist -```
|
||||||
|
|
||||||
Do wordlist password brute force on the 'admin' username only...
|
Do wordlist password brute force on the 'admin' username only...
|
||||||
|
|
||||||
```ruby wpscan.rb --url www.example.com --wordlist darkc0de.lst --username admin```
|
```ruby wpscan.rb --url www.example.com --wordlist darkc0de.lst --username admin```
|
||||||
|
|||||||
21
bin/rspec
Executable file
21
bin/rspec
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE="${BASH_SOURCE[0]}"
|
||||||
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
SOURCE="$(readlink "$SOURCE")"
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||||
|
done
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
|
||||||
|
cd $DIR/../
|
||||||
|
# always rebuild and include all GEMs
|
||||||
|
docker build --build-arg "BUNDLER_ARGS=--jobs=8" -t wpscan:rspec .
|
||||||
|
# update all gems (this updates Gemfile.lock on the host)
|
||||||
|
# this also needs some build dependencies
|
||||||
|
docker run --rm -u root -v $DIR/../Gemfile.lock:/wpscan/Gemfile.lock --entrypoint "" wpscan:rspec sh -c 'apk add --no-cache alpine-sdk ruby-dev libffi-dev zlib-dev && bundle update'
|
||||||
|
# rebuild image with latest GEMs
|
||||||
|
docker build --build-arg "BUNDLER_ARGS=--jobs=8" -t wpscan:rspec .
|
||||||
|
# run spec
|
||||||
|
docker run --rm -v $DIR/../:/wpscan --entrypoint "" wpscan:rspec rspec
|
||||||
|
|
||||||
12
bin/update_gems
Executable file
12
bin/update_gems
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE="${BASH_SOURCE[0]}"
|
||||||
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
SOURCE="$(readlink "$SOURCE")"
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||||
|
done
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
|
||||||
|
cd $DIR/../
|
||||||
|
docker run -it --rm -v "$DIR/../":/wpscan -w /wpscan ruby:2.4 bundle update
|
||||||
14
bin/wpscan
Executable file
14
bin/wpscan
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE="${BASH_SOURCE[0]}"
|
||||||
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
SOURCE="$(readlink "$SOURCE")"
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||||
|
done
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
|
||||||
|
cd $DIR/../
|
||||||
|
docker build -q -t wpscan:git .
|
||||||
|
docker run -it --rm wpscan:git "$@"
|
||||||
|
|
||||||
16
bin/wpscan-dev
Executable file
16
bin/wpscan-dev
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE="${BASH_SOURCE[0]}"
|
||||||
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
SOURCE="$(readlink "$SOURCE")"
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||||
|
done
|
||||||
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
|
||||||
|
cd $DIR/../
|
||||||
|
if [[ -n "$WPSCAN_BUILD" ]]; then
|
||||||
|
docker build -q -t wpscan:git .
|
||||||
|
fi
|
||||||
|
docker run -it --rm -v $DIR/../:/wpscan wpscan:git "$@"
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ class Browser
|
|||||||
elsif auth =~ /\ABasic [a-zA-Z0-9=]+\z/
|
elsif auth =~ /\ABasic [a-zA-Z0-9=]+\z/
|
||||||
@basic_auth = auth
|
@basic_auth = auth
|
||||||
else
|
else
|
||||||
raise 'Invalid basic authentication format, "login:password" or "Basic base_64_encoded" expected'
|
raise "Invalid basic authentication format, \"login:password\" or \"Basic base_64_encoded\" expected. Your input: #{auth}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ COMMON_LIB_DIR = File.join(LIB_DIR, 'common')
|
|||||||
MODELS_LIB_DIR = File.join(COMMON_LIB_DIR, 'models')
|
MODELS_LIB_DIR = File.join(COMMON_LIB_DIR, 'models')
|
||||||
COLLECTIONS_LIB_DIR = File.join(COMMON_LIB_DIR, 'collections')
|
COLLECTIONS_LIB_DIR = File.join(COMMON_LIB_DIR, 'collections')
|
||||||
|
|
||||||
LOG_FILE = File.join(ROOT_DIR, 'log.txt')
|
DEFAULT_LOG_FILE = File.join(ROOT_DIR, 'log.txt')
|
||||||
|
|
||||||
# Plugins directories
|
# Plugins directories
|
||||||
COMMON_PLUGINS_DIR = File.join(COMMON_LIB_DIR, 'plugins')
|
COMMON_PLUGINS_DIR = File.join(COMMON_LIB_DIR, 'plugins')
|
||||||
@@ -30,7 +30,7 @@ LAST_UPDATE_FILE = File.join(DATA_DIR, '.last_update')
|
|||||||
|
|
||||||
MIN_RUBY_VERSION = '2.1.9'
|
MIN_RUBY_VERSION = '2.1.9'
|
||||||
|
|
||||||
WPSCAN_VERSION = '2.9.2'
|
WPSCAN_VERSION = '2.9.3'
|
||||||
|
|
||||||
$LOAD_PATH.unshift(LIB_DIR)
|
$LOAD_PATH.unshift(LIB_DIR)
|
||||||
$LOAD_PATH.unshift(WPSCAN_LIB_DIR)
|
$LOAD_PATH.unshift(WPSCAN_LIB_DIR)
|
||||||
@@ -96,7 +96,9 @@ end
|
|||||||
|
|
||||||
def update_required?
|
def update_required?
|
||||||
date = last_update
|
date = last_update
|
||||||
(true if date.nil?) or (date < 5.days.ago)
|
day_seconds = 24 * 60 * 60
|
||||||
|
five_days_ago = Time.now - (5 * day_seconds)
|
||||||
|
(true if date.nil?) or (date < five_days_ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Define colors
|
# Define colors
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ end
|
|||||||
def puts(o = '')
|
def puts(o = '')
|
||||||
if $log && o.respond_to?(:gsub)
|
if $log && o.respond_to?(:gsub)
|
||||||
temp = o.gsub(/\e\[\d+m/, '') # remove color for logging
|
temp = o.gsub(/\e\[\d+m/, '') # remove color for logging
|
||||||
File.open(LOG_FILE, 'a+') { |f| f.puts(temp) }
|
File.open($log, 'a+') { |f| f.puts(temp) }
|
||||||
end
|
end
|
||||||
|
|
||||||
super(o)
|
super(o)
|
||||||
@@ -35,16 +35,3 @@ class Numeric
|
|||||||
s.sub(/\.?0*$/, ' ' + units[e])
|
s.sub(/\.?0*$/, ' ' + units[e])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# time calculations
|
|
||||||
class Fixnum
|
|
||||||
SECONDS_IN_DAY = 24 * 60 * 60
|
|
||||||
|
|
||||||
def days
|
|
||||||
self * SECONDS_IN_DAY
|
|
||||||
end
|
|
||||||
|
|
||||||
def ago
|
|
||||||
Time.now - self
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class WpItem
|
|||||||
end
|
end
|
||||||
|
|
||||||
def last_updated
|
def last_updated
|
||||||
db_data['last_ipdated']
|
db_data['last_updated']
|
||||||
end
|
end
|
||||||
|
|
||||||
def popular?
|
def popular?
|
||||||
|
|||||||
@@ -28,9 +28,18 @@ class WpUser < WpItem
|
|||||||
queue_count = 0
|
queue_count = 0
|
||||||
found = false
|
found = false
|
||||||
|
|
||||||
create_progress_bar(count_file_lines(wordlist)+1, options)
|
if wordlist == '-'
|
||||||
|
words = ARGF
|
||||||
|
passwords_size = 10
|
||||||
|
options[:starting_at] = 0
|
||||||
|
else
|
||||||
|
words = File.open(wordlist)
|
||||||
|
passwords_size = count_file_lines(wordlist)+1
|
||||||
|
end
|
||||||
|
|
||||||
File.open(wordlist).each do |password|
|
create_progress_bar(passwords_size, options)
|
||||||
|
|
||||||
|
words.each do |password|
|
||||||
password.chomp!
|
password.chomp!
|
||||||
|
|
||||||
# A successfull login will redirect us to the redirect_to parameter
|
# A successfull login will redirect us to the redirect_to parameter
|
||||||
@@ -43,7 +52,13 @@ class WpUser < WpItem
|
|||||||
request = login_request(password, redirect_url)
|
request = login_request(password, redirect_url)
|
||||||
|
|
||||||
request.on_complete do |response|
|
request.on_complete do |response|
|
||||||
progress_bar.progress += 1 if options[:show_progression] && !found
|
if options[:show_progression] && !found
|
||||||
|
progress_bar.progress += 1
|
||||||
|
percentage = progress_bar.progress.fdiv(progress_bar.total)
|
||||||
|
if options[:starting_at] && percentage >= 0.8
|
||||||
|
progress_bar.total *= 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
progress_bar.log(" Trying Username: #{login} Password: #{password}") if options[:verbose]
|
progress_bar.log(" Trying Username: #{login} Password: #{password}") if options[:verbose]
|
||||||
|
|
||||||
@@ -79,7 +94,8 @@ class WpUser < WpItem
|
|||||||
@progress_bar = ProgressBar.create(
|
@progress_bar = ProgressBar.create(
|
||||||
format: '%t %a <%B> (%c / %C) %P%% %e',
|
format: '%t %a <%B> (%c / %C) %P%% %e',
|
||||||
title: " Brute Forcing '#{login}'",
|
title: " Brute Forcing '#{login}'",
|
||||||
total: passwords_size
|
total: passwords_size,
|
||||||
|
starting_at: options[:starting_at]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -118,7 +134,7 @@ class WpUser < WpItem
|
|||||||
elsif response.code.to_s =~ /^50/
|
elsif response.code.to_s =~ /^50/
|
||||||
progression = critical('ERROR: Server error, try reducing the number of threads or use the --throttle option.')
|
progression = critical('ERROR: Server error, try reducing the number of threads or use the --throttle option.')
|
||||||
else
|
else
|
||||||
progression = critical("ERROR: We received an unknown response for #{password}...")
|
progression = critical("ERROR: We received an unknown response for login: #{login} and password: #{password}")
|
||||||
verbose = critical(" Code: #{response.code}\n Body: #{response.body}\n")
|
verbose = critical(" Code: #{response.code}\n Body: #{response.body}\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -14,16 +14,15 @@ Encoding.default_external = Encoding::UTF_8
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
# Standard libs
|
# Standard libs
|
||||||
|
require 'readline'
|
||||||
require 'bundler/setup' unless kali_linux?
|
require 'bundler/setup' unless kali_linux?
|
||||||
require 'getoptlong'
|
require 'getoptlong'
|
||||||
require 'optparse' # Will replace getoptlong
|
require 'optparse' # Will replace getoptlong
|
||||||
require 'uri'
|
require 'uri'
|
||||||
require 'time'
|
require 'time'
|
||||||
require 'resolv'
|
require 'resolv'
|
||||||
require 'xmlrpc/client'
|
|
||||||
require 'digest/md5'
|
require 'digest/md5'
|
||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
require 'readline'
|
|
||||||
require 'base64'
|
require 'base64'
|
||||||
require 'rbconfig'
|
require 'rbconfig'
|
||||||
require 'pp'
|
require 'pp'
|
||||||
|
|||||||
@@ -155,6 +155,21 @@ class WpTarget < WebSite
|
|||||||
resp.code == 200 && resp.body[%r{by interconnect}i]
|
resp.code == 200 && resp.body[%r{by interconnect}i]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Script used to recover locked out admin users
|
||||||
|
# http://yoast.com/emergency-wordpress-access/
|
||||||
|
# https://codex.wordpress.org/User:MichaelH/Orphaned_Plugins_needing_Adoption/Emergency
|
||||||
|
#
|
||||||
|
# @return [ String ]
|
||||||
|
def emergency_url
|
||||||
|
@uri.merge('emergency.php').to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
# @return [ Boolean ]
|
||||||
|
def emergency_exists?
|
||||||
|
resp = Browser.get(emergency_url)
|
||||||
|
resp.code == 200 && resp.body[%r{password}i]
|
||||||
|
end
|
||||||
|
|
||||||
def upload_directory_listing_enabled?
|
def upload_directory_listing_enabled?
|
||||||
directory_listing_enabled?(upload_dir_url)
|
directory_listing_enabled?(upload_dir_url)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ def help
|
|||||||
puts '--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not'
|
puts '--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not'
|
||||||
puts '--batch Never ask for user input, use the default behaviour.'
|
puts '--batch Never ask for user input, use the default behaviour.'
|
||||||
puts '--no-color Do not use colors in the output.'
|
puts '--no-color Do not use colors in the output.'
|
||||||
puts '--log Creates a log.txt file with WPScan\'s output.'
|
puts '--log [filename] Creates a log.txt file with WPScan\'s output if no filename is supplied. Otherwise the filename is used for logging.'
|
||||||
puts '--no-banner Prevents the WPScan banner from being displayed.'
|
puts '--no-banner Prevents the WPScan banner from being displayed.'
|
||||||
puts '--disable-accept-header Prevents WPScan sending the Accept HTTP header.'
|
puts '--disable-accept-header Prevents WPScan sending the Accept HTTP header.'
|
||||||
puts '--disable-referer Prevents setting the Referer header.'
|
puts '--disable-referer Prevents setting the Referer header.'
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class WpscanOptions
|
|||||||
end
|
end
|
||||||
|
|
||||||
def wordlist=(wordlist)
|
def wordlist=(wordlist)
|
||||||
if File.exists?(wordlist)
|
if File.exists?(wordlist) || wordlist == '-'
|
||||||
@wordlist = wordlist
|
@wordlist = wordlist
|
||||||
else
|
else
|
||||||
raise "The file #{wordlist} does not exist"
|
raise "The file #{wordlist} does not exist"
|
||||||
@@ -152,11 +152,6 @@ class WpscanOptions
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def basic_auth=(basic_auth)
|
|
||||||
raise 'Invalid basic authentication format, login:password expected' if basic_auth.index(':').nil?
|
|
||||||
@basic_auth = "Basic #{Base64.encode64(basic_auth).chomp}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def debug_output=(debug_output)
|
def debug_output=(debug_output)
|
||||||
Typhoeus::Config.verbose = debug_output
|
Typhoeus::Config.verbose = debug_output
|
||||||
end
|
end
|
||||||
@@ -286,7 +281,7 @@ class WpscanOptions
|
|||||||
['--batch', GetoptLong::NO_ARGUMENT],
|
['--batch', GetoptLong::NO_ARGUMENT],
|
||||||
['--no-color', GetoptLong::NO_ARGUMENT],
|
['--no-color', GetoptLong::NO_ARGUMENT],
|
||||||
['--cookie', GetoptLong::REQUIRED_ARGUMENT],
|
['--cookie', GetoptLong::REQUIRED_ARGUMENT],
|
||||||
['--log', GetoptLong::NO_ARGUMENT],
|
['--log', GetoptLong::OPTIONAL_ARGUMENT],
|
||||||
['--no-banner', GetoptLong::NO_ARGUMENT],
|
['--no-banner', GetoptLong::NO_ARGUMENT],
|
||||||
['--throttle', GetoptLong::REQUIRED_ARGUMENT],
|
['--throttle', GetoptLong::REQUIRED_ARGUMENT],
|
||||||
['--disable-accept-header', GetoptLong::NO_ARGUMENT],
|
['--disable-accept-header', GetoptLong::NO_ARGUMENT],
|
||||||
|
|||||||
@@ -192,4 +192,27 @@ describe WpTarget do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#emergency_url' do
|
||||||
|
it 'returns the correct url' do
|
||||||
|
expect(wp_target.emergency_url).to eq 'http://example.localhost/emergency.php'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#emergency_exists?' do
|
||||||
|
it 'returns true' do
|
||||||
|
stub_request(:any, wp_target.emergency_url).to_return(status: 200, body: 'enter your password here')
|
||||||
|
expect(wp_target.emergency_exists?).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false' do
|
||||||
|
stub_request(:any, wp_target.emergency_url).to_return(status: 500)
|
||||||
|
expect(wp_target.emergency_exists?).to be_falsey
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false' do
|
||||||
|
stub_request(:any, wp_target.emergency_url).to_return(status: 500, body: 'enter your password here')
|
||||||
|
expect(wp_target.emergency_exists?).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -186,23 +186,6 @@ describe 'WpscanOptions' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#basic_auth=' do
|
|
||||||
context 'invalid format' do
|
|
||||||
it 'should raise an error if the : is missing' do
|
|
||||||
expect { @wpscan_options.basic_auth = 'helloworld' }.to raise_error(
|
|
||||||
RuntimeError, 'Invalid basic authentication format, login:password expected'
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'valid format' do
|
|
||||||
it "should add the 'Basic' word and do the encode64. See RFC 2617" do
|
|
||||||
@wpscan_options.basic_auth = 'Aladdin:open sesame'
|
|
||||||
expect(@wpscan_options.basic_auth).to eq 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#has_options?' do
|
describe '#has_options?' do
|
||||||
it 'should return false' do
|
it 'should return false' do
|
||||||
expect(@wpscan_options.has_options?).to be_falsey
|
expect(@wpscan_options.has_options?).to be_falsey
|
||||||
|
|||||||
@@ -0,0 +1,413 @@
|
|||||||
|
=== WP Maintenance Mode ===
|
||||||
|
Contributors: Designmodo, GeorgeJipa
|
||||||
|
Plugin Name: WP Maintenance Mode
|
||||||
|
Plugin URI: http://designmodo.com/
|
||||||
|
Author: Designmodo
|
||||||
|
Author URI: http://designmodo.com/
|
||||||
|
Tags: maintenance mode, admin, administration, unavailable, coming soon, multisite, landing page, under construction, contact form, subscribe, countdown
|
||||||
|
Requires at least: 3.5
|
||||||
|
Tested up to: 4.7
|
||||||
|
License: GPL-2.0+
|
||||||
|
|
||||||
|
Adds a splash page to your site that lets visitors know your site is down for maintenance. It's perfect for a coming soon page.
|
||||||
|
|
||||||
|
== Description ==
|
||||||
|
|
||||||
|
Add a maintenance page to your blog that lets visitors know your blog is down for maintenance, or add a coming soon page for a new website. User with admin rights gets full access to the blog including the front end.
|
||||||
|
|
||||||
|
Activate the plugin and your blog is in maintenance-mode, works and only registered users with enough rights can see the front end. You can use a date with a countdown timer for visitor information or set a value and unit for information.
|
||||||
|
Also works with WordPress Multisite installs (each blog from the network has it's own maintenance settings).
|
||||||
|
|
||||||
|
= Features =
|
||||||
|
|
||||||
|
* Fully customizable (change colors, texts and backgrounds);
|
||||||
|
* Subscription form (export emails to .csv file);
|
||||||
|
* Countdown timer (remaining time);
|
||||||
|
* Contact form (receive emails from visitors);
|
||||||
|
* Coming soon page;
|
||||||
|
* Landing page templates;
|
||||||
|
* WordPress multisite;
|
||||||
|
* Responsive design;
|
||||||
|
* Social media icons;
|
||||||
|
* Works with any WordPress theme;
|
||||||
|
* SEO options;
|
||||||
|
* Exclude URLs from maintenance.
|
||||||
|
|
||||||
|
= Bugs, technical hints or contribute =
|
||||||
|
|
||||||
|
Please give us feedback, contribute and file technical bugs on [GitHub Repo](https://github.com/Designmodocom/WP-Maintenance-Mode).
|
||||||
|
|
||||||
|
= Credits =
|
||||||
|
|
||||||
|
Developed by [Designmodo](http://designmodo.com) & [StrictThemes – WordPress Themes](http://strictthemes.com/)
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
|
||||||
|
1. Unpack the download package
|
||||||
|
2. Upload all files to the `/wp-content/plugins/` directory, include folders
|
||||||
|
3. Activate the plugin through the 'Plugins' menu in WordPress
|
||||||
|
4. Go to `Settings` page, where you can change what settings you need (pay attention to **Exclude** option!)
|
||||||
|
|
||||||
|
== Screenshots ==
|
||||||
|
|
||||||
|
1. Maintenance Mode example
|
||||||
|
2. Maintenance Mode example #2
|
||||||
|
3. Contact form
|
||||||
|
4. Dashboard General settings
|
||||||
|
5. Dashboard Design settings
|
||||||
|
6. Dashboard Modules settings
|
||||||
|
|
||||||
|
== Frequently Asked Questions ==
|
||||||
|
|
||||||
|
= How to use plugin filters =
|
||||||
|
See [GitHub Repo] (https://github.com/Designmodocom/WP-Maintenance-Mode) FAQ.
|
||||||
|
|
||||||
|
= Cache Plugin Support =
|
||||||
|
WP Maintenance Mode can be unstable due the cache plugins, we recommend to deactivate any cache plugin when maintenance mode is active.
|
||||||
|
|
||||||
|
= Exclude list =
|
||||||
|
If you change your login url, please add the new slug (url: http://domain.com/newlogin, then you should add: newlogin) to Exclude list from plugin settings -> General Tab.
|
||||||
|
|
||||||
|
== Changelog ==
|
||||||
|
|
||||||
|
= 2.0.9 (29/11/2016) =
|
||||||
|
* new hook (`wpmm_after_body`) in maintenance mode template (thanks @ [KarolÃna VyskoÄilová](https://github.com/vyskoczilova))
|
||||||
|
* pt_PT (portuguese) language update (thanks @ [Pedro Mendonça](https://github.com/pedro-mendonca))
|
||||||
|
* maintenance mode template can also be loaded from theme/child-theme folder (thanks @ [Florian Tiar](https://github.com/Mahjouba91) and [Lachlan Heywood](https://github.com/lachieh))
|
||||||
|
* new hooks for contact form (if you want to add new fields): `wpmm_contact_form_start`, `wpmm_contact_form_before_message`, `wpmm_contact_form_after_message`, `wpmm_contact_form_end`
|
||||||
|
* new hook for contact form validation (if you want to validate new fields): `wpmm_contact_validation`
|
||||||
|
* new hooks for contact form template (if you want to display new fields): `wpmm_contact_template_start`, `wpmm_contact_template_before_message`, `wpmm_contact_template_after_message`, `wpmm_contact_template_end`
|
||||||
|
* some javascript improvements
|
||||||
|
* small css fix for contact form (thanks @ [frontenddev](https://wordpress.org/support/topic/please-fix-modal-window-of-contact-form/))
|
||||||
|
|
||||||
|
= 2.0.8 (09/09/2016) =
|
||||||
|
* add wp_scripts() function (in helpers.php) to maintain backward compatibility (for those with WP < 4.2.0)
|
||||||
|
* css fix for subscribe button on maintenance page
|
||||||
|
* fix multisite administrator access issue
|
||||||
|
* pt_PT (portuguese) language update (thanks @ Pedro Mendonça)
|
||||||
|
* new hooks for Contact module: `wpmm_contact_template`, `wpmm_contact_subject`, `wpmm_contact_headers`
|
||||||
|
* jQuery (google cdn) path fix when SCRIPT_DEBUG is true
|
||||||
|
|
||||||
|
= 2.0.7 (06/07/2016) =
|
||||||
|
* reset_settings _wpnonce check (thanks # Wordfence)
|
||||||
|
* modules > google analytics code sanitization (thanks @ Wordfence)
|
||||||
|
* move sidebar banners from our servers to plugin folder... as WordPress staff requested
|
||||||
|
* Subscribe button error on Mobile version (thanks @ HostÃlio Thumbo)
|
||||||
|
* replace $wp_scripts global with wp_scripts() function
|
||||||
|
* de_DE language file update (thanks @ tt22tt)
|
||||||
|
|
||||||
|
= 2.0.6 (20/06/2016) =
|
||||||
|
* notifications update
|
||||||
|
* languages update
|
||||||
|
|
||||||
|
= 2.0.5 (17/06/2016) =
|
||||||
|
* roles (array) fix
|
||||||
|
|
||||||
|
= 2.0.4 (17/06/2016) =
|
||||||
|
* fixed issue: responsive subscribe form
|
||||||
|
* fixed issue: jQuery was loaded from a different folder on some WP installations
|
||||||
|
* fixed issue: errors after update (strstr on empty strings because of saving empty lines on exclude list)
|
||||||
|
* fixed issue: if "Redirection" from "General" tab is active, also redirects ajax calls
|
||||||
|
* fixed issue: settings page title was wrong placed
|
||||||
|
* "contact" feature update - nice email template + reply-to email header
|
||||||
|
* refactoring for some methods
|
||||||
|
* all assets are now minified
|
||||||
|
* rewrite count db records function (used on subscribers count)
|
||||||
|
* compatible with https://github.com/afragen/github-updater
|
||||||
|
* compatible with wp-cli http://wp-cli.org/
|
||||||
|
* improved responsivity
|
||||||
|
* improved roles access; now you can set multiple roles (editor, author, subscriber, contributor) and administrator will always have access to backend and frontend
|
||||||
|
* it_IT translation by benedettogit (https://github.com/benedettogit)
|
||||||
|
* updated all language files (need help for 100% translation)
|
||||||
|
|
||||||
|
|
||||||
|
= 2.0.3 (07/10/2014) =
|
||||||
|
* WP_Super_Cache issue was fixed
|
||||||
|
* fixed "Subscribe" button issue on Safari mobile
|
||||||
|
* fixed color of subscribe-success message (same color as subscribe_text)
|
||||||
|
* "Social networks" module edits: settings for links target + a new social network: linkedin
|
||||||
|
* new module "Google Analytics"
|
||||||
|
* loginform shortcode reintroduced
|
||||||
|
* dashboard link on maintenance page reintroduced
|
||||||
|
* the content editor accepts new css inline properties: min-height, max-height, min-width, max-width. Use them wisely! :)
|
||||||
|
* Settings & sidebar view + old translation files edited
|
||||||
|
* Update from old version 1.x to 2.x issue was fixed
|
||||||
|
* Translate on activation issue was fixed
|
||||||
|
* de_DE translation by Frank Bültge (http://bueltge.github.io/)
|
||||||
|
* pt_PT translation (100% translated) by Pedro Mendonça (http://www.pedromendonca.pt)
|
||||||
|
* ru_RU translation (100% translated) by affectiosus (https://github.com/affectiosus)
|
||||||
|
* nl_NL translation by dhunink (https://github.com/dhunink)
|
||||||
|
* es_ES translation (100% translated) by Erick Ruiz de Chavez (http://erickruizdechavez.com/)
|
||||||
|
* fr_FR translation by Florian TIAR (https://github.com/Mahjouba91)
|
||||||
|
* pt_BR translation by Jonatas Araújo (http://www.designworld.com.br/)
|
||||||
|
* sv_SE translation by Andréas Lundgren (http://adevade.com/)
|
||||||
|
|
||||||
|
= 2.0.2 (04/09/2014) =
|
||||||
|
* Removed "Author Link" option from General
|
||||||
|
* Countdown - save details fix
|
||||||
|
|
||||||
|
= 2.0.1 (02/09/2014) =
|
||||||
|
* Reintroduced some deprecated actions from old version (but still available in next 4 releases, after that will be removed) and replaced with new ones:
|
||||||
|
- `wm_head` -> `wpmm_head`
|
||||||
|
- `wm_footer` -> `wpmm_footer`
|
||||||
|
* Multisite settings link fix
|
||||||
|
* WP_Maintenance_Mode: init (array checking for custom_css arrays, move delete cache part into a helper, etc.), add_subscriber, send_contact, redirect fixes & optimizations
|
||||||
|
* WP_Maintenance_Mode_Admin: save_plugin_settings fixes, delete_cache (new method)
|
||||||
|
* Settings & Maintenance views fixes
|
||||||
|
* Readme.txt changes
|
||||||
|
|
||||||
|
= 2.0.0 (01/09/2014) =
|
||||||
|
* Changed design and functionality, new features
|
||||||
|
* Changed multisite behaviour: now you can activate maintenance individually (each blog from the network has it's own maintenance settings)
|
||||||
|
* Removed actions: `wm_header`, `wm_footer`, `wm_content`
|
||||||
|
* Removed filters: `wm_header`
|
||||||
|
* Removed [loginform] shortcode
|
||||||
|
* Some filters are deprecated (but still available in next 4 releases, after that will be removed) and replaced with new ones:
|
||||||
|
- `wm_heading` -> `wpmm_heading`,
|
||||||
|
- `wp_maintenance_mode_status_code` -> `wpmm_status_code`
|
||||||
|
- `wm_title` -> `wpmm_meta_title`
|
||||||
|
- `wm_meta_author` -> `wpmm_meta_author`
|
||||||
|
- `wm_meta_description` -> `wpmm_meta_description`
|
||||||
|
- `wm_meta_keywords` -> `wpmm_meta_keywords`
|
||||||
|
* Added new filters:
|
||||||
|
- `wpmm_backtime` - can be used to change the backtime from page header
|
||||||
|
- `wpmm_meta_robots` - can be used to change `Robots Meta Tag` option (from General)
|
||||||
|
- `wpmm_text` - can be used to change `Text` option (from Design > Content)
|
||||||
|
- `wpmm_scripts` - can be used to embed new javascripts files
|
||||||
|
- `wpmm_styles` - can be used to embed new css files
|
||||||
|
- `wpmm_search_bots` - if you have `Bypass for Search Bots` option (from General) activated, it can be used to add new bots (useragents)
|
||||||
|
* Removed themes and now we have a "Design" & "Modules" tabs, where the look and functionality of the maintenance page can be changed as you need
|
||||||
|
|
||||||
|
= 07/07/2014 =
|
||||||
|
* Switch to new owner, contributor
|
||||||
|
|
||||||
|
= 1.8.11 (07/25/2013) =
|
||||||
|
* Fixes for php notices in scrict mode
|
||||||
|
* Alternative for check url, if curl is not installed
|
||||||
|
|
||||||
|
= 1.8.10 (07/18/2013) =
|
||||||
|
* Add check for urls, Performance topics
|
||||||
|
* Change default setting of 'Support Link' to false
|
||||||
|
* Fix network settings php notices
|
||||||
|
|
||||||
|
= 1.8.9 (06/20/2013) =
|
||||||
|
* Allow empty header, title, heading string
|
||||||
|
* Small code changes
|
||||||
|
* Add Support function
|
||||||
|
* Remove preview, will include later in a new release with extra settings page
|
||||||
|
|
||||||
|
= 1.8.8 (06/05/2013) =
|
||||||
|
* Fix path to localized flash content
|
||||||
|
* Fix preview function
|
||||||
|
* Add ukrainian translation
|
||||||
|
* Add czech translation
|
||||||
|
* Fix exclude function for IP
|
||||||
|
* Security fix for save status via Ajax
|
||||||
|
|
||||||
|
= 1.8.7 (04/07/2013) =
|
||||||
|
* Add RTL support for splash page
|
||||||
|
* Add Filter Hook `wp_maintenance_mode_status_code` Status Code; default is 503
|
||||||
|
* Add support for custom splash page; leave a file with this name `wp-maintenance-mode.php` in the wp-content; the plugin use this file
|
||||||
|
The plugin checks in `WP_CONTENT_DIR . '/wp-maintenance-mode.php'`
|
||||||
|
* Small minor changes
|
||||||
|
* Add filter for more date on splash page
|
||||||
|
|
||||||
|
= 1.8.6 (02/22/2013) =
|
||||||
|
* Remove log inside console for JS
|
||||||
|
* Add support for time inside the countdown
|
||||||
|
* Add filter hook `wm_meta_author`for the meta data author
|
||||||
|
* Add filter hook `wm_meta_description` for custom description
|
||||||
|
* Add filter hook `wm_meta_keywords`for custom meta keys
|
||||||
|
|
||||||
|
= 1.8.5 (01/24/2013) =
|
||||||
|
* Added new settings for hide, view notices about the active maintenance mode
|
||||||
|
* Changes on source, codex
|
||||||
|
* Fix PHP Notices [Support Thread](http://wordpress.org/support/topic/error-message-in-settings-1)
|
||||||
|
* Change default settings, added ajax
|
||||||
|
* Fix Preview function
|
||||||
|
* Fix uninstall in WPMU
|
||||||
|
* Small updates on styles for login form
|
||||||
|
|
||||||
|
= 1.8.4 (12/06/2012) =
|
||||||
|
* Fix for include JS in frontend to use countdown
|
||||||
|
* Small mini fix for a php notice
|
||||||
|
* Add charset on spalsh page for strange databases
|
||||||
|
* Enhanced default exclude adresses
|
||||||
|
* Add shortcode `[loginform]` for easy use a login form in splash page
|
||||||
|
* Test with WordPress 3.5
|
||||||
|
|
||||||
|
= 1.8.3 =
|
||||||
|
* Fix for the forgotten update of JS-files; slow SVN :(
|
||||||
|
* Minor Fixes
|
||||||
|
|
||||||
|
= 1.8.2 =
|
||||||
|
* Add different access for Frontend and Backend
|
||||||
|
* Add Rewrite after Login for Frontend Access
|
||||||
|
* Different small changes
|
||||||
|
* Test for WP 3.5
|
||||||
|
|
||||||
|
= 1.8.1 =
|
||||||
|
* Add option for value of robots meta tag
|
||||||
|
* Add option for optional admin login
|
||||||
|
|
||||||
|
= 1.8.0 =
|
||||||
|
* Include all scripts in backend via function
|
||||||
|
* Update datepicker and countdown js
|
||||||
|
* Supportet IP as exclude for see the frontend
|
||||||
|
* Add support for flish cache od WP Super Cache and W3 Total Cache plugins
|
||||||
|
* Fix for changes in WP 3.3 Multisite
|
||||||
|
|
||||||
|
= 1.7.1 (12/05/2011) =
|
||||||
|
* fix for WP smaller 3.2* on Network
|
||||||
|
|
||||||
|
= 1.7.0 (12/02/2011) =
|
||||||
|
* add functionalities to use in WP Multisite
|
||||||
|
* remove message in header, current is not fixed the ticked in core and the message on Admin Bar an Notice is enough
|
||||||
|
* check on WP 3.3RC1
|
||||||
|
|
||||||
|
= 1.6.10 (08/30/2011) =
|
||||||
|
* add hint in Admin Bar, if active
|
||||||
|
* small changes for WP Codex
|
||||||
|
|
||||||
|
= 1.6.9 (06/13/2011) =
|
||||||
|
* Small fix for empty string on custom design
|
||||||
|
|
||||||
|
= 1.6.8 (04/05/2011) =
|
||||||
|
* Small changes on check for datepicker
|
||||||
|
* Fix for Design monster
|
||||||
|
|
||||||
|
= 1.6.7 (01/05/2011) =
|
||||||
|
* Bugfix: new check for files for different themes; hope this fix the server errors
|
||||||
|
* Bugfix: fix add default settings
|
||||||
|
* Maintenance: different changes on the syntax
|
||||||
|
* Feature: add check for Super Admin on WP Multisite; has allways the rights for access
|
||||||
|
* Feature: now it is possible to exclude feed from maintenance mode
|
||||||
|
* Maintenance: check with 3.0.4 and 3.1-RC2
|
||||||
|
* Maintenance: update language file: .pot, de_DE
|
||||||
|
* Bugfix: JavaScript error on Bulk Actions on plugins fixed
|
||||||
|
* Maintenance: fix all notice, if set no values
|
||||||
|
|
||||||
|
= 1.6.6. (10/09/2010) =
|
||||||
|
* Maintenance: many changes on the code; $locale and hook in side frontend
|
||||||
|
* Maintenance: change attribute_escaped to esc_attr with custom method for WP smaller 2.8
|
||||||
|
* Maintenance: Update german language files
|
||||||
|
* Feature: Shortcodes is now possible in the "Text" option
|
||||||
|
* Feature: no cache header rewrite
|
||||||
|
|
||||||
|
= 1.6.5 (09/16/2010) =
|
||||||
|
* add new design "Chemistry" by [elmastudio.de](http://www.elmastudio.de/ "elmastudio.de")
|
||||||
|
* changes for include methods od class for preview
|
||||||
|
* changes the possibility for include of language specific flash files
|
||||||
|
|
||||||
|
= 1.6.4 (09/13/2010) =
|
||||||
|
* add preview functions
|
||||||
|
* bugfix for list in wp-admin/plugins.php
|
||||||
|
* remove datepicker.regional - dont work fine
|
||||||
|
* different small changes
|
||||||
|
* new language file .pot
|
||||||
|
* add flash file and change on plugin for style "Animate" for spanish language
|
||||||
|
|
||||||
|
= 1.6.3 (07/27/2010) =
|
||||||
|
* bugfix to include stylesheet on maintenance mode message
|
||||||
|
|
||||||
|
= 1.6.2 (07/08/2010) =
|
||||||
|
* add functions for hint in the new UI of WP 3.0
|
||||||
|
* add more WP Codex standard source
|
||||||
|
* fix strings in the language and languages files
|
||||||
|
* add datetimepicker-de
|
||||||
|
|
||||||
|
= 1.6.1 (06/18/2010) =
|
||||||
|
* fix a problem with https://; see [Ticket #13941](http://core.trac.wordpress.org/ticket/13941)
|
||||||
|
|
||||||
|
= 1.6 (05/17/2010) =
|
||||||
|
* bugfix for exclude sites
|
||||||
|
|
||||||
|
= 1.5.9 (05/07/2010) =
|
||||||
|
* change different points
|
||||||
|
* add possibility to wotk with MySQLDumper
|
||||||
|
|
||||||
|
= 1.5.8 (21/03/2010)=
|
||||||
|
* fix exclude error
|
||||||
|
* add textareas for heading and header fields
|
||||||
|
|
||||||
|
= 1.5.7 (03/18/2010) =
|
||||||
|
* block admin-area via role
|
||||||
|
* add message for registered users with not enough rights
|
||||||
|
* add message on login-page
|
||||||
|
* different changes
|
||||||
|
|
||||||
|
= 1.5.6 (02/25/2010) =
|
||||||
|
* changes on css, site.php and different syntax on the plugin
|
||||||
|
|
||||||
|
= 1.5.5 (02/23/2010) =
|
||||||
|
* SORRY, small bug for the url to jQuery
|
||||||
|
|
||||||
|
= 1.5.4 (02/23/2010) =
|
||||||
|
* add time for countdown
|
||||||
|
* changes for WP 3.0
|
||||||
|
* changees on rights to see frontend
|
||||||
|
|
||||||
|
= 1.5.3 (01/05/2010) =
|
||||||
|
* Fix for JavaScript with WordPress 2.9
|
||||||
|
* Add new custom fields for fronted: title, header, heading
|
||||||
|
* Fix for setting userrole to see frontend
|
||||||
|
* Change laguage files
|
||||||
|
|
||||||
|
= 1.5.2 (01/04/2010) =
|
||||||
|
* add user-role setting
|
||||||
|
* correctly the de_DE language file
|
||||||
|
|
||||||
|
= 1.5.1 (10/04/2009) =
|
||||||
|
* add small fix
|
||||||
|
* add language files (en_ES, ro_RO)
|
||||||
|
|
||||||
|
= 1.5.0 (09/28/2009) =
|
||||||
|
* add countdown
|
||||||
|
* change options
|
||||||
|
* change default options
|
||||||
|
* add field for own adress to excerpt of the maintenance mode
|
||||||
|
* etc.
|
||||||
|
|
||||||
|
= 1.4.9 (07/09/2009) =
|
||||||
|
* also ready for WordPress 2.6
|
||||||
|
* add romanian language files
|
||||||
|
* add italian language file by [Gianni Diurno](http://gidibao.net/ "Gianni Diurno")
|
||||||
|
|
||||||
|
= 1.4.8 (03/09/2009) =
|
||||||
|
* add design "Damask" by [Fabian Letscher](http://fabianletscher.de/ "Fabian Letscher")
|
||||||
|
* add design "Lego" by [Alex Frison](http://www.afrison.com/ "Alex Frison")
|
||||||
|
|
||||||
|
= 1.4.7 (26/08/2009) =
|
||||||
|
* change doc-type to utf-8 without BOM
|
||||||
|
|
||||||
|
= v1.4.6 (24/08/2009) =
|
||||||
|
* add design "Animate (Flash)" by [Sebastian Schmiedel](http://www.cayou-media.de/ "Sebastian Schmiedel")
|
||||||
|
* add new hook for add content `wm_content` to include flash on content
|
||||||
|
* add frensh language files
|
||||||
|
|
||||||
|
= v1.4.5 (19/08/2009) =
|
||||||
|
* fix html string in text on frontend
|
||||||
|
* add design "Paint" by [Marvin Labod](http://bugeyes.de/ "Marvin Labod")
|
||||||
|
* add turkey language files
|
||||||
|
|
||||||
|
= v1.4.4 (18/08/2009) =
|
||||||
|
* add design "Chastely" by [Florian Andreas Vogelmaier](http://fv-web.de/ "Florian Andreas Vogelmaier")
|
||||||
|
* add design "Only Typo" by [Robert Pfotenhauer](http://krautsuppe.de/ "Robert Pfotenhauer")
|
||||||
|
|
||||||
|
= v1.4.3 (13/08/2009) =
|
||||||
|
* add option for the Text
|
||||||
|
* add option for active maintenance mode
|
||||||
|
* add design "The FF Error" by [Thomas Meschke](http://www.lokalnetz.com/ "Thomas Meschke")
|
||||||
|
* add design "Monster" by [Sebastian Sebald](http://www.backseatsurfer.de "Sebastian Sebald")
|
||||||
|
|
||||||
|
= v1.4.2 (10/08/2009) =
|
||||||
|
* add design "The Sun" by [Nicki Steiger](http://mynicki.net/ "Nicki Steiger")
|
||||||
|
* now it is possible to add own css and add in settings the url to the css-file
|
||||||
|
|
||||||
|
= v1.4.1 (07/08/2009) =
|
||||||
|
* small html-fix
|
||||||
|
|
||||||
|
= v1.4 (06/08/2009) =
|
||||||
|
* complety new code
|
||||||
|
* options menu
|
||||||
|
* new designs by [David Hellmann](http://www.davidhellmann.com/ "David Hellmann")
|
||||||
@@ -3,14 +3,14 @@
|
|||||||
shared_examples 'Browser::Options' do
|
shared_examples 'Browser::Options' do
|
||||||
|
|
||||||
describe '#basic_auth=' do
|
describe '#basic_auth=' do
|
||||||
let(:exception) { 'Invalid basic authentication format, "login:password" or "Basic base_64_encoded" expected' }
|
let(:exception) { /^Invalid basic authentication format, "login:password" or "Basic base_64_encoded" expected. Your input: .+$/ }
|
||||||
|
|
||||||
after do
|
after do
|
||||||
if @expected
|
if @expected
|
||||||
browser.basic_auth = @auth
|
browser.basic_auth = @auth
|
||||||
expect(browser.basic_auth).to eq @expected
|
expect(browser.basic_auth).to eq @expected
|
||||||
else
|
else
|
||||||
expect { browser.basic_auth = @auth }.to raise_error(exception)
|
expect { browser.basic_auth = @auth }.to raise_error(RuntimeError, exception)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -138,6 +138,13 @@ shared_examples 'WpItem::Versionable' do
|
|||||||
@expected = nil
|
@expected = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# context 'when parsing the changelog for version numbers with dates' do
|
||||||
|
# it 'returns it' do
|
||||||
|
# @file = '/wp-maintenance-mode.txt'
|
||||||
|
# @expected = '2.0.9'
|
||||||
|
# end
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
48
wpscan.rb
48
wpscan.rb
@@ -8,14 +8,47 @@ $exit_code = 0
|
|||||||
require File.join(__dir__, 'lib', 'wpscan', 'wpscan_helper')
|
require File.join(__dir__, 'lib', 'wpscan', 'wpscan_helper')
|
||||||
|
|
||||||
def main
|
def main
|
||||||
# delete old logfile, check if it is a symlink first.
|
|
||||||
File.delete(LOG_FILE) if File.exist?(LOG_FILE) and !File.symlink?(LOG_FILE)
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
wpscan_options = WpscanOptions.load_from_arguments
|
wpscan_options = WpscanOptions.load_from_arguments
|
||||||
|
|
||||||
$log = wpscan_options.log
|
$log = wpscan_options.log
|
||||||
|
|
||||||
|
# some sanity checks
|
||||||
|
if $log
|
||||||
|
if $log.empty?
|
||||||
|
$log = DEFAULT_LOG_FILE
|
||||||
|
end
|
||||||
|
|
||||||
|
# translate to full path if no starting / detected
|
||||||
|
if $log !~ /^#{File::SEPARATOR}/
|
||||||
|
$log = File.join(ROOT_DIR, $log)
|
||||||
|
end
|
||||||
|
|
||||||
|
# check if file exists and has a size greater zero
|
||||||
|
if File.exist?($log) && File.size?($log)
|
||||||
|
puts notice("The supplied log file #{$log} already exists. If you continue the new output will be appended.")
|
||||||
|
print '[?] Do you want to continue? [Y]es [N]o, default: [N]'
|
||||||
|
if Readline.readline !~ /^y/i
|
||||||
|
# unset logging so puts will try to log to the file
|
||||||
|
$log = nil
|
||||||
|
puts notice('Scan aborted')
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# check if we can write the file
|
||||||
|
begin
|
||||||
|
File.open($log, 'a')
|
||||||
|
rescue SystemCallError => e
|
||||||
|
# unset logging so puts will try to log to the file
|
||||||
|
temp = $log
|
||||||
|
$log = nil
|
||||||
|
puts critical("Error with logfile #{temp}:")
|
||||||
|
puts critical(e)
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
banner() unless wpscan_options.no_banner # called after $log set
|
banner() unless wpscan_options.no_banner # called after $log set
|
||||||
|
|
||||||
unless wpscan_options.has_options?
|
unless wpscan_options.has_options?
|
||||||
@@ -193,6 +226,10 @@ def main
|
|||||||
puts critical("searchreplacedb2.php has been found in: '#{wp_target.search_replace_db_2_url}'")
|
puts critical("searchreplacedb2.php has been found in: '#{wp_target.search_replace_db_2_url}'")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if wp_target.emergency_exists?
|
||||||
|
puts critical("emergency.php has been found in: '#{wp_target.emergency_url}'")
|
||||||
|
end
|
||||||
|
|
||||||
wp_target.interesting_headers.each do |header|
|
wp_target.interesting_headers.each do |header|
|
||||||
output = info('Interesting header: ')
|
output = info('Interesting header: ')
|
||||||
|
|
||||||
@@ -470,7 +507,10 @@ def main
|
|||||||
puts
|
puts
|
||||||
end
|
end
|
||||||
|
|
||||||
puts critical('Please submit this info as an Github issue')
|
puts critical('Some hints to help you with this issue:')
|
||||||
|
puts critical('-) Try updating again')
|
||||||
|
puts critical('-) If you see SSL/TLS related error messages you have to fix your local TLS setup')
|
||||||
|
puts critical('-) Windows is still not supported')
|
||||||
exit(1)
|
exit(1)
|
||||||
rescue => e
|
rescue => e
|
||||||
puts
|
puts
|
||||||
|
|||||||
Reference in New Issue
Block a user