一、靶机详情
DC-2 是 VulnHub 上 DC 系列的第二台入门级渗透测试靶机,难度简单,目标是获取 root 权限并收集 5 个 Flag,核心考点为 WordPress 信息枚举、密码字典生成(cewl)、SSH 登录与 Git 命令提权,适合巩固基础渗透流程。
配置介绍
- 靶机:192.168.1.138
- kali:192.168.1.134
二、信息收集
1.扫描目标信息
nmap -sV -p- 192.168.1.138

dirsearch -u 192.168.1.138

Wappalyzer

三、搜寻漏洞及利用
根据信息收集得知目标 ip 开启了 80 端口,进行访问,发现访问不了,且我们输入的ip地址自动转化为了域名 http://dc-2,但是我的本地设备无法解析 dc-2 这个域名(比如本地 hosts 没有映射)。 需要修改本地 hosts 文件,把 dc-2 域名强制映射到 192.168.1.138,这样重定向到 dc-2 后,本地能正确解析到目标 IP。



1.获取 flag1
通过访问主页即可得到 flag1

2.暴力破解
根据 flag1 的提示,需要登录其他账号。信息收集中发现了登录地址
http://dc-2/wp-login.php?redirect_to=http%3A%2F%2Fdc-2%2Fwp-admin%2F\&reauth=1

这是一个wordpress的网站,我们采用专门针对wordpress的工具wpscan来进行爆破。
wpscan常用语法:
wpscan --url http://dc-2/ 获取版本信息
wpscan --url http://dc-2/ -e p 扫描插件
wpscan --url http://dc-2/ -e u 枚举用户 > admin/jerry/tom
wpscan --url http://dc-2/ -e u

通过 wpscan 可以得到三个用户,admin、jerry、tom。接下来使用cewl对目标网站生成密码字典,然后爆破。

将 3 个用户写入 user.txt 中。

使用wpscan将user.txt与passwd.txt匹配爆破用户密码,成功爆破出 jerry 和 tom 用户的密码。
wpscan --url http://dc-2/ -e -U /home/kali/Desktop/user.txt -P /home/kali/Desktop/passwd.txt

3.获取 flag2
使用jerry 用户和爆破出来的密码登录,得到 flag2.


4.ssh 连接
根据 flag2 的提示,需要找到另一个切入点。之前信息收集到的 7744 端口和 tom 用户还没用。密码是之前爆破出来的密码。
ssh tom@192.168.1.138 -p 7744

访问 flag3.txt,提示 rbash
rbash(restricted bash)是Bash的一种受限模式,通常用于限制用户的操作,防止他们进行潜在的危险行为,比如访问不该访问的文件或修改系统设置。

5.rbash 绕过
查看可用命令
列出所有未被禁用的命令
compgen -c

方法 1
可用使用 vi、less 这些未被禁用的命令查看 flag3.txt
vi flag3.txt

方法 2 突破 rbash 限制
利用 bash 内置特性绕过 rbash 的路径 / 命令限制,分两步实现:
- 第一步:
BASH_CMDS[a]=/bin/sh+a→ 跳出 rbash 进入/bin/sh
rbash 会限制直接执行 /bin/sh,但 BASH_CMDS 是 bash 内置的命令别名映射数组(rbash 默认没限制修改它):
- 你给
BASH_CMDS[a]赋值为/bin/sh,相当于把 "命令a" 映射成 "执行/bin/sh"; - 执行
a时,rbash 会通过BASH_CMDS找到/bin/sh并执行,从而进入不受限的 /bin/sh****环境 (提示符从tom@DC-2:~$变成$,说明 shell 已切换)。
- 第二步:
export PATH=$PATH:/bin/:/usr/bin/→ 恢复命令执行权限
进入 /bin/sh 后,默认 PATH 可能仍被 rbash 限制(只有少量目录),导致 ls/cat 等命令找不到:
-
export PATH=$PATH:/bin/:/usr/bin/是手动添加核心命令目录到 PATH; -
/bin和/usr/bin是系统命令(ls/cat/su等)的默认存放路径,添加后 shell 就能找到这些命令,所以ls/cat可以正常执行了。BASH_CMDS[a]=/bin/sh
a
export PATH=PATH:/bin/ export PATH=PATH:/usr/bin/

6.获取 flag3

7.切换 jerry 用户
根据 flag3 的提示,切换用户,密码是之前爆破出来的密码。

8.获取 flag4
切换到 jerry 用户目录,查看 flag4.txt

四、提权
在 jerry 用户中,查看可以使用的 root 权限命令
find / -user root -perm -4000 -print 2>/dev/null

查看当前用户可以通过 sudo 执行的命令
sudo -l

git 提权
使用 git 命令进行提权,在执行以下命令后直接在末尾输入!/bin/bash,然后按下回车,进入 root 用户。
sudo git help status


获取 final-flag

