一、环境搭建启动 DC2 虚拟机将网络配置在 Kali 同网段下即可。二、局域网信息收集1. 查询 Kali 所处网段2. 扫描网段内主机因为不知道靶机 IP使用 nmap 扫描该网段下所有主机号nmap -sV 192.168.71.0/24推测 192.168.71.147 为目标靶机 IP因为其具有唯一开放端口。3. 全端口扫描探测目标端口nmap -A -p- -v 192.168.71.147发现开放了 80 端口 Web 服务、7744 端口 SSH 服务。4. 访问 Web 服务并配置本地 DNS 解析尝试访问 Web 服务输入 IP 访问后会发现访问失败且 IP 会转变为域名 dc-2。这是因为靶机强制将 IP 访问重定向到域名 dc-2但 Kali 无法解析该域名导致请求卡死在半路。所以我们需要在 Kali 攻击机上配置本地 DNS 解析让系统知道 dc-2 对应 192.168.71.147。使用 root 权限修改 /etc/hosts 文件添加靶机 IP 到域名 dc-2 的指向sudo vim /etc/hosts添加后 wq 保存。5. 访问站点并获取 Flag1修改后重新访问成功找到 flag1同时发现这是一个 WordPress 站点6. 目录扫描使用 dirsearch 扫描网站目录dirsearch -u http://dc-2/ -e * -x 403 404参数说明-u接网站地址。-e后接语言可选 php、asp、*表示全部语言等。-x表示过滤的状态码扫描出来后不显示该状态。7. 发现登录页面成功扫描到一个登录页面进入后尝试登录发现会跳出用户名状态接下来就可以尝试先进行用户名枚举再进行密码爆破。三、Web 端渗透1. 使用 Cewl 生成字典Flag1 提示一般字典很难成功尝试使用 cewl 工具爬取目标网站信息生成相对应的字典cewl http://dc-2/ -w ./dict.txt生成在当前目录下为 dict.txt 文件2. 使用 Wpscan 扫描与枚举用户前面提到这是一个 WordPress 站所以我们使用针对 WordPress 站的工具 Wpscan 进行扫描、用户名枚举爆破。获取版本信息wpscan --url http://dc-2扫描可以发现以下关键信息目标 IP192.168.71.147Web 服务Apache/2.4.10 (Debian)WordPress 版本4.7.102018 年老版本大量历史漏洞高危XMLRPC 接口开启可以暴力枚举用户名 密码爆破WP 经典爆破点扫描插件wpscan --url http://dc-2 --enumerate p枚举用户wpscan --url http://dc-2 --enumerate u成功枚举出三个用户名admin、jerry、tom。3. 暴力爆破密码这里仍然使用 wpscan用刚刚 cewl 生成的字典进行爆破。将刚刚枚举出来的三个用户名保存到目录下 uname.txt同时将前面保存的密码字典也放到同一个文件夹方便使用在当前目录下打开终端输入命令wpscan --url http://dc-2 -U ./uname.txt -P ./dict.txt突破成功爆破出 jerry、tom 的密码4. 登录后台获取 Flag2登录 jerry 账户成功找到 flag2Flag2 提示我们 WordPress 不能拿 shell但是可以找另一个入口就是前面发现的 7744 端口 SSH 服务。四、SSH 主机端渗透1. 尝试登录 SSH使用 jerry 无法登录使用 tom 登录中间弹出警告无脑 yes 就行输入密码后成功登录使用命令发现有 rbash 限制rbash 是受限的 bash shell对用户的操作做了诸多限制比如不能使用 cd 命令改变目录、不能随意修改环境变量、限制导入功能等目的是提升系统安全性限制用户在系统中的操作范围。2. 查看 Flag3成功用 vi 查看了 flag3vi flag3.txt可怜的老汤姆总是追着杰瑞跑。也许他应该为他造成的所有压力感到自豪。su 命令提示五、rbash 逃逸Linux 提权1. 查看受限命令rbash 限制只能运行 PATH 环境变量里指定目录下的命令而不能自己去修改 PATH。所以我们要查看 rbash 限制后可使用的命令。echo 是 Shell 内置命令rbash 无法禁止内置命令所以我们通过 echo 查看echo $PATH查看得到 PATH 路径的所有文件echo /home/tom/usr/bin/*可以发现只能使用 less、ls、scp、vi 这四个命令。因为 ls 没有禁用也可以直接使用 ls $PATH2. 使用 vi 逃逸 rbash使用 vi 设置 shell设置环境变量添加命令。先进入 vi 编辑器界面vi原理启动一个独立的编辑器进程/usr/bin/vi该进程不受父进程 rbash 的约束且具备调用外部命令的能力。然后按 Esc 键输入:set shell/bin/bash原理修改 vi 内部变量 shell指定后续执行外部命令时使用的解释器路径为完全功能的 /bin/bash而非受限的 /bin/rbash。回车后接着输入:shell原理触发 vi 调用 fork() 创建子进程并 exec() 执行预设的 /bin/bash生成一个全新的、无任何 rbash 限制的交互式 shell 环境。当看见退出了 vi 编辑器就说明成功了接着执行命令我们看一下权限实际已进入新的 bash已经升级为 bash 了无法执行 cat 命令是因为环境变量的问题用以下命令添加两条路径即可export PATH$PATH:/bin/ export PATH$PATH:/usr/bin/原理扩展环境变量 PATH将系统标准命令目录/bin、/usr/bin加入搜索路径使当前自由 bash 能够定位并执行常用工具摆脱对受限目录的依赖。3. 切换用户获取 Flag4此时我们成功绕过 rbash 限制通过前面 flag3 提示我们可以使用 su 命令切换 jerry 用户su jerry输入密码成功登录到 jerry 用户。使用命令在当前账户下成功找到 flag4提示我们需要使用 git 来提权。六、Git 提权1. 查看 sudo 权限执行 sudo -l发现 git 能使用 root 的权限sudo -lsudo -l 是 Linux 系统中用于列举当前用户被授权的 sudo 权限列表的命令。执行后会显示该用户能以哪些身份如 (ALL)执行哪些具体命令以及是否需要密码NOPASSWD 表示无需密码。该命令是权限提升Privilege Escalation枚举阶段的核心侦查手段用于快速识别系统中是否存在可被滥用的特权程序为后续利用提供明确方向。2. 利用 git help 提权sudo git help config原理以 root 权限启动 git 进程并调用其内置的 help 子命令该命令会默认调用系统寻呼器如 less来显示帮助文档从而衍生出一个特权子进程。回车进入寻呼器界面后输入!/bin/bash原理在 less 寻呼器中! 命令用于执行外部 Shell 命令由于当前 less 进程继承自 root 权限的 git 父进程此处新启的 /bin/bash 将拥有 root 身份实现提权。3. 获取最终 Flag提权成功找到 root 根目录下的 flag通关 DC2