Compare commits

...

492 Commits

Author SHA1 Message Date
Erwan
6da9540a97 Merge pull request #1820 from wpscanteam/dfs
Updates DFs
2023-12-01 18:44:24 +01:00
erwanlr
44da286d5d Updates DFs 2023-12-01 17:25:49 +01:00
Alex Sanford
96b6b81d78 Merge pull request #1814 from wpscanteam/fix/non-latin-character-slugs
Fix case where a theme slug is all non-latin characters
2023-11-07 15:43:35 -04:00
Alex Sanford
de4f65e69b Fix case where a theme slug is all non-latin characters 2023-11-02 19:10:15 -03:00
Alex Sanford
bce3b48ac7 Merge pull request #1787 from 0n1shi/fix/db-exports-not-detected
Fixed #1759
2023-10-13 23:21:50 -03:00
Kazuki Onishi
2c1eb27f79 Use valid_response_codes 2023-10-14 01:21:27 +09:00
Alex Sanford
a423b15d53 Merge pull request #1711 from devidw/patch-1
README: Inline to code block for macOS download
2023-10-12 17:29:52 -03:00
Alex Sanford
162fcf4c2d Merge pull request #1803 from wpscanteam/tweak/add-ruby-3.2-to-build
Re-add ruby 3.2 to build
2023-10-12 17:06:25 -03:00
Miguel Xavier Penha Neto
2613fdcc6b Bump version 2023-09-26 15:41:37 -03:00
Alex Sanford
fbabd509f0 Merge pull request #1785 from wpscanteam/dependabot/github_actions/docker/login-action-2.2.0
Bump docker/login-action from 2.1.0 to 2.2.0
2023-09-26 15:39:01 -03:00
Alex Sanford
a075c93e6f Merge pull request #1797 from wpscanteam/dependabot/bundler/webmock-tw-3.19.1
Update webmock requirement from ~> 3.18.1 to ~> 3.19.1
2023-09-26 15:38:49 -03:00
Alex Sanford
d2a8bf92d9 Merge pull request #1798 from wpscanteam/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-09-26 15:38:42 -03:00
Alex Sanford
39459fb5a1 Bump cms_scanner 2023-09-26 15:36:48 -03:00
Alex Sanford
c11f4b9064 Re-add ruby 3.2 to build 2023-09-26 15:35:56 -03:00
Alex Sanford
4fb47e1c3b Bump ruby requirement to >= 2.7 2023-09-26 15:34:25 -03:00
dependabot[bot]
1260a6480f Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 10:39:42 +00:00
dependabot[bot]
598c6ebb69 Update webmock requirement from ~> 3.18.1 to ~> 3.19.1
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.18.1...v3.19.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 10:36:31 +00:00
erwanlr
289e2d80c1 Adds DFs 2023-08-24 09:24:36 +02:00
erwanlr
cb7cd9aac2 Updates DFs 2023-07-11 15:24:31 +02:00
Kazuki Onishi
99fca11958 Fixed issue #1759 2023-06-18 14:57:44 +09:00
Kolja Zuelsdorf
ea020aa8a5 Bump version. 2023-06-09 12:44:12 +02:00
Erwan
4d30fecc36 Merge pull request #1786 from wpscanteam/fix/gem-push
Fixes Gem Push action
2023-06-09 11:16:45 +02:00
Erwan
369bbbe084 Fixes Gem Push action 2023-06-09 11:15:04 +02:00
Kolja Zuelsdorf
257a4a458b Bump version. 2023-06-08 14:22:40 +02:00
dependabot[bot]
0ddc3cc10b Bump docker/login-action from 2.1.0 to 2.2.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 10:57:13 +00:00
Kolja Zuelsdorf
9c6f1daa83 Merge pull request #1783 from wpscanteam/fix/proxy-auth
Fixed using proper proxy auth credentials when updating the database and talking to the WPScan API.
2023-06-06 15:58:57 +02:00
Miguel Xavier Penha Neto
cb9701eaef Update README.md 2023-05-28 00:25:01 -03:00
Miguel Xavier Penha Neto
afc2fe2f79 Merge pull request #1784 from wpscanteam/revert-1757-master
Update Daily API Request Limit
2023-05-25 12:53:18 -03:00
Miguel Xavier Penha Neto
0dd00645f8 Revert "Update Daily API Request Limit" 2023-05-24 15:19:37 -03:00
Kolja Zuelsdorf
c7919e3c75 Fixed using proper proxy auth credentials when updating the database and talking to the WPScan API. 2023-05-17 14:44:29 +02:00
erwanlr
fb812554f3 Adds DFS 2023-03-19 19:28:09 +01:00
Erwan
63094494d3 Merge pull request #1770 from wpscanteam/dependabot/github_actions/docker/build-push-action-4
Bump docker/build-push-action from 3 to 4
2023-02-14 10:38:24 +01:00
dependabot[bot]
5ff73256e8 Bump docker/build-push-action from 3 to 4
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 4.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-31 10:01:53 +00:00
Erwan
06d861c16c Removes ruby 3.2 from build matrix 2022-12-26 21:22:12 +01:00
Erwan
cfe1a40491 Merge pull request #1757 from Aws0mee/master
Update Daily API Request Limit
2022-12-26 20:14:28 +01:00
Erwan
01fe047f2b Updates ruby matrix 2022-12-26 20:10:45 +01:00
Erwan
a4dc0fb0e6 Uses correct ruby action for gem push action 2022-12-26 20:10:08 +01:00
erwanlr
0905ad98c1 Updates DFs 2022-12-21 21:15:18 +01:00
Erwan
6a309a9624 Merge pull request #1756 from wpscanteam/dependabot/bundler/rspec-tw-3.12.0
Update rspec requirement from ~> 3.11.0 to ~> 3.12.0
2022-11-17 15:27:09 +01:00
erwanlr
7969e51231 Adds DFs 2022-11-17 15:26:04 +01:00
Aws0me
933d6c7d0e Update Daily API Request Limit 2022-10-31 19:30:34 -04:00
Erwan
3c879b2523 Update password_attack.rb 2022-10-31 14:48:11 +01:00
Erwan
783d016bd1 Updates --password-attack help text - Ref #1755 2022-10-31 14:44:01 +01:00
Erwan
1436122b01 Merge pull request #1751 from wpscanteam/dependabot/github_actions/docker/login-action-2.1.0
Bump docker/login-action from 2.0.0 to 2.1.0
2022-10-31 11:52:31 +01:00
dependabot[bot]
922e4f993b Update rspec requirement from ~> 3.11.0 to ~> 3.12.0
Updates the requirements on [rspec](https://github.com/rspec/rspec-metagem) to permit the latest version.
- [Release notes](https://github.com/rspec/rspec-metagem/releases)
- [Commits](https://github.com/rspec/rspec-metagem/compare/v3.11.0...v3.12.0)

---
updated-dependencies:
- dependency-name: rspec
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-31 10:00:34 +00:00
dependabot[bot]
16d79ec11a Bump docker/login-action from 2.0.0 to 2.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-12 10:08:28 +00:00
erwanlr
f08158342a Adds DFs 2022-10-08 10:43:04 +02:00
Erwan
be7437d117 Update README.md 2022-09-08 18:13:28 +02:00
Erwan
1a76eb8a83 Merge pull request #1744 from wpscanteam/dependabot/bundler/webmock-tw-3.18.1
Update webmock requirement from ~> 3.14.0 to ~> 3.18.1
2022-08-22 13:29:27 +02:00
dependabot[bot]
24851106bd Update webmock requirement from ~> 3.14.0 to ~> 3.18.1
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.14.0...v3.18.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-22 10:00:32 +00:00
erwanlr
46e3692a03 Adds DFs 2022-08-11 23:44:06 +02:00
erwanlr
196fbab5b1 Adds DFs 2022-07-15 20:54:56 +02:00
erwanlr
f9e6e75c0c Adds DFs 2022-07-02 13:18:01 +02:00
erwanlr
61363a1985 Adds DFs 2022-05-21 19:28:02 +02:00
erwanlr
2c639c8f4e Adds DFs 2022-05-10 14:54:53 +02:00
Erwan
3cdf77ce54 Update README.md 2022-05-07 10:02:11 +02:00
Erwan
1719e5dd21 Merge pull request #1727 from wpscanteam/dependabot/github_actions/docker/setup-qemu-action-2
Bump docker/setup-qemu-action from 1 to 2
2022-05-06 12:56:55 +02:00
Erwan
2436aa527c Merge pull request #1729 from wpscanteam/dependabot/github_actions/docker/setup-buildx-action-2
Bump docker/setup-buildx-action from 1 to 2
2022-05-06 12:56:47 +02:00
Erwan
855b2b5c36 Merge pull request #1728 from wpscanteam/dependabot/github_actions/docker/build-push-action-3
Bump docker/build-push-action from 2 to 3
2022-05-06 12:56:23 +02:00
Erwan
b78b86cea3 Merge pull request #1726 from wpscanteam/dependabot/github_actions/docker/login-action-2.0.0
Bump docker/login-action from 1.14.1 to 2.0.0
2022-05-06 12:56:13 +02:00
dependabot[bot]
047eec686d Bump docker/setup-buildx-action from 1 to 2
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 2.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-06 10:07:04 +00:00
dependabot[bot]
ff28962660 Bump docker/build-push-action from 2 to 3
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 3.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-06 10:07:01 +00:00
dependabot[bot]
6751ebd110 Bump docker/setup-qemu-action from 1 to 2
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 2.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-06 10:06:58 +00:00
dependabot[bot]
03fbe79152 Bump docker/login-action from 1.14.1 to 2.0.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.14.1 to 2.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.14.1...v2.0.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-06 10:06:56 +00:00
erwanlr
9abba8fd01 Adds DFs 2022-04-28 14:22:38 +02:00
erwanlr
787e4cef0b Fixes specs 2022-04-04 18:15:11 +02:00
erwanlr
56de3e28f5 Updates DFs 2022-04-04 18:11:44 +02:00
erwanlr
4c1aeaab3d Bumps version 2022-04-04 16:03:10 +02:00
erwanlr
f9366f6da6 Uses CMS Scanner 0.13.8 2022-04-04 15:39:15 +02:00
erwanlr
a9f3624a9b Adds DFS 2022-04-02 08:34:15 +02:00
Erwan
3305692808 Merge pull request #1717 from wpscanteam/dependabot/bundler/rubocop-tw-1.26.0
Update rubocop requirement from ~> 1.25.0 to ~> 1.26.0
2022-03-14 12:40:12 +01:00
dependabot[bot]
4c50336793 Update rubocop requirement from ~> 1.25.0 to ~> 1.26.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-14 10:00:41 +00:00
erwanlr
ed89ea4a78 Adds DFs 2022-03-08 09:26:58 +01:00
Erwan
58bde8c26a Merge pull request #1714 from wpscanteam/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2.4.0 to 3
2022-03-02 12:02:11 +01:00
Erwan
39d4e94fbb Merge pull request #1713 from wpscanteam/dependabot/github_actions/docker/login-action-1.14.1
Bump docker/login-action from 1.14.0 to 1.14.1
2022-03-02 12:01:21 +01:00
dependabot[bot]
a87e394b6d Bump actions/checkout from 2.4.0 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.4.0...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-02 10:09:34 +00:00
dependabot[bot]
b48d11374f Bump docker/login-action from 1.14.0 to 1.14.1
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.14.0 to 1.14.1.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.14.0...v1.14.1)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-02 10:09:32 +00:00
Erwan
a8f913c020 Merge pull request #1712 from wpscanteam/dependabot/github_actions/docker/login-action-1.14.0
Bump docker/login-action from 1.13.0 to 1.14.0
2022-02-28 12:43:30 +01:00
dependabot[bot]
3f4877a3a0 Bump docker/login-action from 1.13.0 to 1.14.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.13.0 to 1.14.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.13.0...v1.14.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-28 10:09:40 +00:00
erwanlr
5feb6ffe34 Adds DFs 2022-02-26 10:51:54 +01:00
David Wolf
a5adcfec97 README: Inline to code block for macOS download 2022-02-22 19:55:32 +01:00
erwanlr
90b61d035e Bumps version 2022-02-22 17:20:25 +01:00
Erwan
05c21fb0a8 Merge pull request #1710 from wpscanteam/fixes
Fixes #1709
2022-02-22 15:05:48 +01:00
erwanlr
28cdf8e649 Uses cms_scanner 0.13.7 2022-02-22 13:48:08 +01:00
erwanlr
d1f2781929 Uses ruby/setup-ruby GH action 2022-02-22 12:31:59 +01:00
erwanlr
6b57da0d8a Adds ruby 3.1 to GH matrix 2022-02-22 12:17:33 +01:00
Erwan
b38f94ef39 Merge pull request #1708 from wpscanteam/dependabot/github_actions/docker/login-action-1.13.0
Bump docker/login-action from 1.12.0 to 1.13.0
2022-02-22 12:16:14 +01:00
dependabot[bot]
06e3c76ac6 Bump docker/login-action from 1.12.0 to 1.13.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.12.0...v1.13.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-18 10:09:18 +00:00
Erwan
885bf041c4 Merge pull request #1705 from wpscanteam/dependabot/bundler/rspec-tw-3.11.0
Update rspec requirement from ~> 3.10.0 to ~> 3.11.0
2022-02-14 23:49:12 +01:00
dependabot[bot]
ffe8574c51 Update rspec requirement from ~> 3.10.0 to ~> 3.11.0
Updates the requirements on [rspec](https://github.com/rspec/rspec-metagem) to permit the latest version.
- [Release notes](https://github.com/rspec/rspec-metagem/releases)
- [Commits](https://github.com/rspec/rspec-metagem/compare/v3.10.0...v3.11.0)

---
updated-dependencies:
- dependency-name: rspec
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-14 10:00:37 +00:00
Erwan
910d34c721 Merge pull request #1701 from wpscanteam/dependabot/bundler/rubocop-tw-1.25.0
Update rubocop requirement from ~> 1.23.0 to ~> 1.25.0
2022-01-24 22:06:43 +01:00
dependabot[bot]
5fec3a97c5 Update rubocop requirement from ~> 1.23.0 to ~> 1.25.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.23.0...v1.25.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-24 14:59:43 +00:00
erwanlr
37f7dddac7 Updates deps 2022-01-24 15:58:49 +01:00
erwanlr
05d912e658 Updates DF fixtures 2022-01-19 15:47:23 +01:00
erwanlr
4bd87b2953 Updates DF 2022-01-19 15:43:58 +01:00
erwanlr
a4c843e51e Adds DFs 2022-01-15 13:35:28 +01:00
Erwan
7f9295ad54 Merge pull request #1695 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.13.0
Update rubocop-performance requirement from ~> 1.12.0 to ~> 1.13.0
2021-12-27 13:20:59 +01:00
dependabot[bot]
0ab3d16be9 Update rubocop-performance requirement from ~> 1.12.0 to ~> 1.13.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.12.0...v1.13.0)

---
updated-dependencies:
- dependency-name: rubocop-performance
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-27 10:00:24 +00:00
erwanlr
93f2e18811 Adds DFs 2021-12-26 13:42:43 +01:00
Christian Mehlmauer
ccd7324590 Merge pull request #1693 from wpscanteam/dependabot/github_actions/docker/login-action-1.12.0
Bump docker/login-action from 1.10.0 to 1.12.0
2021-12-21 11:42:39 +01:00
dependabot[bot]
7323e8aa08 Bump docker/login-action from 1.10.0 to 1.12.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.10.0 to 1.12.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.10.0...v1.12.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-21 10:08:09 +00:00
erwanlr
035830d7bc Better pattern for #1692 2021-12-18 18:16:54 +01:00
erwanlr
eaaefe2cf5 Fixes #1692 2021-12-18 18:04:06 +01:00
erwanlr
9499caf7b8 Adds DFs 2021-12-18 15:21:20 +01:00
erwanlr
a677cf87cd Adds DFs 2021-12-05 18:09:29 +01:00
Erwan
2fc872ae6f Merge pull request #1686 from wpscanteam/dependabot/bundler/rubocop-tw-1.23.0
Update rubocop requirement from ~> 1.22.3 to ~> 1.23.0
2021-11-15 12:27:32 +01:00
dependabot[bot]
27d4d14303 Update rubocop requirement from ~> 1.22.3 to ~> 1.23.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.22.3...v1.23.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-15 10:00:34 +00:00
erwanlr
434f8819a2 Adds DFS 2021-11-13 16:18:42 +01:00
erwanlr
97ad2dc158 Bumps version 2021-11-08 10:39:18 +01:00
erwanlr
8c1b8b5fda Patch for homebrew 2021-11-08 09:33:56 +01:00
erwanlr
e179b7ae66 Updates deps 2021-11-08 09:10:50 +01:00
erwanlr
3af18b4fcb Adds DFs 2021-11-03 18:13:33 +01:00
Christian Mehlmauer
f4ddff64e9 Merge pull request #1685 from wpscanteam/dependabot/github_actions/actions/checkout-2.4.0
Bump actions/checkout from 2.3.5 to 2.4.0
2021-11-03 11:10:43 +01:00
dependabot[bot]
0f587c4292 Bump actions/checkout from 2.3.5 to 2.4.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.5 to 2.4.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.5...v2.4.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-03 10:07:25 +00:00
Erwan
cc7f284d93 Merge pull request #1682 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.12.0
Update rubocop-performance requirement from ~> 1.11.0 to ~> 1.12.0
2021-11-01 23:08:18 +01:00
erwanlr
ebe6c50e15 Adds DFs 2021-11-01 22:45:32 +01:00
dependabot[bot]
19a4671e59 Update rubocop-performance requirement from ~> 1.11.0 to ~> 1.12.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.11.0...v1.12.0)

---
updated-dependencies:
- dependency-name: rubocop-performance
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-01 10:00:40 +00:00
Christian Mehlmauer
e505afe9df Merge pull request #1678 from wpscanteam/dependabot/github_actions/actions/checkout-2.3.5
Bump actions/checkout from 2.3.4 to 2.3.5
2021-10-18 14:06:54 +02:00
dependabot[bot]
2632c6ed86 Bump actions/checkout from 2.3.4 to 2.3.5
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.4...v2.3.5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-18 10:10:23 +00:00
firefart
2f5ad3a338 remove double setup 2021-10-10 22:17:53 +02:00
firefart
7ea45a5f9b add platforms 2021-10-10 21:54:51 +02:00
firefart
9d06ffe83a try multiplatform builds 2021-10-10 21:50:22 +02:00
erwanlr
11394eaa9f Adds DFs 2021-10-02 13:14:02 +02:00
Erwan
8353161451 Merge pull request #1670 from wpscanteam/dependabot/bundler/webmock-tw-3.14.0
Update webmock requirement from ~> 3.13.0 to ~> 3.14.0
2021-09-27 13:41:07 +02:00
dependabot[bot]
cbc52b977f Update webmock requirement from ~> 3.13.0 to ~> 3.14.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.13.0...v3.14.0)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-27 10:00:36 +00:00
erwanlr
e0b47d7501 Adds DFs 2021-09-24 12:09:31 +02:00
erwanlr
d92152a557 Bumps versions 2021-09-22 18:43:46 +02:00
erwanlr
2cc243ac13 Updates deps 2021-09-22 17:32:27 +02:00
erwanlr
e735a68102 Adds DFs 2021-09-10 13:06:38 +02:00
Erwan
d50ee2217e Merge pull request #1665 from wpscanteam/dependabot/bundler/rubocop-tw-1.20.0
Update rubocop requirement from ~> 1.19.0 to ~> 1.20.0
2021-08-31 09:10:38 +02:00
dependabot[bot]
e78d948f82 Update rubocop requirement from ~> 1.19.0 to ~> 1.20.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.19.0...v1.20.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-30 10:00:28 +00:00
erwanlr
dd10991f93 Adds DFs 2021-08-28 17:17:52 +02:00
erwanlr
99963c9b24 Adds DFs 2021-08-22 17:39:27 +02:00
Erwan
9acac36b85 Merge pull request #1664 from wpscanteam/dependabot/bundler/rubocop-tw-1.19.0
Update rubocop requirement from ~> 1.18.3 to ~> 1.19.0
2021-08-16 13:09:16 +02:00
dependabot[bot]
460f10b4ad Update rubocop requirement from ~> 1.18.3 to ~> 1.19.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.18.3...v1.19.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-16 10:00:43 +00:00
erwanlr
48f5e7c4ab Adds DFs 2021-08-13 14:36:12 +02:00
erwanlr
866504c2ab Adds DFs 2021-08-06 18:32:42 +02:00
Erwan
ec6417feed Fixes rubocop 2021-08-04 17:50:13 +02:00
Erwan
b02f65888c Outputs uid/gid when DB folder not writable 2021-08-04 17:45:03 +02:00
Christian Mehlmauer
9db97d0730 run daily 2021-08-02 13:22:45 +02:00
Christian Mehlmauer
36a35279f2 actions 2021-08-02 12:17:16 +02:00
Christian Mehlmauer
d9f3c682d0 docker build 2021-08-02 12:16:00 +02:00
erwanlr
42dee6cfa9 Updates DFs 2021-07-30 18:30:56 +02:00
erwanlr
d41e73727a Removes DF causing FP 2021-07-29 15:39:57 +02:00
erwanlr
9b2755020d Adds DFs 2021-07-24 16:18:14 +02:00
erwanlr
91388a787a Updates rubocop 2021-07-19 16:27:02 +02:00
erwanlr
2690ab324f Adds DFs 2021-07-19 16:24:57 +02:00
erwanlr
84993f7bd6 Adds DFs 2021-07-11 20:05:17 +02:00
erwanlr
5b5cac925c Adds DFs 2021-06-25 18:18:00 +02:00
Erwan
854ad45d84 Merge pull request #1654 from wpscanteam/dependabot/bundler/rubocop-tw-1.17.0
Update rubocop requirement from ~> 1.16.0 to ~> 1.17.0
2021-06-21 19:56:23 +02:00
dependabot[bot]
7078943b90 Update rubocop requirement from ~> 1.16.0 to ~> 1.17.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.16.0...v1.17.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-21 10:00:38 +00:00
erwanlr
d59a4799f5 Adds DFs 2021-06-19 14:08:00 +02:00
erwanlr
cac9d4cc71 Adds DFs 2021-06-11 18:55:35 +02:00
erwanlr
8aff900d4a Bumps version 2021-06-08 17:25:13 +02:00
Erwan
3c99593599 Merge pull request #1653 from wpscanteam/fix-ruby-3.0
Fixes for ruby 3
2021-06-08 17:17:58 +02:00
erwanlr
d14bc739c8 Fixes for ruby 3 2021-06-08 16:16:10 +02:00
erwanlr
6060fc7a69 Merge branch 'psych-issue' 2021-06-08 13:04:55 +02:00
Erwan
d79163fcb5 Add ruby 3.0 to build matrix 2021-06-08 13:00:09 +02:00
erwanlr
145cae912b Fixes #1646 2021-06-08 12:58:57 +02:00
Erwan
058eac160f Merge pull request #1650 from wpscanteam/dependabot/bundler/rubocop-tw-1.16.0
Update rubocop requirement from ~> 1.15.0 to ~> 1.16.0
2021-06-07 08:06:13 +02:00
dependabot[bot]
f38cac8d8a Update rubocop requirement from ~> 1.15.0 to ~> 1.16.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.15.0...v1.16.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-07 05:00:49 +00:00
erwanlr
2e19a423fc Adds DFs 2021-06-04 14:35:31 +02:00
erwanlr
52e3e25741 Updates WP version output to handle future latest-in-branch status - Ref #1649 2021-06-04 12:03:35 +02:00
erwanlr
1201ecbfd3 Adds DFs 2021-05-29 13:22:21 +02:00
Erwan
75de6316d2 Merge pull request #1648 from wpscanteam/dependabot/bundler/rubocop-tw-1.15.0
Update rubocop requirement from ~> 1.14.0 to ~> 1.15.0
2021-05-24 08:07:20 +02:00
dependabot[bot]
4dbef70bd2 Update rubocop requirement from ~> 1.14.0 to ~> 1.15.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.14.0...v1.15.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-24 05:00:46 +00:00
erwanlr
a0b5fb1107 Adds DFs 2021-05-21 14:50:31 +02:00
erwanlr
14800f1f6c Adds comment about CodeClimate config 2021-05-18 13:35:59 +02:00
erwanlr
78231becd9 Adds CodeClimate config 2021-05-18 13:31:58 +02:00
Erwan
da180e1e20 Merge pull request #1647 from wpscanteam/db-backup
Fixes #1642
2021-05-18 13:27:48 +02:00
erwanlr
c48be5e980 Fixes #1642 2021-05-18 12:05:27 +02:00
Erwan
98a71d3af6 Adds Docker Pulls Badge to Readme 2021-05-18 10:28:06 +02:00
Erwan
111693ce9e Merge pull request #1645 from wpscanteam/dependabot/bundler/webmock-tw-3.13.0
Update webmock requirement from ~> 3.12.0 to ~> 3.13.0
2021-05-17 09:46:49 +02:00
dependabot[bot]
d926520b29 Update webmock requirement from ~> 3.12.0 to ~> 3.13.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.12.0...v3.13.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-17 05:00:54 +00:00
erwanlr
1a6e359d02 Adds DFs 2021-05-15 10:35:10 +02:00
Christian Mehlmauer
46d7ce0a65 Merge pull request #1641 from wpscanteam/dependabot/github_actions/actions/setup-ruby-1.1.3
Bump actions/setup-ruby from 1 to 1.1.3
2021-05-12 08:36:13 +02:00
dependabot[bot]
fd63bfd5fa Bump actions/setup-ruby from 1 to 1.1.3
Bumps [actions/setup-ruby](https://github.com/actions/setup-ruby) from 1 to 1.1.3.
- [Release notes](https://github.com/actions/setup-ruby/releases)
- [Commits](https://github.com/actions/setup-ruby/compare/v1...v1.1.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-12 06:09:05 +00:00
Erwan
0778d7e5f6 Merge pull request #1640 from wpscanteam/dependabot/bundler/rubocop-tw-1.14.0
Update rubocop requirement from ~> 1.13.0 to ~> 1.14.0
2021-05-10 12:59:25 +02:00
dependabot[bot]
9cb53bbf43 Update rubocop requirement from ~> 1.13.0 to ~> 1.14.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.13.0...v1.14.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 05:02:02 +00:00
erwanlr
a98e37918b Adds Dfs 2021-05-07 18:58:48 +02:00
erwanlr
1d18514ab5 Fixes #1638 2021-05-03 10:15:42 +02:00
erwanlr
75d6a16298 Adds DFs 2021-05-01 12:23:43 +02:00
erwanlr
d0ce7cb5c5 Updates dep 2021-04-26 17:04:33 +02:00
Erwan
fa0d068c30 Uses continue-on-error in Coverall action 2021-04-26 14:43:10 +02:00
Erwan
33d5199f51 Merge pull request #1635 from wpscanteam/dependabot/bundler/rubocop-tw-1.13.0
Update rubocop requirement from ~> 1.12.0 to ~> 1.13.0
2021-04-26 12:11:51 +02:00
dependabot[bot]
ac14ce71be Update rubocop requirement from ~> 1.12.0 to ~> 1.13.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.12.0...v1.13.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-26 10:10:26 +00:00
Erwan
f4bb6e521e Merge pull request #1634 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.11.0
Update rubocop-performance requirement from ~> 1.10.0 to ~> 1.11.0
2021-04-26 08:57:20 +02:00
dependabot[bot]
5f8aa862b4 Update rubocop-performance requirement from ~> 1.10.0 to ~> 1.11.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.10.0...v1.11.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-26 05:00:51 +00:00
erwanlr
3621f4cc15 Adds DFs 2021-04-23 14:27:41 +02:00
erwanlr
b6e36b2605 Adds DFs 2021-04-16 13:31:01 +02:00
erwanlr
7b55570cbb Adds comment about ethon version restriction 2021-04-12 16:18:32 +02:00
erwanlr
308997523c Will work better with the correct version number 2021-04-12 16:17:35 +02:00
Erwan
90433d77c6 Merge pull request #1631 from wpscanteam/erwanlr-patch-1
Tried to lock down Ethon dep
2021-04-12 15:59:38 +02:00
Erwan
c4bc3bf0e7 Try that again, with other syntax 2021-04-12 15:08:04 +02:00
Erwan
e9638bee06 Tried to lock down Ethon dep 2021-04-12 15:06:19 +02:00
erwanlr
850662902b Fixes #1630 2021-04-12 14:51:14 +02:00
erwanlr
26867873e2 Adds Dfs 2021-04-09 16:32:55 +02:00
erwanlr
7f491c2403 Adds DFs 2021-04-02 14:21:51 +02:00
Erwan
776ca22e77 Merge pull request #1625 from wpscanteam/dependabot/bundler/rubocop-tw-1.12.0
Update rubocop requirement from ~> 1.11.0 to ~> 1.12.0
2021-03-29 08:46:48 +02:00
dependabot[bot]
dec31b5a1c Update rubocop requirement from ~> 1.11.0 to ~> 1.12.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.11.0...v1.12.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-29 05:00:56 +00:00
erwanlr
96dbe526cf Adds DFs 2021-03-27 10:06:06 +01:00
Christian Mehlmauer
3113e7309e Merge pull request #1621 from wpscanteam/dependabot/github_actions/actions/checkout-v2.3.4
Update actions/checkout requirement to v2.3.4
2021-03-22 18:01:49 +01:00
dependabot[bot]
1809c6c195 Update actions/checkout requirement to v2.3.4
Updates the requirements on [actions/checkout](https://github.com/actions/checkout) to permit the latest version.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](5a4ac9002d)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-22 16:38:50 +00:00
Christian Mehlmauer
adb84ef7da updates 2021-03-22 17:38:25 +01:00
erwanlr
824697490f Bumps version 2021-03-22 17:32:20 +01:00
erwanlr
62e01cb9d6 Updates deps 2021-03-22 16:36:27 +01:00
erwanlr
87c2f82b80 Adds --exclude-usernames option 2021-03-22 16:35:33 +01:00
erwanlr
f887f8baa4 Bumps version 2021-03-22 12:59:11 +01:00
erwanlr
4d00d97be9 Checks the potential introduced_in version 2021-03-22 11:35:11 +01:00
erwanlr
b0e946ee29 Updates deps 2021-03-22 11:06:11 +01:00
erwanlr
1220b9f47b Adds DFs 2021-03-20 15:01:15 +01:00
erwanlr
12d2d0ffb0 Adds DFs 2021-03-13 12:59:58 +01:00
Erwan
4581113741 Typo 2021-03-09 12:22:48 +01:00
erwanlr
a20c769eae Adds DFs 2021-03-06 12:29:39 +01:00
Erwan
3259316cf1 Merge pull request #1615 from wpscanteam/dependabot/bundler/rubocop-tw-1.11.0
Update rubocop requirement from ~> 1.10.0 to ~> 1.11.0
2021-03-02 08:09:09 +01:00
dependabot-preview[bot]
9cc06234e4 Update rubocop requirement from ~> 1.10.0 to ~> 1.11.0
Updates the requirements on [rubocop](https://github.com/rubocop/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.10.0...v1.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 05:16:34 +00:00
Erwan
1ee73268d7 Merge pull request #1614 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.10.0
Update rubocop-performance requirement from ~> 1.9.0 to ~> 1.10.0
2021-03-01 08:05:54 +01:00
Erwan
f477620899 Merge pull request #1613 from wpscanteam/dependabot/bundler/webmock-tw-3.12.0
Update webmock requirement from ~> 3.11.0 to ~> 3.12.0
2021-03-01 08:05:44 +01:00
dependabot-preview[bot]
8a9dc1ce2c Update rubocop-performance requirement from ~> 1.9.0 to ~> 1.10.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.9.0...v1.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 06:19:05 +00:00
dependabot-preview[bot]
b584aa24bd Update webmock requirement from ~> 3.11.0 to ~> 3.12.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.11.0...v3.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 06:18:19 +00:00
erwanlr
8dfe78a210 Adds DFs 2021-02-26 15:07:46 +01:00
erwanlr
7143cb5def Adds DFs 2021-02-20 14:32:11 +01:00
Erwan
e6c49d99b6 Merge pull request #1610 from wpscanteam/dependabot/bundler/rubocop-tw-1.10.0
Update rubocop requirement from ~> 1.9.0 to ~> 1.10.0
2021-02-16 08:09:19 +01:00
dependabot-preview[bot]
6e71f9771c Update rubocop requirement from ~> 1.9.0 to ~> 1.10.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.9.0...v1.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 05:16:18 +00:00
erwanlr
452126b56a Bumps version 2021-02-15 10:44:03 +01:00
erwanlr
28dfd8b3b9 Updates numbers of free daily requests, props @XalfiE 2021-02-15 09:09:10 +01:00
erwanlr
d3196bc03f Adds DFs 2021-02-12 17:58:50 +01:00
erwanlr
0bff3231cd Adds DFs 2021-02-05 16:57:19 +01:00
erwanlr
6e9d147dd0 Bumps version 2021-02-01 14:08:49 +01:00
erwanlr
9a7872a7c4 Uses CMSScanner 0.13.1 2021-02-01 14:07:00 +01:00
Ryan Dewhurst
e8f10fb2db Update README.md 2021-02-01 13:32:38 +01:00
Ryan Dewhurst
221f3fcbfd Update README.md 2021-02-01 13:28:31 +01:00
erwanlr
ab5153363f Merge branch 'master' of github.com:wpscanteam/wpscan 2021-02-01 11:32:39 +01:00
erwanlr
8576145d3f Updates specs for consistency 2021-02-01 11:32:28 +01:00
Ryan Dewhurst
7908fb7d97 Update README.md 2021-02-01 11:10:31 +01:00
erwanlr
44b934540e Adds DFs 2021-01-30 11:32:13 +01:00
Erwan
9978595237 Adds install via HomeBrew in Readme 2021-01-29 14:00:51 +01:00
Erwan
109c701e4f Updates prerequisites section of the readme 2021-01-29 13:54:06 +01:00
erwanlr
11f35d86ff Fixes #1599 2021-01-29 13:34:39 +01:00
erwanlr
fa3005f2b7 Updates rubocop dep 2021-01-29 11:56:04 +01:00
erwanlr
f30255d6d8 Adds DFs 2021-01-23 11:17:52 +01:00
erwanlr
183df75112 Adds DFs 2021-01-15 13:52:41 +01:00
erwanlr
105d06c8f8 Bumps version 2021-01-12 15:20:58 +01:00
Erwan
82941906ca Merge pull request #1595 from wpscanteam/dev
Dev
2021-01-12 15:01:27 +01:00
erwanlr
470fbb1ff3 Updates CMSScanner dep, fixes #1592 & #1594 2021-01-12 14:17:38 +01:00
erwanlr
8c6234879e Adds check for PHP disabled, Ref #1593 2021-01-12 14:03:25 +01:00
erwanlr
689252c715 Adds DFs 2021-01-08 17:38:54 +01:00
Erwan
19cf00227b Merge pull request #1591 from wpscanteam/dependabot/bundler/rubocop-tw-1.8.0
Update rubocop requirement from ~> 1.7.0 to ~> 1.8.0
2021-01-08 08:26:37 +01:00
dependabot-preview[bot]
c9795dc560 Update rubocop requirement from ~> 1.7.0 to ~> 1.8.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.7.0...v1.8.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 05:27:27 +00:00
erwanlr
188c8f31b2 Bumps version 2021-01-04 08:35:44 +01:00
erwanlr
76b2c067f6 Updates cms_scanner dep 2021-01-04 07:44:19 +01:00
Erwan
01316ceac1 Merge pull request #1590 from wpscanteam/dependabot/bundler/simplecov-tw-0.21.0
Update simplecov requirement from ~> 0.20.0 to ~> 0.21.0
2021-01-04 07:16:31 +01:00
dependabot-preview[bot]
52f14c5f06 Update simplecov requirement from ~> 0.20.0 to ~> 0.21.0
Updates the requirements on [simplecov](https://github.com/simplecov-ruby/simplecov) to permit the latest version.
- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)
- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)
- [Commits](https://github.com/simplecov-ruby/simplecov/compare/v0.20.0...v0.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-04 05:24:22 +00:00
erwanlr
6782730d80 Adds Dfs 2021-01-01 15:08:24 +01:00
Erwan
4235871a00 Merge pull request #1582 from wpscanteam/dependabot/bundler/webmock-tw-3.11.0
Update webmock requirement from ~> 3.10.0 to ~> 3.11.0
2020-12-28 08:25:10 +01:00
Erwan
cb27a22fc4 Merge pull request #1585 from wpscanteam/dependabot/bundler/rubocop-tw-1.7.0
Update rubocop requirement from ~> 1.6.0 to ~> 1.7.0
2020-12-28 08:24:26 +01:00
dependabot-preview[bot]
e639d4eee3 Update rubocop requirement from ~> 1.6.0 to ~> 1.7.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.6.0...v1.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-28 05:17:34 +00:00
erwanlr
d95b70f1c2 Adds DFs 2020-12-26 16:19:14 +01:00
dependabot-preview[bot]
fb97553f7c Update webmock requirement from ~> 3.10.0 to ~> 3.11.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.10.0...v3.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-21 05:28:58 +00:00
erwanlr
b3b3bec6b0 Adds DFs 2020-12-18 13:16:51 +01:00
erwanlr
baab7a49f6 Bumps version 2020-12-16 15:53:00 +01:00
erwanlr
6843fe700e Fixes API retry not properly working (cache issue), Fixes #1579, Updates remaining of WpVulnDB 2020-12-16 13:04:11 +01:00
erwanlr
0c193de70e Merge branch 'master' of github.com:wpscanteam/wpscan 2020-12-16 13:03:19 +01:00
erwanlr
e42ce414de Fixes API retry not properly working (cache issue), Fixes #1579, Updates remaining of WpVulnDB 2020-12-16 13:03:03 +01:00
Christian Mehlmauer
6d347ada98 really use ruby 2.7.2 :) 2020-12-15 13:44:48 +01:00
erwanlr
3638241513 Fixes incorrect detection of a response from the API in some cases (better) 2020-12-15 12:05:06 +01:00
erwanlr
1c30743a11 Fixes incorrect detection of a response from the API in some cases 2020-12-15 11:54:59 +01:00
erwanlr
48d363031b Updates to ruby 2.7.2 2020-12-15 11:13:51 +01:00
erwanlr
d083719b9c Updates remains of wpscan.org 2020-12-15 11:02:49 +01:00
erwanlr
7fd59b27f4 Adds DFs 2020-12-11 16:33:59 +01:00
Erwan
6f4b216bb0 Merge pull request #1578 from wpscanteam/dependabot/bundler/rubocop-tw-1.6.0
Update rubocop requirement from ~> 1.5.1 to ~> 1.6.0
2020-12-10 11:45:20 +01:00
dependabot-preview[bot]
5fa82a3f27 Update rubocop requirement from ~> 1.5.1 to ~> 1.6.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.5.1...v1.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 05:17:04 +00:00
erwanlr
02d1e30b08 Adds Dfs 2020-12-04 13:10:02 +01:00
Erwan
1e2d227c56 Merge pull request #1575 from wpscanteam/dependabot/bundler/rubocop-tw-1.5.1
Update rubocop requirement from ~> 1.4.2 to ~> 1.5.1
2020-12-03 16:14:54 +01:00
Erwan
cfc895e658 Merge pull request #1573 from wpscanteam/dependabot/bundler/memory_profiler-tw-1.0.0
Update memory_profiler requirement from ~> 0.9.13 to ~> 1.0.0
2020-12-03 16:14:41 +01:00
dependabot-preview[bot]
3f789b39c4 Update rubocop requirement from ~> 1.4.2 to ~> 1.5.1
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.4.2...v1.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-03 05:16:47 +00:00
dependabot-preview[bot]
16002576d2 Update memory_profiler requirement from ~> 0.9.13 to ~> 1.0.0
Updates the requirements on [memory_profiler](https://github.com/SamSaffron/memory_profiler) to permit the latest version.
- [Release notes](https://github.com/SamSaffron/memory_profiler/releases)
- [Changelog](https://github.com/SamSaffron/memory_profiler/blob/master/CHANGELOG.md)
- [Commits](https://github.com/SamSaffron/memory_profiler/compare/v0.9.13...v1.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-02 05:15:58 +00:00
Erwan
7b0e352d29 Merge pull request #1572 from wpscanteam/dependabot/bundler/simplecov-tw-0.20.0
Update simplecov requirement from ~> 0.19.0 to ~> 0.20.0
2020-11-30 10:20:10 +01:00
dependabot-preview[bot]
da85729254 Update simplecov requirement from ~> 0.19.0 to ~> 0.20.0
Updates the requirements on [simplecov](https://github.com/simplecov-ruby/simplecov) to permit the latest version.
- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)
- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)
- [Commits](https://github.com/simplecov-ruby/simplecov/compare/v0.19.0...v0.20.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-30 05:21:27 +00:00
erwanlr
6a48f6c42b Adds DFs 2020-11-27 09:21:30 +01:00
erwanlr
8eabcd9df3 Updates deps 2020-11-26 09:43:48 +01:00
erwanlr
6b89bc9f55 Adds DFs 2020-11-20 17:31:10 +01:00
Ryan Dewhurst
1e250796ca Update README.md 2020-11-19 17:59:01 +01:00
Ryan Dewhurst
c73f9028f0 Update README.md 2020-11-19 17:58:03 +01:00
erwanlr
71c89371a9 Adds Dfs 2020-11-13 12:15:31 +01:00
Erwan
9043ddca71 Merge pull request #1563 from wpscanteam/dependabot/bundler/webmock-tw-3.10.0
Update webmock requirement from ~> 3.9.0 to ~> 3.10.0
2020-11-13 08:54:39 +01:00
Erwan
6c461e778d Merge pull request #1562 from wpscanteam/dependabot/bundler/rubocop-tw-1.3.0
Update rubocop requirement from ~> 1.2.0 to ~> 1.3.0
2020-11-13 08:54:08 +01:00
dependabot-preview[bot]
3f1a71c643 Update webmock requirement from ~> 3.9.0 to ~> 3.10.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.9.0...v3.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-13 05:18:55 +00:00
dependabot-preview[bot]
b0df6dcade Update rubocop requirement from ~> 1.2.0 to ~> 1.3.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v1.2.0...v1.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-13 05:18:35 +00:00
erwanlr
ac0d2fb536 Updates rubocop 2020-11-06 18:44:59 +01:00
erwanlr
48f107021a Adds Dfs 2020-11-06 17:57:20 +01:00
Erwan
64ac4ecf72 Merge pull request #1559 from wpscanteam/dependabot/bundler/rspec-tw-3.10.0
Update rspec requirement from ~> 3.9.0 to ~> 3.10.0
2020-11-02 08:45:32 +01:00
dependabot-preview[bot]
ddc680a9ae Update rspec requirement from ~> 3.9.0 to ~> 3.10.0
Updates the requirements on [rspec](https://github.com/rspec/rspec) to permit the latest version.
- [Release notes](https://github.com/rspec/rspec/releases)
- [Commits](https://github.com/rspec/rspec/compare/v3.9.0...v3.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-02 05:21:21 +00:00
erwanlr
43b04da5a2 Updates rubocop 2020-10-30 14:50:42 +01:00
erwanlr
bc28dd392d Adds DFs 2020-10-30 14:36:10 +01:00
erwanlr
0d2e1fee43 Bumps version 2020-10-28 13:34:39 +01:00
erwanlr
eaf2cec8c9 Updates rubocop 2020-10-28 10:13:35 +01:00
erwanlr
611d3dfd4d Fixes #1554 2020-10-28 10:10:57 +01:00
erwanlr
c4030d8267 Adds DFs 2020-10-23 12:47:33 +02:00
erwanlr
630752787a Bumps version 2020-10-16 14:00:07 +02:00
erwanlr
c07ecc58cb Updates vulnerability reference URL 2020-10-16 13:08:44 +02:00
erwanlr
89fccfe7b7 Adds DFs 2020-10-16 13:03:54 +02:00
Ryan Dewhurst
ceeb7e538b Update email in license 2020-10-12 21:38:55 +02:00
erwanlr
8dab57b59c Bumps version 2020-10-09 12:30:57 +02:00
Erwan
7a00cd8db1 Merge pull request #1550 from d10r/master
fixed typo in link (wpscam.com)
2020-10-09 11:44:39 +02:00
Didi
daa0915bca fixed typo in link (wpscam.com) 2020-10-09 11:38:54 +02:00
erwanlr
ca6b6a30d8 Updates Rubocop dep 2020-10-09 11:23:17 +02:00
erwanlr
09f2640879 Adds Dfs 2020-10-09 11:18:40 +02:00
erwanlr
f61c55b350 Updates DB URLs 2020-10-08 19:29:57 +02:00
erwanlr
78d0c2540c Adds DFs 2020-10-02 12:26:58 +02:00
Erwan
1d0426e816 Merge pull request #1544 from wpscanteam/dependabot/bundler/rubocop-tw-0.92.0
Update rubocop requirement from ~> 0.91.0 to ~> 0.92.0
2020-09-28 08:24:49 +02:00
dependabot-preview[bot]
103a4049c8 Update rubocop requirement from ~> 0.91.0 to ~> 0.92.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.91.0...v0.92.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-28 05:23:28 +00:00
erwanlr
cbcb1dcb33 Adds Dfs 2020-09-27 11:55:30 +02:00
erwanlr
9c36293382 Adds DFs 2020-09-19 10:39:54 +02:00
erwanlr
2fb36dc425 Adds DF 2020-09-18 15:40:29 +02:00
erwanlr
c717ba5a71 Updates rubocop 2020-09-18 15:15:21 +02:00
Christian Mehlmauer
7572518e3b add label to dockerfile 2020-09-17 08:10:20 +02:00
Erwan
f670133a82 Merge pull request #1541 from wpscanteam/dependabot/bundler/webmock-tw-3.9.0
Update webmock requirement from ~> 3.8.0 to ~> 3.9.0
2020-09-14 08:55:07 +02:00
dependabot-preview[bot]
a6bbf41e82 Update webmock requirement from ~> 3.8.0 to ~> 3.9.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.8.0...v3.9.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 05:23:55 +00:00
erwanlr
622c16932a Adds DFs 2020-09-12 12:21:16 +02:00
erwanlr
5fd7e0ed22 Bumps version 2020-09-10 14:34:44 +02:00
erwanlr
d9f6c71015 Adds specs 2020-09-10 13:41:01 +02:00
Erwan
61a3106b3b Merge pull request #1540 from dwisiswant0/installer-log-regex-update
Update regex for WP Duplicator plugin installer-log
2020-09-10 13:22:15 +02:00
Dwi Siswanto
20eb2d825d 🔨 Update regex 2020-09-10 17:30:36 +07:00
Dwi Siswanto
906557d2ec 🔨 Update regex for WP Duplicator plugin installer-log 2020-09-10 04:38:19 +07:00
erwanlr
c1e278ea80 Updates rubocop-perf 2020-09-07 09:19:13 +02:00
erwanlr
e2d616a53f Adds DFs 2020-09-05 11:14:47 +02:00
erwanlr
c6802ccdd2 Updates rubocop 2020-09-03 11:05:36 +02:00
erwanlr
abd50fd037 Adds DFs 2020-08-29 12:02:20 +02:00
erwanlr
4515be53b4 Adds Dfs 2020-08-22 17:51:39 +02:00
Erwan
920a25bb25 Merge pull request #1536 from wpscanteam/dependabot/bundler/simplecov-tw-0.19.0
Update simplecov requirement from ~> 0.18.2 to ~> 0.19.0
2020-08-17 09:10:44 +02:00
dependabot-preview[bot]
648dd05069 Update simplecov requirement from ~> 0.18.2 to ~> 0.19.0
Updates the requirements on [simplecov](https://github.com/simplecov-ruby/simplecov) to permit the latest version.
- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)
- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)
- [Commits](https://github.com/simplecov-ruby/simplecov/compare/v0.18.2...v0.19.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-17 05:57:47 +00:00
erwanlr
713edcecca Adds DFs 2020-08-15 12:02:27 +02:00
erwanlr
ac16a951c5 Bumps version 2020-08-08 14:21:50 +02:00
erwanlr
1043bcb267 Adds Dfs 2020-08-08 13:25:15 +02:00
erwanlr
22979a1a77 Adds DFs 2020-08-07 09:39:50 +02:00
erwanlr
3039d2e7eb More rubocop fixes 2020-08-06 12:47:00 +02:00
erwanlr
557dee2d8c Updates rubocop 2020-08-06 11:43:26 +02:00
erwanlr
a506adcb64 Fixes #1529 2020-08-06 10:51:08 +02:00
erwanlr
3bfb120646 Adds DF for monarch - Ref #1527 2020-08-04 14:42:50 +02:00
erwanlr
43e613aa52 Updates Gravityforms detection - Ref #1526 2020-08-03 12:33:14 +02:00
erwanlr
0d930ed605 Adds Dfs 2020-08-01 10:45:42 +02:00
erwanlr
2014f1e4b3 Bumps version 2020-07-25 17:13:29 +02:00
erwanlr
4889d17e0a Ref #1510 2020-07-25 16:24:59 +02:00
erwanlr
494d31215d Ref #1510 2020-07-25 16:21:03 +02:00
erwanlr
582bdea431 Adds DFs 2020-07-25 11:51:59 +02:00
erwanlr
ecf7df9c01 Ref #1510 2020-07-24 15:32:41 +02:00
erwanlr
a9760e8817 Ref #1510 2020-07-24 15:26:22 +02:00
erwanlr
b32e990dd4 Bumps version 2020-07-20 15:11:31 +02:00
erwanlr
4320d2436f Fixes #1522 2020-07-20 13:15:54 +02:00
erwanlr
cba6e74b13 Fixes #1520 2020-07-18 13:35:53 +02:00
erwanlr
981bcf5fa2 Adds Dfs 2020-07-18 13:17:37 +02:00
erwanlr
1d79bc37d3 Bumps version 2020-07-17 10:50:15 +02:00
erwanlr
2fae3336ba Removes useless statement 2020-07-16 17:53:59 +02:00
erwanlr
cfb98c5139 Ref #1518 for XMLrPC multicall 2020-07-16 17:50:43 +02:00
erwanlr
b0260327c4 Updates XMLRPC MultiCall attack to reflect use changes. Ref #1518 2020-07-16 14:56:08 +02:00
erwanlr
f65532e347 Uses an enumerator to read wordlist during pwd attack. Fixes #1518 2020-07-16 14:39:09 +02:00
erwanlr
ff574b046c Checks if the wp-login.php is available before attacking it - Fixes #1519 2020-07-16 10:22:45 +02:00
erwanlr
97c995b64c Adds additional check just in case (related to Rubocop offences fixed) 2020-07-15 20:07:47 +02:00
erwanlr
8361ec97e4 Rubocop: Adds new cops by default, fixes offences 2020-07-15 16:45:36 +02:00
erwanlr
7a0bbc0acb Updates cms_scanner dep 2020-07-15 14:24:22 +02:00
Erwan
66f5eca841 Merge pull request #1517 from wpscanteam/dependabot/bundler/rubocop-tw-0.88.0
Update rubocop requirement from ~> 0.87.0 to ~> 0.88.0
2020-07-14 09:11:47 +02:00
dependabot-preview[bot]
b53e6d1888 Update rubocop requirement from ~> 0.87.0 to ~> 0.88.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.87.0...v0.88.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 05:38:06 +00:00
erwanlr
4b68fa8b60 Adds DFs 2020-07-11 10:19:52 +02:00
Erwan
54770c5a50 Merge pull request #1516 from wpscanteam/dependabot/bundler/rubocop-tw-0.87.0
Update rubocop requirement from ~> 0.86.0 to ~> 0.87.0
2020-07-07 09:34:54 +02:00
dependabot-preview[bot]
39fb2167f7 Update rubocop requirement from ~> 0.86.0 to ~> 0.87.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.86.0...v0.87.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 06:44:44 +00:00
Erwan
c33fef9c98 Merge pull request #1515 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.7.0
Update rubocop-performance requirement from ~> 1.6.0 to ~> 1.7.0
2020-07-07 08:43:34 +02:00
dependabot-preview[bot]
08a1117edf Update rubocop-performance requirement from ~> 1.6.0 to ~> 1.7.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop-hq/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-performance/compare/v1.6.0...v1.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 05:40:52 +00:00
erwanlr
e14cbed56e Adds DF 2020-07-04 11:27:49 +02:00
erwanlr
56e2ab16cc Adds DFs 2020-06-27 11:39:00 +02:00
erwanlr
d76d4b70f5 Updates rubocop & fixes offences 2020-06-23 20:30:48 +02:00
erwanlr
e223936a81 Adds Dfs 2020-06-20 12:00:20 +02:00
Christian Mehlmauer
60d067c421 fix docker install 2020-06-14 20:16:14 +02:00
Christian Mehlmauer
4102cf4688 fix #1487 2020-06-14 19:49:58 +02:00
erwanlr
dc977e6630 Adds missing spec files 2020-06-13 22:10:27 +02:00
erwanlr
05deabd775 Adds DF 2020-06-13 21:32:23 +02:00
erwanlr
549ab4aa15 Bumps version 2020-06-08 20:53:15 +02:00
erwanlr
b189c71682 Typo 2020-06-08 20:14:02 +02:00
erwanlr
b909856933 Fixes #1504 2020-06-08 20:13:18 +02:00
erwanlr
5de9084901 Updates deps 2020-06-08 19:59:04 +02:00
erwanlr
384ef0b44c Adds DFs 2020-06-06 10:48:34 +02:00
Erwan
9307772dc3 Merge pull request #1502 from wpscanteam/dependabot/bundler/rubocop-tw-0.85.0
Update rubocop requirement from ~> 0.84.0 to ~> 0.85.0
2020-06-02 08:26:24 +02:00
dependabot-preview[bot]
730c71d103 Update rubocop requirement from ~> 0.84.0 to ~> 0.85.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.84.0...v0.85.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-02 05:43:24 +00:00
erwanlr
5c710b96f5 Adds Dfs 2020-05-30 11:36:59 +02:00
erwanlr
fe63d0eadf Adds DFs 2020-05-29 10:05:59 +02:00
erwanlr
a6ca95159a Adds DFs 2020-05-23 11:13:57 +02:00
erwanlr
677d32fef5 Updates rubocop-performance and config 2020-05-23 09:17:41 +02:00
Erwan
14abd05969 Merge pull request #1498 from wpscanteam/dependabot/bundler/rubocop-tw-0.84.0
Update rubocop requirement from ~> 0.83.0 to ~> 0.84.0
2020-05-22 08:39:17 +02:00
dependabot-preview[bot]
2e680be34f Update rubocop requirement from ~> 0.83.0 to ~> 0.84.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.83.0...v0.84.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-22 05:32:38 +00:00
erwanlr
fe29942bf4 Adds Dfs 2020-05-16 15:30:47 +02:00
Erwan
c8fb717ac1 Updates Readme's Install section 2020-05-13 21:30:09 +02:00
Erwan
1ff7fcc913 Merge pull request #1493 from wpscanteam/dependabot/bundler/rubocop-tw-0.83.0
Update rubocop requirement from ~> 0.82.0 to ~> 0.83.0
2020-05-12 10:21:34 +02:00
Erwan
419c32702a Fixes rubocop offenses 2020-05-12 09:32:02 +02:00
dependabot-preview[bot]
9b63714caa Update rubocop requirement from ~> 0.82.0 to ~> 0.83.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.82.0...v0.83.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 05:35:24 +00:00
erwanlr
f034233607 Adds DFs 2020-05-09 11:46:23 +02:00
erwanlr
be6fcb51b6 Adds Dfs 2020-05-02 12:44:05 +02:00
Ryan Dewhurst
e49a682f00 Add user documentation URL to readme 2020-05-01 11:35:39 +02:00
Erwan
23ad3141a1 Fixes rubocop offence 2020-04-27 09:31:47 +02:00
Erwan
5347e374e0 Fixes rubocop last offence! 2020-04-27 09:26:26 +02:00
Erwan
1a49a628de Fixes rubocop offences 2020-04-27 09:22:59 +02:00
Erwan
8def256d7e Fixes potential InvalidProgressBar error in Pwd Attack 2020-04-27 09:15:37 +02:00
erwanlr
1cd8e6bad7 Adds Dfs 2020-04-25 17:43:29 +02:00
erwanlr
7a03c0db25 Adds DFs 2020-04-18 10:49:21 +02:00
Erwan
e7e3657d1f Merge pull request #1485 from wpscanteam/dependabot/bundler/rubocop-tw-0.82.0
Update rubocop requirement from ~> 0.81.0 to ~> 0.82.0
2020-04-17 10:03:28 +02:00
dependabot-preview[bot]
734dfcc9bc Update rubocop requirement from ~> 0.81.0 to ~> 0.82.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.81.0...v0.82.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 05:28:29 +00:00
erwanlr
b0db15099d Bumps version 2020-04-16 11:02:15 +02:00
erwanlr
6fbd2369ba Merge branch 'master' of github.com:wpscanteam/wpscan 2020-04-16 10:20:09 +02:00
erwanlr
f4a6674eed Better code related to CVSS 2020-04-16 10:06:28 +02:00
Ryan Dewhurst
c0567ad4f5 Change wording to security scanner 2020-04-16 09:37:15 +02:00
erwanlr
f146ee7e9f Adds YT references and CVSS to output 2020-04-15 17:02:44 +02:00
erwanlr
e606f4ce18 Adds YT references in output 2020-04-15 14:46:06 +02:00
Ryan Dewhurst
945b589a58 Update README.md
SEO tweak
2020-04-14 09:44:36 +02:00
Erwan
b18042c4a8 Reverts previous commit. spec folder already excluded via .dockerignore 2020-04-13 16:44:27 +02:00
Erwan
a9ff39104b Removes specs folder from Docker build 2020-04-13 16:21:17 +02:00
erwanlr
f6af6e5880 Bumps version 2020-04-12 19:02:57 +02:00
erwanlr
57c6c2d471 Removes support for Ruby 2.4 as EOL 2020-04-12 18:21:23 +02:00
erwanlr
c362527903 Adds DFs 2020-04-11 13:46:37 +02:00
erwanlr
a7acbd0738 Adds DFs 2020-04-04 12:23:40 +02:00
Erwan
f67192ebce Updates help messages regarding plugins-*-detection - Ref #1472 2020-04-02 12:37:09 +02:00
Erwan
c44fde83e4 Merge pull request #1473 from wpscanteam/dependabot/bundler/rubocop-tw-0.81.0
Update rubocop requirement from ~> 0.80.0 to ~> 0.81.0
2020-04-02 09:33:07 +02:00
dependabot-preview[bot]
50119285ef Update rubocop requirement from ~> 0.80.0 to ~> 0.81.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.80.0...v0.81.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-02 05:29:02 +00:00
Erwan
6216916fed Updates ruby version 2020-04-01 09:55:54 +02:00
Erwan
2952380200 Fixes typo 2020-03-30 20:47:12 +02:00
erwanlr
fb42b82e0d Adds DFs 2020-03-28 13:07:39 +01:00
Erwan
6d381ab88d Display valid credentials identified with the [!] icon - Ref #1470 2020-03-23 09:59:24 +01:00
erwanlr
c5c1de32bc Adds DFs 2020-03-21 16:56:16 +01:00
erwanlr
8077ad9bcd Adds DF - Ref #1469 2020-03-19 20:48:41 +01:00
erwanlr
6f22ba350f Adds DFs 2020-03-14 11:33:08 +01:00
erwanlr
f23d0c0157 Bumps version 2020-03-13 16:58:35 +01:00
erwanlr
a9a38edf24 Remove cache action from build 2020-03-13 16:06:33 +01:00
erwanlr
a5534f1e49 Merge branch 'master' of github.com:wpscanteam/wpscan 2020-03-13 16:04:11 +01:00
erwanlr
1c6469f384 Updates deps 2020-03-13 16:03:59 +01:00
erwanlr
8cfdbc1196 Adds DF 2020-03-13 16:03:21 +01:00
Erwan
88737ca6ea Fixes error with reference when debug log identified 2020-03-13 08:12:35 +01:00
Erwan
45bebc60bd Fixes typo in Readme 2020-03-12 22:25:23 +01:00
Erwan
4f7dec4635 Fixes detection of Users via WP JSON when blog uses basic auth 2020-03-12 13:12:40 +01:00
erwanlr
98739cce5a Adds DF 2020-03-10 20:45:08 +01:00
erwanlr
0bfbfacc27 Fixes #1465 2020-03-10 20:31:42 +01:00
erwanlr
73cd862e83 Bumps version 2020-03-09 20:02:44 +01:00
erwanlr
3305e9b74f Adds DFs 2020-03-09 19:24:43 +01:00
erwanlr
c37ec0e8d0 Updates deps 2020-03-09 18:11:47 +01:00
erwanlr
0b005477c1 Adds additional message when checksums mismatch during an update 2020-03-08 20:48:01 +01:00
erwanlr
a1467f8dac Merge branch 'dfs' 2020-03-07 14:56:23 +01:00
erwanlr
40d2c34347 Adds DFs 2020-03-07 14:56:10 +01:00
Erwan
528270e767 Updates Target#wordpress_from_meta_comments_or_scripts Xpath check 2020-03-06 16:17:40 +01:00
erwanlr
f4a04b2387 Adds DFs 2020-03-03 18:54:41 +01:00
erwanlr
14ed6ae109 Fixes #1461 2020-03-02 15:34:51 +01:00
erwanlr
4fd43694ae Typo 2020-03-02 11:57:37 +01:00
erwanlr
552d731e6a Updates Readme to reflect #1460 2020-03-02 11:56:42 +01:00
erwanlr
49ac3ef528 Supports loading api token from ENV, Fixes #1460 2020-03-02 11:45:50 +01:00
erwanlr
4379313f12 Bumps version 2020-02-29 14:24:53 +01:00
erwanlr
3901949f36 Updates deps 2020-02-29 13:27:52 +01:00
erwanlr
a3d8593fed Adds DFs 2020-02-29 12:28:55 +01:00
erwanlr
7c5baeb9c7 Adds DF 2020-02-26 10:55:06 +01:00
erwanlr
c692db5f85 Adds DFs 2020-02-24 13:29:13 +01:00
erwanlr
9130196ffc Runs rubocop before rspec 2020-02-19 14:38:31 +01:00
erwanlr
dad4a65118 Adds Coveralls GH Action 2020-02-19 14:16:31 +01:00
Erwan
4c34c2feb7 Merge pull request #1457 from wpscanteam/dependabot/bundler/rubocop-tw-0.80.0
Update rubocop requirement from ~> 0.79.0 to ~> 0.80.0
2020-02-19 12:32:39 +01:00
dependabot-preview[bot]
23522f7775 Update rubocop requirement from ~> 0.79.0 to ~> 0.80.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.79.0...v0.80.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-19 05:23:43 +00:00
Christian Mehlmauer
82c61398ba change name 2020-02-17 07:32:20 +01:00
Christian Mehlmauer
02871050a6 change step names 2020-02-17 06:34:39 +01:00
Christian Mehlmauer
7d3b1fea6b ruby-head not supported 2020-02-17 06:32:18 +01:00
Christian Mehlmauer
24917fa2a6 wrong key 2020-02-17 06:29:14 +01:00
Christian Mehlmauer
de3d8e4a23 Use a build matrix 2020-02-17 06:28:09 +01:00
erwanlr
1502845d65 Adds DFs 2020-02-15 13:20:54 +01:00
erwanlr
af3f10f74e Reduces time to detect the sub_dir when a lot of urls 2020-02-13 20:07:25 +00:00
erwanlr
c100372b31 Reduces time to detect non WP sites 2020-02-13 19:15:30 +00:00
erwanlr
72d699b39a Adds more improvements re passive scanning when there are a lot of urls 2020-02-13 15:36:42 +00:00
erwanlr
7d2b8a2a8b Reduces time to detect non WP sites when there are a lof of links in pages 2020-02-12 19:50:00 +00:00
erwanlr
8729c68e22 Removes useless params set 2020-02-11 16:39:01 +00:00
erwanlr
e2d48bedd9 Better fix for #1451, adds target IP address to output, ref #1088 2020-02-11 16:28:59 +00:00
erwanlr
6b241ce9b3 Avoids merging CLI params when calling VulnAPI - Ref #1451 2020-02-11 09:14:14 +00:00
erwanlr
1b68bdb36c Bumps version 2020-02-09 13:31:40 +00:00
erwanlr
fb82538441 Fixes #1451 2020-02-09 12:40:48 +00:00
erwanlr
2709d0869a Adds DFs 2020-02-08 10:28:19 +00:00
erwanlr
343f87bbe7 Adds DFs 2020-02-01 10:02:38 +00:00
erwanlr
ecbfc6004c Adds DFs 2020-01-25 12:28:16 +00:00
erwanlr
c57eecc81b Adds DF 2020-01-23 12:30:27 +00:00
erwanlr
7ea14dc03f Adds DF 2020-01-23 11:15:28 +00:00
erwanlr
4340d27258 Bumps version 2020-01-21 16:14:26 +00:00
erwanlr
e911be8f14 Removes ruby 2.7.0 from failure matrix 2020-01-21 16:12:38 +00:00
erwanlr
a4c650cdff Fixes incorrect RDF URLs detection 2020-01-21 15:06:29 +00:00
erwanlr
31a58f8a8f Fixes rare crash 2020-01-21 14:47:17 +00:00
erwanlr
ba4f15f111 Adds DFs 2020-01-18 11:20:43 +00:00
Erwan
206a913eb9 Merge pull request #1447 from wpscanteam/dependabot/bundler/webmock-tw-3.8.0
Update webmock requirement from ~> 3.7.0 to ~> 3.8.0
2020-01-16 10:17:09 +01:00
dependabot-preview[bot]
21ba490073 Update webmock requirement from ~> 3.7.0 to ~> 3.8.0
Updates the requirements on [webmock](https://github.com/bblimke/webmock) to permit the latest version.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.7.0...v3.8.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-16 05:23:09 +00:00
erwanlr
2a29e2ed95 Adds DFs 2020-01-11 19:54:12 +00:00
Erwan
9517d14fd3 Fixes rubocop offence 2020-01-10 20:06:33 +01:00
Erwan
3deaa896df Fix rubocop typo 2020-01-10 19:28:01 +01:00
Erwan
c117007dc0 Merge pull request #1445 from wpscanteam/dependabot/bundler/rubocop-tw-0.79.0
Update rubocop requirement from ~> 0.78.0 to ~> 0.79.0
2020-01-07 08:53:56 +01:00
dependabot-preview[bot]
50baa238b9 Update rubocop requirement from ~> 0.78.0 to ~> 0.79.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.78.0...v0.79.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-07 05:21:29 +00:00
erwanlr
0e2d771660 Adds DFs 2020-01-04 12:17:51 +00:00
1896 changed files with 1008957 additions and 33753 deletions

7
.codeclimate.yml Normal file
View File

@@ -0,0 +1,7 @@
version: "2"
# https://docs.codeclimate.com/docs/default-analysis-configuration#sample-codeclimateyml
checks:
method-complexity:
enabled: true
config:
threshold: 15

17
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every weekday
interval: "daily"

42
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
ruby: [2.7, '3.0', 3.1, 3.2]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Ruby ${{ matrix.ruby }}
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- name: Install GEMs
run: |
gem install bundler
bundle config force_ruby_platform true
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: rubocop
run: |
bundle exec rubocop
- name: rspec
run: |
bundle exec rspec
- name: Coveralls
uses: coverallsapp/github-action@master
continue-on-error: true
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

56
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
name: Build Docker Images
on:
push:
branches:
- master
release:
types: [published]
schedule:
- cron: "0 7 * * *"
jobs:
images:
runs-on: ubuntu-latest
steps:
- name: checkout sources
uses: actions/checkout@v4
- name: Set tag to latest
if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'schedule'
run: |
echo "DOCKER_TAG=latest" >> $GITHUB_ENV
- name: Set tag to release name
if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/')
run: |
echo "DOCKER_TAG=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
- name: Check if DOCKER_TAG is set
if: env.DOCKER_TAG == ''
run: |
echo DOCKER_TAG is not set!
exit 1
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
id: buildx
with:
install: true
- name: Login to Docker Hub
uses: docker/login-action@v2.2.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: wpscanteam/wpscan:${{ env.DOCKER_TAG }}

View File

@@ -10,11 +10,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v4
- name: Set up Ruby 2.6
uses: actions/setup-ruby@v1
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6.x
ruby-version: 2.6
#- name: Publish to GPR
# run: |

View File

@@ -1,34 +0,0 @@
name: Ruby
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Ruby 2.6
uses: actions/setup-ruby@v1
with:
ruby-version: 2.6.x
- name: Cache gems
uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/wpscan.gemspec') }}
restore-keys: |
${{ runner.os }}-gem-
- name: Build and test
run: |
gem install bundler
bundle config force_ruby_platform true
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: test
run: |
bundle exec rspec
- name: rubocop
run: |
bundle exec rubocop

View File

@@ -1,15 +1,21 @@
require: rubocop-performance
AllCops:
TargetRubyVersion: 2.4
NewCops: enable
SuggestExtensions: false
TargetRubyVersion: 2.7
Exclude:
- '*.gemspec'
- 'vendor/**/*'
Layout/LineLength:
Max: 120
Lint/ConstantDefinitionInBlock:
Enabled: false
Lint/MissingSuper:
Enabled: false
Lint/UriEscapeUnescape:
Enabled: false
Metrics/AbcSize:
Max: 25
Max: 27
Metrics/BlockLength:
Exclude:
- 'spec/**/*'
@@ -18,11 +24,13 @@ Metrics/ClassLength:
Exclude:
- 'app/controllers/enumeration/cli_options.rb'
Metrics/CyclomaticComplexity:
Max: 8
Max: 10
Metrics/MethodLength:
Max: 20
Exclude:
- 'app/controllers/enumeration/cli_options.rb'
Metrics/PerceivedComplexity:
Max: 11
Style/ClassVars:
Enabled: false
Style/Documentation:

View File

@@ -1 +1 @@
2.6.2
3.0.2

View File

@@ -1,4 +1,19 @@
# frozen_string_literal: true
if ENV['GITHUB_ACTION']
require 'simplecov-lcov'
SimpleCov::Formatter::LcovFormatter.config do |c|
c.single_report_path = 'coverage/lcov.info'
c.report_with_single_file = true
end
SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
end
SimpleCov.start do
enable_coverage :branch # Only supported for Ruby >= 2.5
add_filter '/spec/'
add_filter 'helper'
end
end

View File

@@ -1,17 +0,0 @@
language: ruby
sudo: false
cache: bundler
rvm:
- 2.4.9
- 2.5.7
- 2.6.5
- 2.7.0
matrix:
allow_failures:
- rvm: 2.7.0
script:
- bundle exec rubocop
- bundle exec rspec
notifications:
email:
- team@wpscan.org

View File

@@ -1,16 +1,16 @@
FROM ruby:2.6.3-alpine AS builder
LABEL maintainer="WPScan Team <team@wpscan.org>"
FROM ruby:3.0.2-alpine AS builder
LABEL maintainer="WPScan Team <contact@wpscan.com>"
ARG BUNDLER_ARGS="--jobs=8 --without test development"
RUN echo "gem: --no-ri --no-rdoc" > /etc/gemrc
RUN echo "install: --no-document --no-post-install-message\nupdate: --no-document --no-post-install-message" > /etc/gemrc
COPY . /wpscan
RUN apk add --no-cache git libcurl ruby-dev libffi-dev make gcc musl-dev zlib-dev procps sqlite-dev && \
bundle install --system --clean --no-cache --gemfile=/wpscan/Gemfile $BUNDLER_ARGS && \
# temp fix for https://github.com/bundler/bundler/issues/6680
rm -rf /usr/local/bundle/cache
bundle config force_ruby_platform true && \
bundle config disable_version_check 'true' && \
bundle config without "test development" && \
bundle config path.system 'true' && \
bundle install --gemfile=/wpscan/Gemfile --jobs=8
WORKDIR /wpscan
RUN rake install --trace
@@ -19,8 +19,9 @@ RUN rake install --trace
RUN chmod -R a+r /usr/local/bundle
FROM ruby:2.6.3-alpine
LABEL maintainer="WPScan Team <team@wpscan.org>"
FROM ruby:3.0.2-alpine
LABEL maintainer="WPScan Team <contact@wpscan.com>"
LABEL org.opencontainers.image.source https://github.com/wpscanteam/wpscan
RUN adduser -h /wpscan -g WPScan -D wpscan

View File

@@ -27,7 +27,7 @@ Example cases which do not require a commercial license, and thus fall under the
- Using WPScan to test your own systems.
- Any non-commercial use of WPScan.
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - team@wpscan.org.
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - contact@wpscan.com.
Free-use Terms and Conditions;

View File

@@ -1,5 +1,5 @@
<p align="center">
<a href="https://wpscan.org/">
<a href="https://wpscan.com/">
<img src="https://raw.githubusercontent.com/wpscanteam/wpscan/gh-pages/images/wpscan_logo.png" alt="WPScan logo">
</a>
</p>
@@ -7,15 +7,16 @@
<h3 align="center">WPScan</h3>
<p align="center">
WordPress Vulnerability Scanner
WordPress Security Scanner
<br>
<br>
<a href="https://wpscan.org/" title="homepage" target="_blank">Homepage</a> - <a href="https://wpscan.io/" title="wpscan.io" target="_blank">WPScan.io</a> - <a href="https://wpvulndb.com/" title="vulnerability database" target="_blank">Vulnerability Database</a> - <a href="https://wordpress.org/plugins/wpscan/" title="wordpress plugin" target="_blank">WordPress Plugin</a>
<a href="https://wpscan.com/" title="homepage" target="_blank">WPScan WordPress Vulnerability Database</a> - <a href="https://wordpress.org/plugins/wpscan/" title="wordpress security plugin" target="_blank">WordPress Security Plugin</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://travis-ci.org/wpscanteam/wpscan" target="_blank"><img src="https://travis-ci.org/wpscanteam/wpscan.svg?branch=master"></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://codeclimate.com/github/wpscanteam/wpscan" target="_blank"><img src="https://codeclimate.com/github/wpscanteam/wpscan/badges/gpa.svg"></a>
</p>
@@ -24,14 +25,24 @@
## Prerequisites
- (Optional but highly recommended: [RVM](https://rvm.io/rvm/install))
- Ruby >= 2.3 - Recommended: latest
- Ruby 2.5.0 to 2.5.3 can cause an 'undefined symbol: rmpd_util_str_to_d' error in some systems, see [#1283](https://github.com/wpscanteam/wpscan/issues/1283)
- Curl >= 7.21 - Recommended: latest
- Ruby >= 2.7 - Recommended: latest
- Curl >= 7.72 - Recommended: latest
- The 7.29 has a segfault
- The < 7.72 could result in `Stream error in the HTTP/2 framing layer` in some cases
- RubyGems - Recommended: latest
- Nokogiri might require packages to be installed via your package manager depending on your OS, see https://nokogiri.org/tutorials/installing_nokogiri.html
### From RubyGems (Recommended)
### In a Pentesting distribution
When using a pentesting distubution (such as Kali Linux), it is recommended to install/update wpscan via the package manager if available.
### In macOSX via Homebrew
```shell
brew install wpscanteam/tap/wpscan
```
### From RubyGems
```shell
gem install wpscan
@@ -39,23 +50,11 @@ gem install wpscan
On MacOSX, if a ```Gem::FilePermissionError``` is raised due to the Apple's System Integrity Protection (SIP), either install RVM and install wpscan again, or run ```sudo gem install -n /usr/local/bin wpscan``` (see [#1286](https://github.com/wpscanteam/wpscan/issues/1286))
### From sources (NOT Recommended)
Prerequisites: Git
```shell
git clone https://github.com/wpscanteam/wpscan
cd wpscan/
bundle install && rake install
```
# Updating
You can update the local database by using ```wpscan --update```
Updating WPScan itself is either done via ```gem update wpscan``` or the packages manager (this is quite important for distributions such as in Kali Linux: ```apt-get update && apt-get upgrade```) depending how WPScan was (pre)installed
Updating WPScan itself is either done via ```gem update wpscan``` or the packages manager (this is quite important for distributions such as in Kali Linux: ```apt-get update && apt-get upgrade```) depending on how WPScan was (pre)installed
# Docker
@@ -77,6 +76,8 @@ docker run -it --rm wpscanteam/wpscan --url https://target.tld/ --enumerate u1-1
# Usage
Full user documentation can be found here; https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation
```wpscan --url blog.tld``` This will scan the blog using default options with a good compromise between speed and accuracy. For example, the plugins will be checked passively but their version with a mixed detection mode (passively + aggressively). Potential config backup files will also be checked, along with other interesting findings.
If a more stealthy approach is required, then ```wpscan --stealthy --url blog.tld``` can be used.
@@ -86,9 +87,16 @@ For more options, open a terminal and type ```wpscan --help``` (if you built wps
The DB is located at ~/.wpscan/db
## Vulnerability Database
## Optional: WordPress Vulnerability Database API
The WPScan CLI tool uses the [WPVulnDB API](https://wpvulndb.com/api) to retrieve WordPress vulnerability data in real time. For WPScan to retrieve the vulnerability data an API token must be supplied via the `--api-token` option, or via a configuration file, as discussed below. An API token can be obtained by registering an account on [WPVulnDB](https://wpvulndb.com/users/sign_up). Up to 50 API requests per day are given free of charge to registered users. Once the 50 API requests are exhausted, WPScan will continue to work as normal but without any vulnerability data. Users can upgrade to paid API usage to increase their API limits within their user profile on [WPVulnDB](https://wpvulndb.com/).
The WPScan CLI tool uses the [WordPress Vulnerability Database API](https://wpscan.com/api) to retrieve WordPress vulnerability data in real time. For WPScan to retrieve the vulnerability data an API token must be supplied via the `--api-token` option, or via a configuration file, as discussed below. An API token can be obtained by registering an account on [WPScan.com](https://wpscan.com/register).
Up to **25** API requests per day are given free of charge, that should be suitable to scan most WordPress websites at least once per day. When the daily 25 API requests are exhausted, WPScan will continue to work as normal but without any vulnerability data.
### How many API requests do you need?
- Our WordPress scanner makes one API request for the WordPress version, one request per installed plugin and one request per installed theme.
- On average, a WordPress website has 22 installed plugins.
## Load CLI options from file/s
@@ -127,9 +135,14 @@ The feature mentioned above is useful to keep the API Token in a config file and
```yml
cli_options:
api_token: YOUR_API_TOKEN
api_token: 'YOUR_API_TOKEN'
```
## Load API Token From ENV (since v3.7.10)
The API Token will be automatically loaded from the ENV variable `WPSCAN_API_TOKEN` if present. If the `--api-token` CLI option is also provided, the value from the CLI will be used.
## Enumerating usernames
```shell
@@ -177,7 +190,7 @@ Example cases which do not require a commercial license, and thus fall under the
- Using WPScan to test your own systems.
- Any non-commercial use of WPScan.
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - team@wpscan.org.
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - contact@wpscan.com.
Free-use Terms and Conditions;

View File

@@ -8,13 +8,13 @@ module WPScan
def cli_options
[OptURL.new(['--url URL', 'The URL of the blog to scan'],
required_unless: %i[update help hh version], default_protocol: 'http')] +
super.drop(1) + # delete the --url from CMSScanner
super.drop(2) + # delete the --url and --force from CMSScanner
[
OptChoice.new(['--server SERVER', 'Force the supplied server module to be loaded'],
choices: %w[apache iis nginx],
normalize: %i[downcase to_sym],
advanced: true),
OptBoolean.new(['--force', 'Do not check if the target is running WordPress']),
OptBoolean.new(['--force', 'Do not check if the target is running WordPress or returns a 403']),
OptBoolean.new(['--[no-]update', 'Whether or not to update the Database'])
]
end
@@ -39,7 +39,7 @@ module WPScan
output('@notice', msg: 'It seems like you have not updated the database for some time.')
print '[?] Do you want to update now? [Y]es [N]o, default: [N]'
/^y/i.match?(Readline.readline) ? true : false
/^y/i.match?(Readline.readline)
end
def update_db

View File

@@ -18,9 +18,7 @@ module WPScan
target.content_dir = ParsedCli.wp_content_dir if ParsedCli.wp_content_dir
target.plugins_dir = ParsedCli.wp_plugins_dir if ParsedCli.wp_plugins_dir
return if target.content_dir
raise Error::WpContentDirNotDetected
raise Error::WpContentDirNotDetected unless target.content_dir
end
end
end

View File

@@ -51,7 +51,7 @@ module WPScan
OptSmartList.new(['--plugins-list LIST', 'List of plugins to enumerate'], advanced: true),
OptChoice.new(
['--plugins-detection MODE',
'Use the supplied mode to enumerate Plugins, instead of the global (--detection-mode) mode.'],
'Use the supplied mode to enumerate Plugins.'],
choices: %w[mixed passive aggressive], normalize: :to_sym, default: :passive
),
OptBoolean.new(
@@ -62,8 +62,7 @@ module WPScan
),
OptChoice.new(
['--plugins-version-detection MODE',
'Use the supplied mode to check plugins versions instead of the --detection-mode ' \
'or --plugins-detection modes.'],
'Use the supplied mode to check plugins\' versions.'],
choices: %w[mixed passive aggressive], normalize: :to_sym, default: :mixed
),
OptInteger.new(
@@ -171,6 +170,12 @@ module WPScan
['--users-detection MODE',
'Use the supplied mode to enumerate Users, instead of the global (--detection-mode) mode.'],
choices: %w[mixed passive aggressive], normalize: :to_sym, advanced: true
),
OptRegexp.new(
[
'--exclude-usernames REGEXP_OR_STRING',
'Exclude usernames matching the Regexp/string (case insensitive). Regexp delimiters are not required.'
], options: Regexp::IGNORECASE
)
]
end

View File

@@ -17,33 +17,40 @@ module WPScan
'Maximum number of passwords to send by request with XMLRPC multicall'],
default: 500),
OptChoice.new(['--password-attack ATTACK',
'Force the supplied attack to be used rather than automatically determining one.'],
'Force the supplied attack to be used rather than automatically determining one.',
'Multicall will only work against WP < 4.4'],
choices: %w[wp-login xmlrpc xmlrpc-multicall],
normalize: %i[downcase underscore to_sym])
normalize: %i[downcase underscore to_sym]),
OptString.new(['--login-uri URI', 'The URI of the login page if different from /wp-login.php'])
]
end
def attack_opts
@attack_opts ||= {
show_progression: user_interaction?,
multicall_max_passwords: ParsedCli.multicall_max_passwords
}
end
def run
return unless ParsedCli.passwords
if user_interaction?
output('@info',
msg: "Performing password attack on #{attacker.titleize} against #{users.size} user/s")
end
attack_opts = {
show_progression: user_interaction?,
multicall_max_passwords: ParsedCli.multicall_max_passwords
}
begin
found = []
attacker.attack(users, passwords(ParsedCli.passwords), attack_opts) do |user|
if user_interaction?
output('@info',
msg: "Performing password attack on #{attacker.titleize} against #{users.size} user/s")
end
attacker.attack(users, ParsedCli.passwords, attack_opts) do |user|
found << user
attacker.progress_bar.log("[SUCCESS] - #{user.username} / #{user.password}")
end
rescue Error::NoLoginInterfaceDetected => e
# TODO: Maybe output that in JSON as well.
output('@notice', msg: e.to_s) if user_interaction?
ensure
output('users', users: found)
end
@@ -65,6 +72,8 @@ module WPScan
case ParsedCli.password_attack
when :wp_login
raise Error::NoLoginInterfaceDetected unless target.login_url
Finders::Passwords::WpLogin.new(target)
when :xmlrpc
raise Error::XMLRPCNotDetected unless xmlrpc
@@ -81,8 +90,8 @@ module WPScan
def xmlrpc_get_users_blogs_enabled?
if xmlrpc&.enabled? &&
xmlrpc.available_methods.include?('wp.getUsersBlogs') &&
xmlrpc.method_call('wp.getUsersBlogs', [SecureRandom.hex[0, 6], SecureRandom.hex[0, 4]])
.run.body !~ /XML\-RPC services are disabled/
!xmlrpc.method_call('wp.getUsersBlogs', [SecureRandom.hex[0, 6], SecureRandom.hex[0, 4]])
.run.body.match?(/>\s*405\s*</)
true
else
@@ -100,8 +109,10 @@ module WPScan
else
Finders::Passwords::XMLRPC.new(xmlrpc)
end
else
elsif target.login_url
Finders::Passwords::WpLogin.new(target)
else
raise Error::NoLoginInterfaceDetected
end
end
@@ -113,15 +124,6 @@ module WPScan
acc << Model::User.new(elem.chomp)
end
end
# @param [ String ] wordlist_path
#
# @return [ Array<String> ]
def passwords(wordlist_path)
@passwords ||= File.open(wordlist_path).reduce([]) do |acc, elem|
acc << elem.chomp
end
end
end
end
end

View File

@@ -4,20 +4,25 @@ module WPScan
module Controller
# Controller to handle the API token
class VulnApi < CMSScanner::Controller::Base
ENV_KEY = 'WPSCAN_API_TOKEN'
def cli_options
[
OptString.new(['--api-token TOKEN', 'The WPVulnDB API Token to display vulnerability data'])
OptString.new(
['--api-token TOKEN',
'The WPScan API Token to display vulnerability data, available at https://wpscan.com/profile']
)
]
end
def before_scan
return unless ParsedCli.api_token
return unless ParsedCli.api_token || ENV.key?(ENV_KEY)
DB::VulnApi.token = ParsedCli.api_token
DB::VulnApi.token = ParsedCli.api_token || ENV[ENV_KEY]
api_status = DB::VulnApi.status
raise Error::InvalidApiToken if api_status['error']
raise Error::InvalidApiToken if api_status['status'] == 'forbidden'
raise Error::ApiLimitReached if api_status['requests_remaining'] == 0
raise api_status['http_error'] if api_status['http_error']
end

View File

@@ -7,7 +7,11 @@ module WPScan
class KnownLocations < CMSScanner::Finders::Finder
include CMSScanner::Finders::Finder::Enumerator
SQL_PATTERN = /(?:DROP|(?:UN)?LOCK|CREATE) TABLE|INSERT INTO/.freeze
def valid_response_codes
@valid_response_codes ||= [200, 206].freeze
end
SQL_PATTERN = /(?:DROP|(?:UN)?LOCK|CREATE|ALTER) (?:TABLE|DATABASE)|INSERT INTO/.freeze
# @param [ Hash ] opts
# @option opts [ String ] :list
@@ -17,7 +21,7 @@ module WPScan
def aggressive(opts = {})
found = []
enumerate(potential_urls(opts), opts.merge(check_full_response: 200)) do |res|
enumerate(potential_urls(opts), opts.merge(check_full_response: valid_response_codes)) do |res|
if res.effective_url.end_with?('.zip')
next unless %r{\Aapplication/zip}i.match?(res.headers['Content-Type'])
else
@@ -39,18 +43,57 @@ module WPScan
#
# @return [ Hash ]
def potential_urls(opts = {})
urls = {}
domain_name = PublicSuffix.domain(target.uri.host)[/(^[\w|-]+)/, 1]
urls = {}
index = 0
File.open(opts[:list]).each_with_index do |path, index|
path.gsub!('{domain_name}', domain_name)
File.open(opts[:list]).each do |path|
path.chomp!
urls[target.url(path.chomp)] = index
if path.include?('{domain_name}')
urls[target.url(path.gsub('{domain_name}', domain_name))] = index
if domain_name != domain_name_with_sub
urls[target.url(path.gsub('{domain_name}', domain_name_with_sub))] = index + 1
index += 1
end
else
urls[target.url(path)] = index
end
index += 1
end
urls
end
def domain_name
@domain_name ||= if Resolv::AddressRegex.match?(target.uri.host)
target.uri.host
else
(PublicSuffix.domain(target.uri.host) || target.uri.host)[/(^[\w|-]+)/, 1]
end
end
def domain_name_with_sub
@domain_name_with_sub ||=
if Resolv::AddressRegex.match?(target.uri.host)
target.uri.host
else
parsed = PublicSuffix.parse(target.uri.host)
if parsed.subdomain
parsed.subdomain.gsub(".#{parsed.tld}", '')
elsif parsed.domain
parsed.domain.gsub(".#{parsed.tld}", '')
else
target.uri.host
end
end
rescue PublicSuffix::DomainNotAllowed
@domain_name_with_sub = target.uri.host
end
def create_progress_bar(opts = {})
super(opts.merge(title: ' Checking DB Exports -'))
end

View File

@@ -6,6 +6,7 @@ require_relative 'interesting_findings/multisite'
require_relative 'interesting_findings/debug_log'
require_relative 'interesting_findings/backup_db'
require_relative 'interesting_findings/mu_plugins'
require_relative 'interesting_findings/php_disabled'
require_relative 'interesting_findings/registration'
require_relative 'interesting_findings/tmm_db_migrate'
require_relative 'interesting_findings/upload_sql_dump'
@@ -26,7 +27,7 @@ module WPScan
%w[
Readme DebugLog FullPathDisclosure BackupDB DuplicatorInstallerLog
Multisite MuPlugins Registration UploadDirectoryListing TmmDbMigrate
UploadSQLDump EmergencyPwdResetScript WPCron
UploadSQLDump EmergencyPwdResetScript WPCron PHPDisabled
].each do |f|
finders << InterestingFindings.const_get(f).new(target)
end

View File

@@ -16,8 +16,7 @@ module WPScan
target.url(path),
confidence: 70,
found_by: DIRECT_ACCESS,
interesting_entries: target.directory_listing_entries(path),
references: { url: 'https://github.com/wpscanteam/wpscan/issues/422' }
interesting_entries: target.directory_listing_entries(path)
)
end
end

View File

@@ -11,11 +11,7 @@ module WPScan
return unless target.debug_log?(path)
Model::DebugLog.new(
target.url(path),
confidence: 100, found_by: DIRECT_ACCESS,
references: { url: 'https://codex.wordpress.org/Debugging_in_WordPress' }
)
Model::DebugLog.new(target.url(path), confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -9,14 +9,9 @@ module WPScan
def aggressive(_opts = {})
path = 'installer-log.txt'
return unless /DUPLICATOR INSTALL-LOG/.match?(target.head_and_get(path).body)
return unless /DUPLICATOR(-|\s)?(PRO|LITE)?:? INSTALL-LOG/i.match?(target.head_and_get(path).body)
Model::DuplicatorInstallerLog.new(
target.url(path),
confidence: 100,
found_by: DIRECT_ACCESS,
references: { url: 'https://www.exploit-db.com/ghdb/3981/' }
)
Model::DuplicatorInstallerLog.new(target.url(path), confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -15,10 +15,7 @@ module WPScan
Model::EmergencyPwdResetScript.new(
target.url(path),
confidence: /password/i.match?(res.body) ? 100 : 40,
found_by: DIRECT_ACCESS,
references: {
url: 'https://codex.wordpress.org/Resetting_Your_Password#Using_the_Emergency_Password_Reset_Script'
}
found_by: DIRECT_ACCESS
)
end
end

View File

@@ -16,8 +16,7 @@ module WPScan
target.url(path),
confidence: 100,
found_by: DIRECT_ACCESS,
interesting_entries: fpd_entries,
references: { url: 'https://www.owasp.org/index.php/Full_Path_Disclosure' }
interesting_entries: fpd_entries
)
end
end

View File

@@ -7,22 +7,16 @@ module WPScan
class MuPlugins < CMSScanner::Finders::Finder
# @return [ InterestingFinding ]
def passive(_opts = {})
pattern = %r{#{target.content_dir}/mu\-plugins/}i
pattern = %r{#{target.content_dir}/mu-plugins/}i
target.in_scope_uris(target.homepage_res) do |uri|
target.in_scope_uris(target.homepage_res, '(//@href|//@src)[contains(., "mu-plugins")]') do |uri|
next unless uri.path&.match?(pattern)
url = target.url('wp-content/mu-plugins/')
target.mu_plugins = true
return Model::MuPlugins.new(
url,
confidence: 70,
found_by: 'URLs In Homepage (Passive Detection)',
to_s: "This site has 'Must Use Plugins': #{url}",
references: { url: 'http://codex.wordpress.org/Must_Use_Plugins' }
)
return Model::MuPlugins.new(url, confidence: 70, found_by: 'URLs In Homepage (Passive Detection)')
end
nil
end
@@ -37,13 +31,7 @@ module WPScan
target.mu_plugins = true
Model::MuPlugins.new(
url,
confidence: 80,
found_by: DIRECT_ACCESS,
to_s: "This site has 'Must Use Plugins': #{url}",
references: { url: 'http://codex.wordpress.org/Must_Use_Plugins' }
)
Model::MuPlugins.new(url, confidence: 80, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -12,18 +12,12 @@ module WPScan
location = res.headers_hash['location']
return unless [200, 302].include?(res.code)
return if res.code == 302 && location =~ /wp-login\.php\?action=register/
return unless res.code == 200 || res.code == 302 && location =~ /wp-signup\.php/
return if res.code == 302 && location&.include?('wp-login.php?action=register')
return unless res.code == 200 || (res.code == 302 && location&.include?('wp-signup.php'))
target.multisite = true
Model::Multisite.new(
url,
confidence: 100,
found_by: DIRECT_ACCESS,
to_s: 'This site seems to be a multisite',
references: { url: 'http://codex.wordpress.org/Glossary#Multisite' }
)
Model::Multisite.new(url, confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -0,0 +1,21 @@
# frozen_string_literal: true
module WPScan
module Finders
module InterestingFindings
# See https://github.com/wpscanteam/wpscan/issues/1593
class PHPDisabled < CMSScanner::Finders::Finder
PATTERN = /\$wp_version =/.freeze
# @return [ InterestingFinding ]
def aggressive(_opts = {})
path = 'wp-includes/version.php'
return unless PATTERN.match?(target.head_and_get(path).body)
Model::PHPDisabled.new(target.url(path), confidence: 100, found_by: DIRECT_ACCESS)
end
end
end
end
end

View File

@@ -20,12 +20,7 @@ module WPScan
target.registration_enabled = true
Model::Registration.new(
res.effective_url,
confidence: 100,
found_by: DIRECT_ACCESS,
to_s: "Registration is enabled: #{res.effective_url}"
)
Model::Registration.new(res.effective_url, confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -13,12 +13,7 @@ module WPScan
return unless res.code == 200 && res.headers['Content-Type'] =~ %r{\Aapplication/zip}i
Model::TmmDbMigrate.new(
url,
confidence: 100,
found_by: DIRECT_ACCESS,
references: { packetstorm: 131_957 }
)
Model::TmmDbMigrate.new(url, confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -13,12 +13,7 @@ module WPScan
url = target.url(path)
Model::UploadDirectoryListing.new(
url,
confidence: 100,
found_by: DIRECT_ACCESS,
to_s: "Upload directory has listing enabled: #{url}"
)
Model::UploadDirectoryListing.new(url, confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -14,11 +14,7 @@ module WPScan
return unless SQL_PATTERN.match?(res.body)
Model::UploadSQLDump.new(
target.url(path),
confidence: 100,
found_by: DIRECT_ACCESS
)
Model::UploadSQLDump.new(target.url(path), confidence: 100, found_by: DIRECT_ACCESS)
end
end
end

View File

@@ -11,17 +11,7 @@ module WPScan
return unless res.code == 200
Model::WPCron.new(
wp_cron_url,
confidence: 60,
found_by: DIRECT_ACCESS,
references: {
url: [
'https://www.iplocation.net/defend-wordpress-from-ddos',
'https://github.com/wpscanteam/wpscan/issues/1299'
]
}
)
Model::WPCron.new(wp_cron_url, confidence: 60, found_by: DIRECT_ACCESS)
end
def wp_cron_url

View File

@@ -20,8 +20,8 @@ module WPScan
end
def passive_from_css_href(res, opts)
target.in_scope_uris(res, '//style/@src|//link/@href') do |uri|
next unless uri.path =~ %r{/themes/([^\/]+)/style.css\z}i
target.in_scope_uris(res, '//link/@href[contains(., "style.css")]') do |uri|
next unless uri.path =~ %r{/themes/([^/]+)/style.css\z}i
return create_theme(Regexp.last_match[1], uri.to_s, opts)
end
@@ -33,7 +33,7 @@ module WPScan
code = tag.text.to_s
next if code.empty?
next unless code =~ %r{#{item_code_pattern('themes')}\\?/style\.css[^"'\( ]*}i
next unless code =~ %r{#{item_code_pattern('themes')}\\?/style\.css[^"'( ]*}i
return create_theme(Regexp.last_match[1], Regexp.last_match[0].strip, opts)
end

View File

@@ -13,7 +13,7 @@ module WPScan
def passive(opts = {})
found = []
slugs = items_from_links('themes', false) + items_from_codes('themes', false)
slugs = items_from_links('themes', uniq: false) + items_from_codes('themes', uniq: false)
slugs.each_with_object(Hash.new(0)) { |slug, counts| counts[slug] += 1 }.each do |slug, occurences|
found << Model::Theme.new(slug, target, opts.merge(found_by: found_by, confidence: 2 * occurences))

View File

@@ -13,7 +13,7 @@ module WPScan
def valid_credentials?(response)
response.code == 302 &&
[*response.headers['Set-Cookie']]&.any? { |cookie| cookie =~ /wordpress_logged_in_/i }
Array(response.headers['Set-Cookie'])&.any? { |cookie| cookie =~ /wordpress_logged_in_/i }
end
def errored_response?(response)

View File

@@ -12,11 +12,11 @@ module WPScan
end
def valid_credentials?(response)
response.code == 200 && response.body =~ /blogName/
response.code == 200 && response.body.include?('blogName')
end
def errored_response?(response)
response.code != 200 && response.body !~ /login_error/i
response.code != 200 && response.body !~ /Incorrect username or password/i
end
end
end

View File

@@ -22,8 +22,30 @@ module WPScan
target.multi_call(methods, cache_ttl: 0).run
end
# @param [ IO ] file
# @param [ Integer ] passwords_size
# @return [ Array<String> ] The passwords from the last checked position in the file until there are
# passwords_size passwords retrieved
def passwords_from_wordlist(file, passwords_size)
pwds = []
added_pwds = 0
return pwds if passwords_size.zero?
# Make sure that the main code does not call #sysseek or #count etc
# otherwise the file descriptor will be set to somwehere else
file.each_line(chomp: true) do |line|
pwds << line
added_pwds += 1
break if added_pwds == passwords_size
end
pwds
end
# @param [ Array<Model::User> ] users
# @param [ Array<String> ] passwords
# @param [ String ] wordlist_path
# @param [ Hash ] opts
# @option opts [ Boolean ] :show_progression
# @option opts [ Integer ] :multicall_max_passwords
@@ -33,18 +55,22 @@ module WPScan
# TODO: Make rubocop happy about metrics etc
#
# rubocop:disable all
def attack(users, passwords, opts = {})
wordlist_index = 0
def attack(users, wordlist_path, opts = {})
checked_passwords = 0
wordlist = File.open(wordlist_path)
wordlist_size = wordlist.count
max_passwords = opts[:multicall_max_passwords]
current_passwords_size = passwords_size(max_passwords, users.size)
create_progress_bar(total: (passwords.size / current_passwords_size.round(1)).ceil,
create_progress_bar(total: (wordlist_size / current_passwords_size.round(1)).ceil,
show_progression: opts[:show_progression])
wordlist.sysseek(0) # reset the descriptor to the beginning of the file as it changed with #count
loop do
current_users = users.select { |user| user.password.nil? }
current_passwords = passwords[wordlist_index, current_passwords_size]
wordlist_index += current_passwords_size
current_users = users.select { |user| user.password.nil? }
current_passwords = passwords_from_wordlist(wordlist, current_passwords_size)
checked_passwords += current_passwords_size
break if current_users.empty? || current_passwords.nil? || current_passwords.empty?
@@ -76,16 +102,19 @@ module WPScan
break
end
progress_bar.total = progress_bar.progress + ((passwords.size - wordlist_index) / current_passwords_size.round(1)).ceil
begin
progress_bar.total = progress_bar.progress + ((wordlist_size - checked_passwords) / current_passwords_size.round(1)).ceil
rescue ProgressBar::InvalidProgressError
end
end
end
# Maybe a progress_bar.stop ?
end
# rubocop:disable all
# rubocop:enable all
def passwords_size(max_passwords, users_size)
return 1 if max_passwords < users_size
return 0 if users_size == 0
return 0 if users_size.zero?
max_passwords / users_size
end
@@ -94,9 +123,13 @@ module WPScan
def check_and_output_errors(res)
progress_bar.log("Incorrect response: #{res.code} / #{res.return_message}") unless res.code == 200
progress_bar.log('Parsing error, might be caused by a too high --max-passwords value (such as >= 2k)') if res.body =~ /parse error. not well formed/i
if /parse error. not well formed/i.match?(res.body)
progress_bar.log('Parsing error, might be caused by a too high --max-passwords value (such as >= 2k)')
end
progress_bar.log('The requested method is not supported') if res.body =~ /requested method [^ ]+ does not exist/i
return unless /requested method [^ ]+ does not exist/i.match?(res.body)
progress_bar.log('The requested method is not supported')
end
end
end

View File

@@ -48,7 +48,7 @@ module WPScan
#
# @return [ String, nil ] The version number detected from the stable tag
def from_stable_tag(body)
return unless body =~ /\b(?:stable tag|version):\s*(?!trunk)([0-9a-z\.-]+)/i
return unless body =~ /\b(?:stable tag|version):\s*(?!trunk)([0-9a-z.-]+)/i
number = Regexp.last_match[1]
@@ -59,20 +59,18 @@ module WPScan
#
# @return [ String, nil ] The best version number detected from the changelog section
def from_changelog_section(body)
extracted_versions = body.scan(%r{[=]+\s+(?:v(?:ersion)?\s*)?([0-9\.-]+)[ \ta-z0-9\(\)\.\-\/]*[=]+}i)
extracted_versions = body.scan(/^=+\s+(?:v(?:ersion)?\s*)?([0-9.-]+)[^=]*=+$/i)
return if extracted_versions.nil? || extracted_versions.empty?
extracted_versions.flatten!
# must contain at least one number
extracted_versions = extracted_versions.select { |x| x =~ /[0-9]+/ }
extracted_versions = extracted_versions.grep(/[0-9]+/)
sorted = extracted_versions.sort do |x, y|
begin
Gem::Version.new(x) <=> Gem::Version.new(y)
rescue StandardError
0
end
Gem::Version.new(x) <=> Gem::Version.new(y)
rescue StandardError
0
end
sorted.last

View File

@@ -30,7 +30,7 @@ module WPScan
# @return [ Version ]
def style_version
return unless Browser.get(target.style_url).body =~ /Version:[\t ]*(?!trunk)([0-9a-z\.-]+)/i
return unless Browser.get(target.style_url).body =~ /Version:[\t ]*(?!trunk)([0-9a-z.-]+)/i
Model::Version.new(
Regexp.last_match[1],

View File

@@ -6,10 +6,21 @@ require_relative 'users/oembed_api'
require_relative 'users/rss_generator'
require_relative 'users/author_id_brute_forcing'
require_relative 'users/login_error_messages'
require_relative 'users/yoast_seo_author_sitemap.rb'
require_relative 'users/author_sitemap'
require_relative 'users/yoast_seo_author_sitemap'
module WPScan
module Finders
# Specific Finders container to filter the usernames found
# and remove the ones matching ParsedCli.exclude_username if supplied
class UsersFinders < SameTypeFinders
def filter_findings
findings.delete_if { |user| ParsedCli.exclude_usernames.match?(user.username) } if ParsedCli.exclude_usernames
findings
end
end
module Users
# Users Finder
class Base
@@ -22,10 +33,15 @@ module WPScan
Users::WpJsonApi.new(target) <<
Users::OembedApi.new(target) <<
Users::RSSGenerator.new(target) <<
Users::AuthorSitemap.new(target) <<
Users::YoastSeoAuthorSitemap.new(target) <<
Users::AuthorIdBruteForcing.new(target) <<
Users::LoginErrorMessages.new(target)
end
def finders
@finders ||= Finders::UsersFinders.new
end
end
end
end

View File

@@ -71,11 +71,13 @@ module WPScan
return username, 'Display Name', 50 if username
end
# @param [ String ] url
# @param [ String, Addressable::URI ] uri
#
# @return [ String, nil ]
def username_from_author_url(url)
url[%r{/author/([^/\b]+)/?}i, 1]
def username_from_author_url(uri)
uri = Addressable::URI.parse(uri) unless uri.is_a?(Addressable::URI)
uri.path[%r{/author/([^/\b]+)/?}i, 1]
end
# @param [ Typhoeus::Response ] res
@@ -83,12 +85,12 @@ module WPScan
# @return [ String, nil ] The username found
def username_from_response(res)
# Permalink enabled
target.in_scope_uris(res, '//link/@href|//a/@href') do |uri|
username = username_from_author_url(uri.to_s)
target.in_scope_uris(res, '//@href[contains(., "author/")]') do |uri|
username = username_from_author_url(uri)
return username if username
end
# No permalink
# No permalink, TODO Maybe use xpath to extract the classes ?
res.body[/<body class="archive author author-([^\s]+)[ "]/i, 1]
end

View File

@@ -45,7 +45,7 @@ module WPScan
def potential_usernames(res)
usernames = []
target.in_scope_uris(res, '//a/@href') do |uri, node|
target.in_scope_uris(res, '//a/@href[contains(., "author")]') do |uri, node|
if uri.path =~ %r{/author/([^/\b]+)/?\z}i
usernames << [Regexp.last_match[1], 'Author Pattern', 100]
elsif /author=[0-9]+/.match?(uri.query)

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
module WPScan
module Finders
module Users
# Since WP 5.5, /wp-sitemap-users-1.xml is generated and contains
# the usernames of accounts who made a post
class AuthorSitemap < CMSScanner::Finders::Finder
# @param [ Hash ] opts
#
# @return [ Array<User> ]
def aggressive(_opts = {})
found = []
Browser.get(sitemap_url).html.xpath('//url/loc').each do |user_tag|
username = user_tag.text.to_s[%r{/author/([^/]+)/}, 1]
next unless username && !username.strip.empty?
found << Model::User.new(username,
found_by: found_by,
confidence: 100,
interesting_entries: [sitemap_url])
end
found
end
# @return [ String ] The URL of the sitemap
def sitemap_url
@sitemap_url ||= target.url('wp-sitemap-users-1.xml')
end
end
end
end
end

View File

@@ -37,7 +37,7 @@ module WPScan
# usernames from the potential Users found
unames = opts[:found].map(&:username)
[*opts[:list]].each { |uname| unames << uname.chomp }
Array(opts[:list]).each { |uname| unames << uname.chomp }
unames.uniq
end

View File

@@ -13,7 +13,7 @@ module WPScan
urls.each do |url|
res = Browser.get_and_follow_location(url)
next unless res.code == 200 && res.body =~ /<dc\:creator>/i
next unless res.code == 200 && res.body =~ /<dc:creator>/i
potential_usernames = []

View File

@@ -21,7 +21,7 @@ module WPScan
loop do
current_page += 1
res = Typhoeus.get(api_url, params: { per_page: MAX_PER_PAGE, page: current_page })
res = Browser.get(api_url, params: { per_page: MAX_PER_PAGE, page: current_page })
total_pages ||= res.headers['X-WP-TotalPages'].to_i

View File

@@ -5,27 +5,7 @@ module WPScan
module Users
# The YOAST SEO plugin has an author-sitemap.xml which can leak usernames
# See https://github.com/wpscanteam/wpscan/issues/1228
class YoastSeoAuthorSitemap < CMSScanner::Finders::Finder
# @param [ Hash ] opts
#
# @return [ Array<User> ]
def aggressive(_opts = {})
found = []
Browser.get(sitemap_url).html.xpath('//url/loc').each do |user_tag|
username = user_tag.text.to_s[%r{/author/([^\/]+)/}, 1]
next unless username && !username.strip.empty?
found << Model::User.new(username,
found_by: found_by,
confidence: 100,
interesting_entries: [sitemap_url])
end
found
end
class YoastSeoAuthorSitemap < AuthorSitemap
# @return [ String ] The URL of the author-sitemap
def sitemap_url
@sitemap_url ||= target.url('author-sitemap.xml')

View File

@@ -8,11 +8,15 @@ module WPScan
# @param [ String ] type plugins / themes
# @param [ Boolean ] uniq Wether or not to apply the #uniq on the results
#
# @return [Array<String> ] The plugins/themes detected in the href, src attributes of the homepage
def items_from_links(type, uniq = true)
# @return [ Array<String> ] The plugins/themes detected in the href, src attributes of the page
def items_from_links(type, uniq: true)
found = []
xpath = format(
'(//@href|//@src|//@data-src)[contains(., "%s")]',
type == 'plugins' ? target.plugins_dir : target.content_dir
)
target.in_scope_uris(page_res) do |uri|
target.in_scope_uris(page_res, xpath) do |uri|
next unless uri.to_s =~ item_attribute_pattern(type)
slug = Regexp.last_match[1]&.strip
@@ -27,7 +31,7 @@ module WPScan
# @param [ Boolean ] uniq Wether or not to apply the #uniq on the results
#
# @return [Array<String> ] The plugins/themes detected in the javascript/style of the homepage
def items_from_codes(type, uniq = true)
def items_from_codes(type, uniq: true)
found = []
page_res.html.xpath('//script[not(@src)]|//style[not(@src)]').each do |tag|
@@ -51,7 +55,7 @@ module WPScan
#
# @return [ Regexp ]
def item_code_pattern(type)
@item_code_pattern ||= %r{["'\( ]#{item_url_pattern(type)}([^\\\/\)"']+)}i
@item_code_pattern ||= %r{["'( ]#{item_url_pattern(type)}([^\\/)"']+)}i
end
# @param [ String ] type
@@ -62,9 +66,9 @@ module WPScan
item_url = type == 'plugins' ? target.plugins_url : target.content_url
url = /#{item_url.gsub(/\A(?:https?)/i, 'https?').gsub('/', '\\\\\?\/')}/i
item_dir = %r{(?:#{url}|\\?\/#{item_dir.gsub('/', '\\\\\?\/')}\\?/)}i
item_dir = %r{(?:#{url}|\\?/#{item_dir.gsub('/', '\\\\\?\/')}\\?/)}i
type == 'plugins' ? item_dir : %r{#{item_dir}#{type}\\?\/}i
type == 'plugins' ? item_dir : %r{#{item_dir}#{type}\\?/}i
end
end
end

View File

@@ -10,7 +10,7 @@ module WPScan
module Finders
# Specific Finders container to filter the version detected
# and remove the one with low confidence to avoid false
# positive when there is not enought information to accurately
# positive when there is not enough information to accurately
# determine it.
class WpVersionFinders < UniqueFinders
def filter_findings

View File

@@ -28,7 +28,7 @@ module WPScan
end
def passive_urls_xpath
'//a[contains(@href, "rdf")]/@href'
'//a[contains(@href, "/rdf")]/@href'
end
def aggressive_urls(_opts = {})

View File

@@ -7,46 +7,144 @@ module WPScan
include References
end
#
# Empty classes for the #type to be correctly displayed (as taken from the self.class from the parent)
#
class BackupDB < InterestingFinding
def to_s
@to_s ||= "A backup directory has been found: #{url}"
end
# @return [ Hash ]
def references
@references ||= { url: ['https://github.com/wpscanteam/wpscan/issues/422'] }
end
end
class DebugLog < InterestingFinding
def to_s
@to_s ||= "Debug Log found: #{url}"
end
# @ return [ Hash ]
def references
@references ||= { url: ['https://codex.wordpress.org/Debugging_in_WordPress'] }
end
end
class DuplicatorInstallerLog < InterestingFinding
# @return [ Hash ]
def references
@references ||= { url: ['https://www.exploit-db.com/ghdb/3981/'] }
end
end
class EmergencyPwdResetScript < InterestingFinding
def references
@references ||= {
url: ['https://codex.wordpress.org/Resetting_Your_Password#Using_the_Emergency_Password_Reset_Script']
}
end
end
class FullPathDisclosure < InterestingFinding
def to_s
@to_s ||= "Full Path Disclosure found: #{url}"
end
# @return [ Hash ]
def references
@references ||= { url: ['https://www.owasp.org/index.php/Full_Path_Disclosure'] }
end
end
class MuPlugins < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= "This site has 'Must Use Plugins': #{url}"
end
# @return [ Hash ]
def references
@references ||= { url: ['http://codex.wordpress.org/Must_Use_Plugins'] }
end
end
class Multisite < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= 'This site seems to be a multisite'
end
# @return [ Hash ]
def references
@references ||= { url: ['http://codex.wordpress.org/Glossary#Multisite'] }
end
end
class Readme < InterestingFinding
def to_s
@to_s ||= "WordPress readme found: #{url}"
end
end
class Registration < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= "Registration is enabled: #{url}"
end
end
class TmmDbMigrate < InterestingFinding
def to_s
@to_s ||= "ThemeMakers migration file found: #{url}"
end
# @return [ Hash ]
def references
@references ||= { packetstorm: [131_957] }
end
end
class UploadDirectoryListing < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= "Upload directory has listing enabled: #{url}"
end
end
class UploadSQLDump < InterestingFinding
def to_s
@to_s ||= "SQL Dump found: #{url}"
end
end
class WPCron < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= "The external WP-Cron seems to be enabled: #{url}"
end
# @return [ Hash ]
def references
@references ||= {
url: [
'https://www.iplocation.net/defend-wordpress-from-ddos',
'https://github.com/wpscanteam/wpscan/issues/1299'
]
}
end
end
class PHPDisabled < InterestingFinding
# @return [ String ]
def to_s
@to_s ||= 'PHP seems to be disabled'
end
# @return [ Hash ]
def references
@references ||= {
url: ['https://github.com/wpscanteam/wpscan/issues/1593']
}
end
end
end
end

View File

@@ -38,7 +38,7 @@ module WPScan
# @return [ Array<String> ]
def potential_readme_filenames
@potential_readme_filenames ||= [*(DB::DynamicFinders::Plugin.df_data.dig(slug, 'Readme', 'path') || super)]
@potential_readme_filenames ||= Array((DB::DynamicFinders::Plugin.df_data.dig(slug, 'Readme', 'path') || super))
end
end
end

View File

@@ -45,7 +45,7 @@ module WPScan
# @return [ Theme ]
def parent_theme
return unless template
return unless style_body =~ /^@import\surl\(["']?([^"'\)]+)["']?\);\s*$/i
return unless style_body =~ /^@import\surl\(["']?([^"')]+)["']?\);\s*$/i
opts = detection_opts.merge(
style_url: url(Regexp.last_match[1]),
@@ -92,7 +92,7 @@ module WPScan
tags: 'Tags',
text_domain: 'Text Domain'
}.each do |attribute, tag|
instance_variable_set(:"@#{attribute}", parse_style_tag(style_body, tag))
instance_variable_set(:"@#{attribute}", parse_style_tag(style_body, tag)&.force_encoding('UTF-8'))
end
end
@@ -101,7 +101,7 @@ module WPScan
#
# @return [ String ]
def parse_style_tag(body, tag)
value = body[/#{Regexp.escape(tag)}:[\t ]*([^\r\n\*]+)/i, 1]
value = body[/\b#{Regexp.escape(tag)}:[\t ]*([^\r\n*]+)/, 1]
value && !value.strip.empty? ? value.strip : nil
end

View File

@@ -30,7 +30,7 @@ module WPScan
def vulnerabilities
vulns = []
vulns << rce_webshot_vuln if version == false || version > '1.35' && version < '2.8.14' && webshot_enabled?
vulns << rce_webshot_vuln if version == false || (version > '1.35' && version < '2.8.14' && webshot_enabled?)
vulns << rce_132_vuln if version == false || version < '1.33'
vulns
@@ -40,9 +40,9 @@ module WPScan
def rce_132_vuln
Vulnerability.new(
'Timthumb <= 1.32 Remote Code Execution',
{ exploitdb: ['17602'] },
'RCE',
'1.33'
references: { exploitdb: ['17602'] },
type: 'RCE',
fixed_in: '1.33'
)
end
@@ -50,12 +50,12 @@ module WPScan
def rce_webshot_vuln
Vulnerability.new(
'Timthumb <= 2.8.13 WebShot Remote Code Execution',
{
references: {
url: ['http://seclists.org/fulldisclosure/2014/Jun/117', 'https://github.com/wpscanteam/wpscan/issues/519'],
cve: '2014-4663'
},
'RCE',
'2.8.14'
type: 'RCE',
fixed_in: '2.8.14'
)
end
@@ -63,7 +63,7 @@ module WPScan
def webshot_enabled?
res = Browser.get(url, params: { webshot: 1, src: "http://#{default_allowed_domains.sample}" })
/WEBSHOT_ENABLED == true/.match?(res.body) ? false : true
!/WEBSHOT_ENABLED == true/.match?(res.body)
end
# @return [ Array<String> ] The default allowed domains (between the 2.0 and 2.8.13)

View File

@@ -39,7 +39,7 @@ module WPScan
@vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln|
Array(db_data['vulnerabilities']).each do |json_vuln|
vulnerability = Vulnerability.load_from_json(json_vuln)
@vulnerabilities << vulnerability if vulnerable_to?(vulnerability)
end
@@ -53,7 +53,9 @@ module WPScan
#
# @return [ Boolean ]
def vulnerable_to?(vuln)
return true unless version && vuln && vuln.fixed_in && !vuln.fixed_in.empty?
return false if version && vuln&.introduced_in && version < vuln.introduced_in
return true unless version && vuln&.fixed_in && !vuln.fixed_in.empty?
version < vuln.fixed_in
end
@@ -160,7 +162,7 @@ module WPScan
#
# @return [ Typhoeus::Response ]
def head_and_get(path, codes = [200], params = {})
final_path = +@path_from_blog
final_path = @path_from_blog.dup # @path_from_blog is set in the plugin/theme
final_path << path unless path.nil?
blog.head_and_get(final_path, codes, params)

View File

@@ -53,7 +53,7 @@ module WPScan
@vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln|
Array(db_data['vulnerabilities']).each do |json_vuln|
@vulnerabilities << Vulnerability.load_from_json(json_vuln)
end

View File

@@ -8,7 +8,7 @@ module WPScan
# @return [ Hash ]
def references
{
@references ||= {
url: ['http://codex.wordpress.org/XML-RPC_Pingback_API'],
metasploit: [
'auxiliary/scanner/http/wordpress_ghost_scanner',

View File

@@ -2,7 +2,7 @@
<% if @users.empty? -%>
<%= notice_icon %> No Valid Passwords Found.
<% else -%>
<%= notice_icon %> Valid Combinations Found:
<%= critical_icon %> Valid Combinations Found:
<% @users.each do |user| -%>
| Username: <%= user.username %>, Password: <%= user.password %>
<% end -%>

View File

@@ -1,13 +1,13 @@
<% unless @status.empty? -%>
<% if @status['http_error'] -%>
<%= critical_icon %> WPVulnDB API, <%= @status['http_error'].to_s %>
<%= critical_icon %> WPScan DB API, <%= @status['http_error'].to_s %>
<% else -%>
<%= info_icon %> WPVulnDB API OK
<%= info_icon %> WPScan DB API OK
| Plan: <%= @status['plan'] %>
| Requests Done (during the scan): <%= @api_requests %>
| Requests Remaining: <%= @status['requests_remaining'] %>
<% end -%>
<% else -%>
<%= warning_icon %> No WPVulnDB API Token given, as a result vulnerability data has not been output.
<%= warning_icon %> You can get a free API token with 50 daily requests by registering at https://wpvulndb.com/users/sign_up
<%= warning_icon %> No WPScan API Token given, as a result vulnerability data has not been output.
<%= warning_icon %> You can get a free API token with 25 daily requests by registering at https://wpscan.com/register
<% end -%>

View File

@@ -1,4 +1,7 @@
| <%= critical_icon %> Title: <%= @v.title %>
<% if @v.cvss -%>
| CVSS: <%= @v.cvss[:score] %> (<%= @v.cvss[:vector] %>)
<% end -%>
<% if @v.fixed_in -%>
| Fixed in: <%= @v.fixed_in %>
<% end -%>

View File

@@ -1,5 +1,5 @@
<% if @version -%>
<%= info_icon %> WordPress version <%= @version.number %> identified (<%= @version.status.capitalize %>, released on <%= @version.release_date %>).
<%= info_icon %> WordPress version <%= @version.number %> identified (<%= @version.status.tr('-', '_').humanize %>, released on <%= @version.release_date %>).
<%= render('@finding', item: @version) -%>
<% else -%>
<%= notice_icon %> The WordPress version could not be detected.

View File

@@ -19,6 +19,9 @@
<% vulns.each_with_index do |v, index| -%>
{
"title": <%= v.title.to_json %>,
<% if v.cvss -%>
"cvss": <%= v.cvss.to_json %>,
<% end -%>
"fixed_in": <%= v.fixed_in.to_json %>,
"references": <%= v.references.to_json %>
}<% unless index == last_index -%>,<% end -%>

View File

@@ -8,6 +8,6 @@
"requests_remaining": <%= @status['requests_remaining'].to_json %>
<% end -%>
<% else -%>
"error": "No WPVulnDB API Token given, as a result vulnerability data has not been output.\nYou can get a free API token with 50 daily requests by registering at https://wpvulndb.com/users/sign_up"
"error": "No WPScan API Token given, as a result vulnerability data has not been output.\nYou can get a free API token with 25 daily requests by registering at https://wpscan.com/register"
<% end -%>
},

View File

@@ -13,6 +13,7 @@ require 'uri'
require 'time'
require 'readline'
require 'securerandom'
require 'resolv'
# Monkey Patches/Fixes/Override
require 'wpscan/typhoeus/response' # Adds a from_vuln_api? method
# Custom Libs

View File

@@ -7,7 +7,7 @@ module WPScan
# @return [ String ]
def default_user_agent
@default_user_agent ||= "WPScan v#{VERSION} (https://wpscan.org/)"
@default_user_agent ||= "WPScan v#{VERSION} (https://wpscan.com/wordpress-security-scanner)"
end
end
end

View File

@@ -11,7 +11,11 @@ module WPScan
# @return [ Hash ]
def self.all_df_data
@all_df_data ||= YAML.safe_load(File.read(df_file), [Regexp])
@all_df_data ||= if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('4.0.0')
YAML.safe_load(File.read(df_file), permitted_classes: [Regexp])
else
YAML.safe_load(File.read(df_file), [Regexp])
end
end
# @return [ Array<Symbol> ]
@@ -31,7 +35,7 @@ module WPScan
finder_configs(
finder_class,
Regexp.last_match[1] == 'aggressive'
aggressive: Regexp.last_match[1] == 'aggressive'
)
end

View File

@@ -16,7 +16,7 @@ module WPScan
# @param [ Symbol ] finder_class
# @param [ Boolean ] aggressive
# @return [ Hash ]
def self.finder_configs(finder_class, aggressive = false)
def self.finder_configs(finder_class, aggressive: false)
configs = {}
return configs unless allowed_classes.include?(finder_class)

View File

@@ -24,7 +24,7 @@ module WPScan
# @param [ Symbol ] finder_class
# @param [ Boolean ] aggressive
# @return [ Hash ]
def self.finder_configs(finder_class, aggressive = false)
def self.finder_configs(finder_class, aggressive: false)
configs = {}
return configs unless allowed_classes.include?(finder_class)

View File

@@ -24,7 +24,13 @@ module WPScan
FileUtils.mkdir_p(repo_directory.to_s) unless Dir.exist?(repo_directory.to_s)
raise "#{repo_directory} is not writable" unless repo_directory.writable?
# When --no-update is passed, return to avoid raising an error if the directory is not writable
# Mainly there for Homebrew: https://github.com/wpscanteam/wpscan/pull/1455
return if ParsedCli.update == false
unless repo_directory.writable?
raise "#{repo_directory} is not writable (uid: #{Process.uid}, gid: #{Process.gid})"
end
delete_old_files
end
@@ -67,13 +73,13 @@ module WPScan
# @return [ Hash ] The params for Typhoeus::Request
# @note Those params can't be overriden by CLI options
def request_params
@request_params ||= {
@request_params ||= Browser.instance.default_request_params.merge(
timeout: 600,
connecttimeout: 300,
accept_encoding: 'gzip, deflate',
cache_ttl: 0,
headers: { 'User-Agent' => Browser.instance.default_user_agent, 'Referer' => nil }
}
headers: { 'User-Agent' => Browser.instance.default_user_agent }
)
end
# @return [ String ] The raw file URL associated with the given filename
@@ -85,7 +91,7 @@ module WPScan
def remote_file_checksum(filename)
url = "#{remote_file_url(filename)}.sha512"
res = Browser.get(url, request_params)
res = Typhoeus.get(url, request_params)
raise Error::Download, res if res.timed_out? || res.code != 200
res.body.chomp
@@ -126,10 +132,10 @@ module WPScan
file_path = local_file_path(filename)
file_url = remote_file_url(filename)
res = Browser.get(file_url, request_params)
res = Typhoeus.get(file_url, request_params)
raise Error::Download, res if res.timed_out? || res.code != 200
File.open(file_path, 'wb') { |f| f.write(res.body) }
File.binwrite(file_path, res.body)
local_file_checksum(filename)
end
@@ -139,24 +145,22 @@ module WPScan
updated = []
FILES.each do |filename|
begin
db_checksum = remote_file_checksum(filename)
db_checksum = remote_file_checksum(filename)
# Checking if the file needs to be updated
next if File.exist?(local_file_path(filename)) && db_checksum == local_file_checksum(filename)
# Checking if the file needs to be updated
next if File.exist?(local_file_path(filename)) && db_checksum == local_file_checksum(filename)
create_backup(filename)
dl_checksum = download(filename)
create_backup(filename)
dl_checksum = download(filename)
raise "#{filename}: checksums do not match" unless dl_checksum == db_checksum
raise Error::ChecksumsMismatch, filename unless dl_checksum == db_checksum
updated << filename
rescue StandardError => e
restore_backup(filename)
raise e
ensure
delete_backup(filename) if File.exist?(backup_file_path(filename))
end
updated << filename
rescue StandardError => e
restore_backup(filename)
raise e
ensure
delete_backup(filename) if File.exist?(backup_file_path(filename))
end
File.write(last_update_file, Time.now)

View File

@@ -4,7 +4,7 @@ module WPScan
module DB
# WPVulnDB API
class VulnApi
NON_ERROR_CODES = [200, 401].freeze
NON_ERROR_CODES = [200, 403].freeze
class << self
attr_accessor :token
@@ -12,7 +12,7 @@ module WPScan
# @return [ Addressable::URI ]
def self.uri
@uri ||= Addressable::URI.parse('https://wpvulndb.com/api/v3/')
@uri ||= Addressable::URI.parse('https://wpscan.com/api/v3/')
end
# @param [ String ] path
@@ -21,10 +21,12 @@ module WPScan
# @return [ Hash ]
def self.get(path, params = {})
return {} unless token
return {} if path.end_with?('/latest') # Remove this when api/v4 is up
res = Browser.get(uri.join(path), params.merge(request_params))
# Typhoeus.get is used rather than Browser.get to avoid merging irrelevant params from the CLI
res = Typhoeus.get(uri.join(path), default_request_params.merge(params))
return {} if res.code == 404 # This is for API inconsistencies when dots in path
return {} if res.code == 404 || res.code == 429
return JSON.parse(res.body) if NON_ERROR_CODES.include?(res.code)
raise Error::HTTP, res
@@ -32,6 +34,8 @@ module WPScan
retries ||= 0
if (retries += 1) <= 3
@default_request_params[:headers]['X-Retry'] = retries
sleep(1)
retry
end
@@ -64,15 +68,14 @@ module WPScan
end
# @return [ Hash ]
def self.request_params
{
# @note Those params can not be overriden by CLI options
def self.default_request_params
@default_request_params ||= Browser.instance.default_request_params.merge(
headers: {
'Host' => uri.host, # Reset in case user provided a --vhost for the target
'Referer' => nil, # Removes referer set by the cmsscanner to the target url
'User-Agent' => Browser.instance.default_user_agent,
'Authorization' => "Token token=#{token}"
}
}
)
end
end
end

View File

@@ -5,16 +5,16 @@ module WPScan
class PluginsThresholdReached < Standard
def to_s
"The number of plugins detected reached the threshold of #{ParsedCli.plugins_threshold} " \
'which might indicate False Positive. It would be recommended to use the --exclude-content-based ' \
'option to ignore the bad responses.'
'which might indicate False Positive. It would be recommended to use the --exclude-content-based ' \
'option to ignore the bad responses.'
end
end
class ThemesThresholdReached < Standard
def to_s
"The number of themes detected reached the threshold of #{ParsedCli.themes_threshold} " \
'which might indicate False Positive. It would be recommended to use the --exclude-content-based ' \
'option to ignore the bad responses.'
'which might indicate False Positive. It would be recommended to use the --exclude-content-based ' \
'option to ignore the bad responses.'
end
end
end

View File

@@ -8,5 +8,17 @@ module WPScan
'Update required, you can not run a scan if a database file is missing.'
end
end
class ChecksumsMismatch < Standard
attr_reader :db_file
def initialize(db_file)
@db_file = db_file
end
def to_s
"#{db_file}: checksums do not match. Please try again in a few minutes."
end
end
end
end

View File

@@ -26,7 +26,13 @@ module WPScan
class WpContentDirNotDetected < Standard
def to_s
'Unable to identify the wp-content dir, please supply it with --wp-content-dir,' \
' use the --scope option or make sure the --url value given is the correct one'
' use the --scope option or make sure the --url value given is the correct one'
end
end
class NoLoginInterfaceDetected < Standard
def to_s
'Could not find a login interface to perform the password attack against'
end
end
end

View File

@@ -17,7 +17,7 @@ module WPScan
end
# Needed to have inheritance of the @child_class_constants
# If inheritance is not needed, then the #child_class_constant can be used in the classe definition, ie
# If inheritance is not needed, then the #child_class_constant can be used in the class definition, ie
# child_class_constant :FILES, PATTERN: /aaa/i
# @return [ Hash ]
def self.child_class_constants
@@ -56,8 +56,8 @@ module WPScan
homepage_result = find(target.homepage_res, opts)
if homepage_result
return homepage_result unless homepage_result.is_a?(Array) && homepage_result.empty?
unless homepage_result.nil? || (homepage_result.is_a?(Array) && homepage_result&.empty?)
return homepage_result
end
find(target.error_404_res, opts)

View File

@@ -11,7 +11,7 @@ module WPScan
def self.child_class_constants
@child_class_constants ||= super.merge(
PARSER: nil, KEY: nil, PATTERN: /(?<v>\d+\.[\.\d]+)/, CONFIDENCE: 70
PARSER: nil, KEY: nil, PATTERN: /(?<v>\d+\.[.\d]+)/, CONFIDENCE: 70
)
end
@@ -21,13 +21,11 @@ module WPScan
parsers = ALLOWED_PARSERS.include?(self.class::PARSER) ? [self.class::PARSER] : ALLOWED_PARSERS
parsers.each do |parser|
begin
parsed = parser.respond_to?(:safe_load) ? parser.safe_load(body) : parser.load(body)
parsed = parser.respond_to?(:safe_load) ? parser.safe_load(body) : parser.load(body)
return parsed if parsed.is_a?(Hash) || parsed.is_a?(Array)
rescue StandardError
next
end
return parsed if parsed.is_a?(Hash) || parsed.is_a?(Array)
rescue StandardError
next
end
nil # Make sure nil is returned in case none of the parsers managed to parse the body correctly

View File

@@ -9,7 +9,7 @@ module WPScan
# @return [ Hash ]
def self.child_class_constants
@child_class_constants ||= super().merge(
XPATH: nil, FILES: nil, PATTERN: /(?:v|ver|version)\=(?<v>\d+\.[\.\d]+)/i, CONFIDENCE_PER_OCCURENCE: 10
XPATH: nil, FILES: nil, PATTERN: /(?:v|ver|version)=(?<v>\d+\.[.\d]+)/i, CONFIDENCE_PER_OCCURENCE: 10
)
end

View File

@@ -9,7 +9,7 @@ module WPScan
# @return [ Hash ]
def self.child_class_constants
@child_class_constants ||= super().merge(
XPATH: nil, PATTERN: /\A(?<v>\d+\.[\.\d]+)/, CONFIDENCE: 60
XPATH: nil, PATTERN: /\A(?<v>\d+\.[.\d]+)/, CONFIDENCE: 60
)
end

View File

@@ -33,7 +33,7 @@ module WPScan
# @return [ Hash ]
def self.child_class_constants
@child_class_constants ||= super().merge(PATTERN: /ver\=(?<v>\d+\.[\.\d]+)/i)
@child_class_constants ||= super().merge(PATTERN: /ver=(?<v>\d+\.[.\d]+)/i)
end
end

View File

@@ -13,8 +13,11 @@ end
#
# @return [ Symbol ]
def classify_slug(slug)
classified = slug.to_s.gsub(/[^a-z\d\-]/i, '-').gsub(/\-{1,}/, '_').camelize.to_s
classified = slug.to_s.gsub(/[^a-z\d\-]/i, '-').gsub(/-{1,}/, '_').camelize.to_s
classified = "D_#{classified}" if /\d/.match?(classified[0])
# Special case for slugs with all non-latin characters.
classified = "HexSlug_#{slug.bytes.map { |i| i.to_s(16) }.join}" if classified.empty?
classified.to_sym
end

View File

@@ -2,7 +2,7 @@
module WPScan
# References module (which should be included along with the CMSScanner::References)
# to allow the use of the wpvulndb reference
# to allow the use of the wpvulndb reference.
module References
extend ActiveSupport::Concern
@@ -27,7 +27,7 @@ module WPScan
end
def wpvulndb_url(id)
"https://wpvulndb.com/vulnerabilities/#{id}"
"https://wpscan.com/vulnerability/#{id}"
end
end
end

View File

@@ -19,13 +19,13 @@ module WPScan
# @return [ Boolean ]
def vulnerable?
[@wp_version, @main_theme, @plugins, @themes, @timthumbs].each do |e|
[*e].each { |ae| return true if ae && ae.vulnerable? } # rubocop:disable Style/SafeNavigation
Array(e).each { |ae| return true if ae && ae.vulnerable? } # rubocop:disable Style/SafeNavigation
end
return true unless [*@config_backups].empty?
return true unless [*@db_exports].empty?
return true unless Array(@config_backups).empty?
return true unless Array(@db_exports).empty?
[*@users].each { |u| return true if u.password }
Array(@users).each { |u| return true if u.password }
false
end

View File

@@ -11,9 +11,10 @@ module WPScan
module WordPress
include CMSScanner::Target::Platform::PHP
WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu\-)?plugins|uploads))|wp-includes)/}i.freeze
WP_JSON_OEMBED_PATTERN = %r{/wp\-json/oembed/}i.freeze
WP_ADMIN_AJAX_PATTERN = %r{\\?/wp\-admin\\?/admin\-ajax\.php}i.freeze
WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu-)?plugins|uploads))|wp-includes)/}i.freeze
WORDPRESS_HOSTED_PATTERN = %r{https?://s\d\.wp\.com#{WORDPRESS_PATTERN}}i.freeze
WP_JSON_OEMBED_PATTERN = %r{/wp-json/oembed/}i.freeze
WP_ADMIN_AJAX_PATTERN = %r{\\?/wp-admin\\?/admin-ajax\.php}i.freeze
# These methods are used in the associated interesting_findings finders
# to keep the boolean state of the finding rather than re-check the whole thing again
@@ -32,8 +33,12 @@ module WPScan
if %i[mixed aggressive].include?(detection_mode)
%w[wp-admin/install.php wp-login.php].each do |path|
return true if in_scope_uris(Browser.get_and_follow_location(url(path))).any? do |uri|
WORDPRESS_PATTERN.match?(uri.path)
res = Browser.get_and_follow_location(url(path))
next unless res.code == 200
in_scope_uris(res, '//link/@href|//script/@src') do |uri|
return true if WORDPRESS_PATTERN.match?(uri.path)
end
end
end
@@ -44,7 +49,7 @@ module WPScan
# @param [ Typhoeus::Response ] response
# @return [ Boolean ]
def wordpress_from_meta_comments_or_scripts?(response)
in_scope_uris(response) do |uri|
in_scope_uris(response, '//link/@href|//script/@src') do |uri|
return true if WORDPRESS_PATTERN.match?(uri.path) || WP_JSON_OEMBED_PATTERN.match?(uri.path)
end
@@ -99,10 +104,8 @@ module WPScan
return true if /\.wordpress\.com$/i.match?(uri.host)
unless content_dir
pattern = %r{https?://s\d\.wp\.com#{WORDPRESS_PATTERN}}i.freeze
uris_from_page(homepage_res) do |uri|
return true if uri.to_s.match?(pattern)
uris_from_page(homepage_res, '(//@href|//@src)[contains(., "wp.com")]') do |uri|
return true if uri.to_s.match?(WORDPRESS_HOSTED_PATTERN)
end
end
@@ -134,15 +137,19 @@ module WPScan
# the first time the method is called, and the effective_url is then used
# if suitable, otherwise the default wp-login will be.
#
# @return [ String ] The URL to the login page
# If the login_uri CLI option has been provided, it will be returne w/o redirection check.
#
# @return [ String, false ] The URL to the login page or false if not detected
def login_url
return @login_url if @login_url
return @login_url unless @login_url.nil?
return @login_url = url(ParsedCli.login_uri) if ParsedCli.login_uri
@login_url = url('wp-login.php')
res = Browser.get_and_follow_location(@login_url)
@login_url = res.effective_url if res.effective_url =~ /wp\-login\.php\z/i && in_scope?(res.effective_url)
@login_url = res.effective_url if res.effective_url =~ /wp-login\.php\z/i && in_scope?(res.effective_url)
@login_url = false if res.code == 404
@login_url
end

View File

@@ -104,10 +104,11 @@ module WPScan
return @sub_dir unless @sub_dir.nil?
# url_pattern is from CMSScanner::Target
pattern = %r{#{url_pattern}(.+?)/(?:xmlrpc\.php|wp\-includes/)}i
pattern = %r{#{url_pattern}(.+?)/(?:xmlrpc\.php|wp-includes/)}i
xpath = '(//@src|//@href|//@data-src)[contains(., "xmlrpc.php") or contains(., "wp-includes/")]'
[homepage_res, error_404_res].each do |page_res|
in_scope_uris(page_res) do |uri|
in_scope_uris(page_res, xpath) do |uri|
return @sub_dir = Regexp.last_match[1] if uri.to_s.match(pattern)
end
end
@@ -123,15 +124,15 @@ module WPScan
def url(path = nil)
return @uri.to_s unless path
if %r{wp\-content/plugins}i.match?(path)
path = +path.gsub('wp-content/plugins', plugins_dir)
elsif /wp\-content/i.match?(path)
path = +path.gsub('wp-content', content_dir)
if %r{wp-content/plugins}i.match?(path)
new_path = path.gsub('wp-content/plugins', plugins_dir)
elsif /wp-content/i.match?(path)
new_path = path.gsub('wp-content', content_dir)
elsif path[0] != '/' && sub_dir
path = "#{sub_dir}/#{path}"
new_path = "#{sub_dir}/#{path}"
end
super(path)
super(new_path || path)
end
end
end

View File

@@ -7,7 +7,8 @@ module Typhoeus
#
# @return [ Boolean ]
def from_vuln_api?
effective_url.start_with?(WPScan::DB::VulnApi.uri.to_s) && !effective_url.include?('/status')
effective_url.start_with?(WPScan::DB::VulnApi.uri.to_s) &&
!effective_url.start_with?(WPScan::DB::VulnApi.uri.join('status').to_s)
end
end
end

View File

@@ -2,5 +2,5 @@
# Version
module WPScan
VERSION = '3.7.6'
VERSION = '3.8.25'
end

View File

@@ -18,9 +18,11 @@ module WPScan
new(
json_data['title'],
references,
json_data['vuln_type'],
json_data['fixed_in']
references: references,
type: json_data['vuln_type'],
fixed_in: json_data['fixed_in'],
introduced_in: json_data['introduced_in'],
cvss: json_data['cvss']&.symbolize_keys
)
end
end

View File

@@ -52,9 +52,10 @@ describe WPScan::Controller::Core do
%i[apache iis nginx].each do |server|
context "when #{server}" do
let(:cli_args) { "#{super()} --server #{server}" }
let(:servers) { [:Apache, nil, :IIS, :Nginx] }
it "loads the #{server.capitalize} module and returns :#{server}" do
@stubbed_server = [:Apache, nil, :IIS, :Nginx].sample
@stubbed_server = servers.sample
@expected = server == :iis ? :IIS : server.to_s.camelize.to_sym
end
end
@@ -70,7 +71,7 @@ describe WPScan::Controller::Core do
let(:cli_args) { "#{super()} --no-update" }
it 'raises an error' do
expect { core.update_db_required? }. to raise_error(WPScan::Error::MissingDatabaseFile)
expect { core.update_db_required? }.to raise_error(WPScan::Error::MissingDatabaseFile)
end
end

View File

@@ -76,7 +76,7 @@ describe WPScan::Controller::Enumeration do
config_backups_list config_backups_detection
db_exports_list db_exports_detection
medias_detection
users_list users_detection]
users_list users_detection exclude_usernames]
)
end
end

View File

@@ -1,5 +1,24 @@
# frozen_string_literal: true
XMLRPC_FAILED_BODY = '
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>405</int></value>
</member>
<member>
<name>faultString</name>
<value><string>%s</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>'
describe WPScan::Controller::PasswordAttack do
subject(:controller) { described_class.new }
let(:target_url) { 'http://ex.lo/' }
@@ -15,13 +34,13 @@ describe WPScan::Controller::PasswordAttack do
it 'contains to correct options' do
expect(controller.cli_options.map(&:to_sym))
.to eq(%i[passwords usernames multicall_max_passwords password_attack])
.to eq(%i[passwords usernames multicall_max_passwords password_attack login_uri])
end
end
describe '#users' do
context 'when no --usernames' do
it 'calles target.users' do
it 'calls target.users' do
expect(controller.target).to receive(:users)
controller.users
end
@@ -40,10 +59,6 @@ describe WPScan::Controller::PasswordAttack do
end
end
describe '#passwords' do
xit
end
describe '#run' do
context 'when no --passwords is supplied' do
it 'does not run the attacker' do
@@ -85,20 +100,34 @@ describe WPScan::Controller::PasswordAttack do
end
context 'when wp.getUsersBlogs method listed' do
before { expect(xmlrpc).to receive(:available_methods).and_return(%w[wp.getUsersBlogs m2]) }
before do
expect(xmlrpc).to receive(:available_methods).and_return(%w[wp.getUsersBlogs m2])
stub_request(:post, xmlrpc.url).to_return(body: body)
end
context 'when wp.getUsersBlogs method disabled' do
it 'returns false' do
stub_request(:post, xmlrpc.url).to_return(body: 'XML-RPC services are disabled on this site.')
context 'when blog is in EN' do
let(:body) { format(XMLRPC_FAILED_BODY, 'XML-RPC services are disabled on this site.') }
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false
it 'returns false' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false
end
end
context 'when blog is in FR' do
let(:body) { format(XMLRPC_FAILED_BODY, 'Les services XML-RPC sont désactivés sur ce site.') }
it 'returns false' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false
end
end
end
context 'when wp.getUsersBlogs method enabled' do
it 'returns true' do
stub_request(:post, xmlrpc.url).to_return(body: 'Incorrect username or password.')
let(:body) { 'Incorrect username or password.' }
it 'returns true' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be true
end
end
@@ -107,15 +136,34 @@ describe WPScan::Controller::PasswordAttack do
end
describe '#attacker' do
before do
allow(controller.target).to receive(:sub_dir)
controller.target.instance_variable_set(:@login_url, nil)
end
context 'when --password-attack provided' do
let(:cli_args) { "#{super()} --password-attack #{attack}" }
context 'when wp-login' do
before { stub_request(:get, controller.target.url('wp-login.php')).to_return(status: status) }
let(:attack) { 'wp-login' }
it 'returns the correct object' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
context 'when available' do
let(:status) { 200 }
it 'returns the correct object' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
end
end
context 'when not available (404)' do
let(:status) { 404 }
it 'raises an error' do
expect { controller.attacker }.to raise_error(WPScan::Error::NoLoginInterfaceDetected)
end
end
end
@@ -172,11 +220,26 @@ describe WPScan::Controller::PasswordAttack do
context 'when automatic detection' do
context 'when xmlrpc_get_users_blogs_enabled? is false' do
it 'returns the WpLogin' do
before do
expect(controller).to receive(:xmlrpc_get_users_blogs_enabled?).and_return(false)
stub_request(:get, controller.target.url('wp-login.php')).to_return(status: status)
end
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
context 'when wp-login available' do
let(:status) { 200 }
it 'returns the WpLogin' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
end
end
context 'when wp-login.php not available' do
let(:status) { 404 }
it 'raises an error' do
expect { controller.attacker }.to raise_error(WPScan::Error::NoLoginInterfaceDetected)
end
end
end

View File

@@ -7,6 +7,7 @@ describe WPScan::Controller::VulnApi do
before do
WPScan::ParsedCli.options = rspec_parsed_options(cli_args)
WPScan::DB::VulnApi.instance_variable_set(:@default_request_params, nil)
end
describe '#cli_options' do
@@ -27,7 +28,7 @@ describe WPScan::Controller::VulnApi do
let(:cli_args) { "#{super()} --api-token token" }
context 'when the token is invalid' do
before { expect(WPScan::DB::VulnApi).to receive(:status).and_return('error' => 'HTTP Token: Access denied.') }
before { expect(WPScan::DB::VulnApi).to receive(:status).and_return('status' => 'forbidden') }
it 'raise an InvalidApiToken error' do
expect { controller.before_scan }.to raise_error(WPScan::Error::InvalidApiToken)
@@ -74,20 +75,40 @@ describe WPScan::Controller::VulnApi do
context 'when limited requests' do
let(:requests) { 100 }
it 'does not raise an error' do
it 'sets the token and does not raise an error' do
expect { controller.before_scan }.to_not raise_error
expect(WPScan::DB::VulnApi.token).to eql 'token'
end
context 'when unlimited requests' do
let(:requests) { 'Unlimited' }
it 'does not raise an error' do
it 'sets the token and does not raise an error' do
expect { controller.before_scan }.to_not raise_error
expect(WPScan::DB::VulnApi.token).to eql 'token'
end
end
end
end
end
end
context 'when token in ENV' do
before do
ENV[described_class::ENV_KEY] = 'token-from-env'
expect(WPScan::DB::VulnApi)
.to receive(:status)
.and_return('success' => true, 'plan' => 'free', 'requests_remaining' => 'Unlimited')
end
it 'sets the token and does not raise an error' do
expect { controller.before_scan }.to_not raise_error
expect(WPScan::DB::VulnApi.token).to eql 'token-from-env'
end
end
end
end

View File

@@ -12,7 +12,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
allow(target).to receive(:sub_dir).and_return(false)
end
it 'replace {domain_name} by its value' do
it 'replaces {domain_name} by its values' do
expect(finder.potential_urls(opts).keys).to eql %w[
http://ex.lo/aa/ex.sql
http://ex.lo/aa/wordpress.sql
@@ -27,8 +27,8 @@ describe WPScan::Finders::DbExports::KnownLocations do
context "when #{sub_domain} sub-domain" do
let(:url) { "https://#{sub_domain}.domain.tld" }
it 'replace {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/domain.sql"
it 'replaces {domain_name} by its correct values' do
expect(finder.potential_urls(opts).keys).to include "#{url}/domain.sql", "#{url}/#{sub_domain}.domain.sql"
end
end
end
@@ -36,7 +36,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
context 'when multi-level tlds' do
let(:url) { 'https://something.com.tr' }
it 'replace {domain_name} by its correct value' do
it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include 'https://something.com.tr/something.sql'
end
end
@@ -44,16 +44,38 @@ describe WPScan::Finders::DbExports::KnownLocations do
context 'when multi-level tlds and sub-domain' do
let(:url) { 'https://dev.something.com.tr' }
it 'replace {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include 'https://dev.something.com.tr/something.sql'
it 'replaces {domain_name} by its correct values' do
expect(finder.potential_urls(opts).keys).to include(
'https://dev.something.com.tr/something.sql',
'https://dev.something.com.tr/dev.something.sql'
)
end
end
context 'when some weird stuff' do
let(:url) { 'https://098f6bcd4621d373cade4e832627b4f6.aa-bb-ccc-dd.domain-test.com' }
it 'replace {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/domain-test.sql"
it 'replaces {domain_name} by its correct values' do
expect(finder.potential_urls(opts).keys).to include(
"#{url}/domain-test.sql",
"#{url}/098f6bcd4621d373cade4e832627b4f6.aa-bb-ccc-dd.domain-test.sql"
)
end
end
context 'when a non standard URL' do
let(:url) { 'http://dc-2' }
it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/dc-2.sql"
end
end
context 'when an IP address' do
let(:url) { 'http://192.168.1.12' }
it 'replaces {domain_name} by the IP address' do
expect(finder.potential_urls(opts).keys).to include "#{url}/192.168.1.12.sql"
end
end
end
@@ -94,19 +116,29 @@ describe WPScan::Finders::DbExports::KnownLocations do
expect(target).to receive(:homepage_or_404?).twice.and_return(false)
end
it 'returns the expected Array<DbExport>' do
expected = []
context 'when matching the pattern' do
it 'returns the expected Array<DbExport>' do
expected = []
found_files.each do |file|
url = "#{target.url}#{file}"
expected << WPScan::Model::DbExport.new(
url,
confidence: 100,
found_by: described_class::DIRECT_ACCESS
)
found_files.each do |file|
url = "#{target.url}#{file}"
expected << WPScan::Model::DbExport.new(
url,
confidence: 100,
found_by: described_class::DIRECT_ACCESS
)
end
expect(finder.aggressive(opts)).to eql expected
end
end
expect(finder.aggressive(opts)).to eql expected
context 'when not matching the pattern' do
let(:db_export) { '' }
it 'returns an empty array' do
expect(finder.aggressive(opts)).to eql []
end
end
end
end

View File

@@ -35,15 +35,47 @@ describe WPScan::Finders::InterestingFindings::DuplicatorInstallerLog do
end
context 'when the body matches' do
let(:body) { File.read(fixtures.join(filename)) }
it 'returns the InterestingFinding' do
after do
expect(finder.aggressive).to eql WPScan::Model::DuplicatorInstallerLog.new(
log_url,
confidence: 100,
found_by: described_class::DIRECT_ACCESS
)
end
context 'when old versions of the file' do
let(:body) { File.read(fixtures.join('old.txt')) }
it 'returns the InterestingFinding' do
# handled in after loop above
end
end
context 'when newest versions of the file' do
context 'when PRO format 1' do
let(:body) { File.read(fixtures.join('pro.txt')) }
it 'returns the InterestingFinding' do
# handled in after loop above
end
end
context 'when PRO format 2' do
let(:body) { File.read(fixtures.join('pro2.txt')) }
it 'returns the InterestingFinding' do
# handled in after loop above
end
end
context 'when LITE' do
let(:body) { File.read(fixtures.join('lite.txt')) }
it 'returns the InterestingFinding' do
# handled in after loop above
end
end
end
end
end
end

View File

@@ -4,7 +4,7 @@ describe WPScan::Finders::InterestingFindings::EmergencyPwdResetScript do
subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' }
let(:file_url) { url + 'emergency.php' }
let(:file_url) { "#{url}emergency.php" }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'emergency_pwd_reset_script') }
before do

View File

@@ -6,8 +6,55 @@ describe WPScan::Finders::InterestingFindings::MuPlugins do
let(:url) { 'http://ex.lo/' }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'mu_plugins') }
before do
expect(target).to receive(:content_dir).at_least(1).and_return('wp-content')
end
describe '#passive' do
xit
before { stub_request(:get, url).to_return(body: body) }
context 'when no uris' do
let(:body) { '' }
its(:passive) { should be nil }
end
context 'when a large amount of unrelated uris' do
let(:body) do
Array.new(250) { |i| "<a href='#{url}#{i}.html'>Some Link</a><img src='#{url}img-#{i}.png'/>" }.join("\n")
end
it 'should not take a while to process the page' do
time_start = Time.now
result = finder.passive
time_end = Time.now
expect(result).to be nil
expect(time_end - time_start).to be < 1
end
end
context 'when uris' do
let(:body) { File.read(fixtures.join(fixture)) }
context 'when none matching' do
let(:fixture) { 'no_match.html' }
its(:passive) { should be nil }
end
context 'when matching via href' do
let(:fixture) { 'match_href.html' }
its(:passive) { should be_a WPScan::Model::MuPlugins }
end
context 'when matching from src' do
let(:fixture) { 'match_src.html' }
its(:passive) { should be_a WPScan::Model::MuPlugins }
end
end
end
describe '#aggressive' do

View File

@@ -0,0 +1,50 @@
# frozen_string_literal: true
describe WPScan::Finders::InterestingFindings::PHPDisabled do
subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'php_disabled') }
let(:file_path) { 'wp-includes/version.php' }
let(:file_url) { target.url(file_path) }
describe '#aggressive' do
before do
expect(target).to receive(:sub_dir).at_least(1).and_return(false)
expect(target).to receive(:head_or_get_params).and_return(method: :head)
end
context 'when not a 200' do
it 'return nil' do
stub_request(:head, file_url).to_return(status: 404)
expect(finder.aggressive).to eql nil
end
end
context 'when a 200' do
before do
stub_request(:head, file_url)
stub_request(:get, file_url).to_return(body: body)
end
context 'when the body does not match' do
let(:body) { '' }
its(:aggressive) { should be_nil }
end
context 'when the body matches' do
let(:body) { File.read(fixtures.join('version.php')) }
it 'returns the PHPDisabled' do
expect(finder.aggressive).to eql WPScan::Model::PHPDisabled.new(
file_url,
confidence: 100,
found_by: described_class::DIRECT_ACCESS
)
end
end
end
end
end

View File

@@ -4,7 +4,7 @@ describe WPScan::Finders::InterestingFindings::UploadSQLDump do
subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' }
let(:dump_url) { url + 'wp-content/uploads/dump.sql' }
let(:dump_url) { "#{url}wp-content/uploads/dump.sql" }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'upload_sql_dump') }
let(:wp_content) { 'wp-content' }

View File

@@ -10,7 +10,7 @@ describe WPScan::Finders::InterestingFindings::Base do
%w[
Readme DebugLog FullPathDisclosure
Multisite MuPlugins Registration UploadDirectoryListing TmmDbMigrate
UploadSQLDump
UploadSQLDump PHPDisabled
]
end

View File

@@ -13,8 +13,8 @@ describe WPScan::Finders::Medias::AttachmentBruteForcing do
describe '#target_urls' do
it 'returns the expected urls' do
expect(finder.target_urls(range: (1..2))).to eql(
url + '?attachment_id=1' => 1,
url + '?attachment_id=2' => 2
"#{url}?attachment_id=1" => 1,
"#{url}?attachment_id=2" => 2
)
end
end

View File

@@ -35,7 +35,7 @@ describe WPScan::Finders::Passwords::WpLogin do
context 'when multiple cookies set' do
let(:headers) do
"Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\n" \
'Set-Cookie: something=value; path=/'
'Set-Cookie: something=value; path=/'
end
it 'returns false' do
@@ -47,9 +47,9 @@ describe WPScan::Finders::Passwords::WpLogin do
context 'when logged_in cookie set' do
let(:headers) do
"Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\r" \
"Set-Cookie: wordpress_xxx=yyy; path=/wp-content/plugins; httponly\r\n" \
"Set-Cookie: wordpress_xxx=yyy; path=/wp-admin; httponly\r\n" \
'Set-Cookie: wordpress_logged_in_xxx=yyy; path=/; httponly'
"Set-Cookie: wordpress_xxx=yyy; path=/wp-content/plugins; httponly\r\n" \
"Set-Cookie: wordpress_xxx=yyy; path=/wp-admin; httponly\r\n" \
'Set-Cookie: wordpress_logged_in_xxx=yyy; path=/; httponly'
end
it 'returns false' do

Some files were not shown because too many files have changed in this diff Show More