vulnhub靶场DC-2靶机渗透

一、靶机详情

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 的路径 / 命令限制,分两步实现:

  1. 第一步: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 已切换)。
  1. 第二步: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,通常会:

  1. 限制 PATH 环境变量(仅包含少量目录,默认不包含 /bin//usr/bin 等核心命令目录);
  2. 禁止使用绝对路径执行命令;
  3. 禁止修改 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 原有配置,扩展命令查找路径,让系统能直接执行这两个目录下的 lscpbash 等核心命令。 同样仅在当前终端会话生效,关闭终端或重启系统后配置丢失 。

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 命令在调用帮助文档时,会默认调用系统的「分页器程序」(通常是 lessmore)来展示长篇帮助内容,less/more 这类分页器程序内置了执行 Shell 命令的功能,可以通过该功能直接提权获取 root 权限。

简单说:sudo git help status 是通过「提权执行 git 帮助」→「调用分页器 less/more」→「利用分页器执行 Shell 命令」的链路,实现权限突破。

具体操作:

  1. 终端输入 sudo git help status,会进入 less 分页器的帮助文档展示界面(此时已处于 root 权限的分页器进程中);
  2. less 界面中,直接按下键盘上的 ! 键,此时终端会出现一个命令输入提示符;
  3. 输入 bash/bin/sh,回车后即可直接调出root 权限的完整 Shell 终端,实现提权:

在less界面中执行(按下!后输入)

!bash # 调出root bash终端(优先选择)

!/bin/sh # 若bash不可用,调出root sh终端

相关推荐
网安CILLE4 小时前
PHP四大输出语句
linux·开发语言·python·web安全·网络安全·系统安全·php
Whoami!10 小时前
❿⁄₈ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击 ➱ 破解SSH私钥的密码短语
网络安全·信息安全·密码破解原理·john the ripper
MOON404☾1 天前
006.Backdoor后门编写
网络·安全·网络安全·系统安全
信创天地1 天前
深耕金融政务核心场景:国产化数据库迁移的全流程架构设计与风险管控
运维·网络安全·系统架构·系统安全·运维开发
蜂蜜黄油呀土豆1 天前
计算机网络中的常见网络场景与问题排查
tcp/ip·计算机网络·网络安全·http请求与响应
bleach-1 天前
buuctf系列解题思路祥讲--[SUCTF 2019]CheckIn1--文件上传以及user.ini的应用
nginx·web安全·网络安全·php
视觉&物联智能1 天前
【杂谈】-人工智能在风险管理中的应用:愿景与现实的差距
人工智能·网络安全·ai·aigc·agi
Bruce_Liuxiaowei1 天前
内网探测常用技术方法整理
网络·安全·网络安全
小李独爱秋1 天前
计算机网络经典问题透视:MD5报文是什么?有什么特点?
网络·网络协议·计算机网络·网络安全·信息与通信·信号处理