五、知识总结
1.wpscan
wpscan 是一款用于WordPress网站的黑盒安全扫描工具,主要用于检测 WordPress的已知漏洞,还可以枚举用户、暴力破解密码等,Kali Linux 默认预装。
基础命令:
wpscan --url http://dc-2/ -e u # 枚举用户都有哪些
wpscan --url http://dc-2/ -e -U /home/kali/Desktop/user.txt -P /home/kali/Desktop/passwd.txt # 爆破的用户,-U 为用户文件,-P 为爆破使用的密码
wpscan --url http://dc-2/ #获取版本信息
wpscan --url http://dc-2/ -e p #扫描插件
2.cewl
cewl 是一款字典生成工具,核心通过爬虫爬取指定 URL、提取页面单词生成自定义字典,常用于渗透测试中的密码暴力破解,Kali Linux 默认预装。
cewl http://example.com -w password.txt # 基础生成
cewl http://example.com -d 3 -e -n -w emails.txt # 爬取深度设为 3 并提取邮箱
3.rbash 绕过
rbash 全称是 Restricted Bash(受限 Bash), 它是 Bash 的一种"特殊模式",相当于给这个工作台加了很多限制,把用户的操作范围死死限制在指定区域内。如下图则是设置了 rbash。

rbash(Restricted Bash)是为了限制用户操作而设计的受限 shell,通常会:
- 限制
PATH环境变量(仅包含少量目录,默认不包含/bin//usr/bin等核心命令目录); - 禁止使用绝对路径执行命令;
- 禁止修改
PATH等环境变量。cat命令的默认路径是/bin/cat,但你的当前环境中PATH未包含/bin,因此直接输cat会提示找不到。
绕过方法:
(1) 利用已授权的可执行程序(内置 / 白名单程序)绕过
compgen -c
该命令可以查询 rbash(以及普通 Bash)环境中当前用户已授权、可直接执行的程序 / 命令列表。
(2) BASH_CMDS 修改
BASH_CMDS[a]=/bin/sh
a
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/
命令 1:BASH_CMDS[a]=/bin/sh
这是在 给 Bash 内置的命令哈希表 BASH_CMDS****新增 / 修改一个键值对 ,具体是将键a 映射到可执行程序 /bin/sh(系统的 Bourne Shell)。通俗理解:BASH_CMDS 是 Bash 用来缓存「已执行过的命令路径」的哈希表,目的是加快后续命令查找速度(不用重复扫描 PATH)。这条命令相当于「手动给这个缓存表加了一条记录,告诉 Bash:当用户输入命令 a 时,直接去执行 /bin/sh」。
命令 2:a
执行我们刚刚在 BASH_CMDS 中定义的伪命令 a,本质上就是 间接调用 /bin/sh**,启动一个新的 Bourne Shell 会话** 。 通俗理解:因为命令 1 已经把 a 和 /bin/sh 绑定了,输入 a 就等同于输入 /bin/sh,只是换了一个更简短的 "别名",执行后会进入 sh 的交互环境(跳出原来的 Shell 上下文) 。 这条命令能生效的前提是 BASH_CMDS[a]=/bin/sh 配置成功,且当前环境允许执行 /bin/sh。
命令 3:export PATH=$PATH:/bin/,命令 4:export PATH=$PATH:/usr/bin/
这两条命令的核心作用是将 /bin/和 **/usr/bin/两个系统核心命令目录添加到 **PATH环境变量中 。两条命令执行后,保留 PATH 原有配置,扩展命令查找路径,让系统能直接执行这两个目录下的 ls、cp、bash 等核心命令。 同样仅在当前终端会话生效,关闭终端或重启系统后配置丢失 。
4.提权(git)
find / -user root -perm -4000 -print 2>/dev/null
这条命令的核心功能是:在整个 Linux 系统中(从根目录 **/**开始),查找所有「由 root 用户拥有」且「设置了 SUID 特殊权限(权限标识为 4000)」的可执行文件,同时将查找过程中产生的错误信息隐藏不显示,只输出符合条件的文件路径。
sudo -l
sudo -l 的核心功能是:列出当前登录用户在系统中被授权(或未被授权)执行的 sudo****命令权限,简单说就是 "查看当前用户能用 sudo****以其他用户(通常是 root)身份执行哪些命令"。

NOPASSWD::可选标识,代表执行该命令时无需输入当前用户的密码,直接执行即可
git 提权
sudo git help status
这条命令的表面功能 是:以 root****用户权限(通过 sudo****提权),查看 Git 工具中 status****子命令的详细帮助文档(包括命令用法、参数说明、示例等)。
实则不然,git help 命令在调用帮助文档时,会默认调用系统的「分页器程序」(通常是 less 或 more)来展示长篇帮助内容,less/more 这类分页器程序内置了执行 Shell 命令的功能,可以通过该功能直接提权获取 root 权限。
简单说:sudo git help status 是通过「提权执行 git 帮助」→「调用分页器 less/more」→「利用分页器执行 Shell 命令」的链路,实现权限突破。
具体操作:
- 终端输入
sudo git help status,会进入less分页器的帮助文档展示界面(此时已处于 root 权限的分页器进程中); - 在
less界面中,直接按下键盘上的!键,此时终端会出现一个命令输入提示符; - 输入
bash或/bin/sh,回车后即可直接调出root 权限的完整 Shell 终端,实现提权:
在less界面中执行(按下!后输入)
!bash # 调出root bash终端(优先选择)
!/bin/sh # 若bash不可用,调出root sh终端