如何通过红日靶场七实现从外网入口到AD接管的全链路攻击利用?

摘要:本文复盘了一次典型的多阶段内网靶场渗透过程。攻击起点是外网可访问的 Redis 2.8 未授权服务,利用其持久化落盘能力写入 SSH 公钥,直接获取 Ubuntu 跳板机 root 权限;随后通过内网信息搜集发现双网卡结构、Laravel
一、靶场相关信息 二、信息搜集 TCP 端口扫描 + 指纹识别 + 操作系统识别: sudo rustscan -a 192.168.111.20 -r 1-65535 -- -sV -O -Pn -n -oA TCP_PORTS_NAMP 输出(仅列举部分): PORT STATE SERVICE REASON VERSION 22/tcp open ssh syn-ack ttl 63 OpenSSH 7.6p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) 80/tcp open http syn-ack ttl 63 nginx 1.14.0 (Ubuntu) 81/tcp open http syn-ack ttl 63 nginx 1.14.0 (Ubuntu) 6379/tcp open redis syn-ack ttl 63 Redis key-value store 2.8.17 关机信息: OS:Ubuntu 6379 端口:年代久远,默认配置下极大概率存在未授权访问 UDP 端口扫描 + 指纹识别: sudo nmap -sV -sU --top-ports 20 192.168.111.20 -Pn -n -oA UDP_TOP20_PORTS 从扫描结果上看,端口状态要么是 closed 要么是 open|filtered,并没有提供很大价值的信息。 思路:先处理 TCP 端口,若 TCP 端口没有突破,则回到 UDP 端口,用特定的工具进行扫描。 综合上述信息,目前最优先考虑的就是 6379 端口,其次是 80 和 81 这两个 http 服务。 三、Redis 未授权访问 Redis 在 2.8 这样的老版本里: 默认监听地址是 0.0.0.0(对所有网络接口开放) 没有设置密码(requirepass 为空) protected-mode 这个保护机制是 3.2 版本以后才引入的,2.8 完全没有这个功能。 靶场环境通常不会额外加固防火墙或配置 protected-mode 是 Redis 从 3.2 版本开始引入的一个默认安全保护机制。简单说,它的作用是:当 Redis 没有设置密码(requirepass 为空),也没有明确绑定只允许本地访问(bind 127.0.0.1)的时候,就自动把外部网络的连接全部拒绝,只允许本机(localhost)连进来。 尝试无密码登入: redis-cli -h 192.168.111.20 -p 6379 登入成功: 简单做一下信息搜集,使用了下述命令: ping:用于测试是否是真的连接上了 info:Redis 版本、OS、内存、已连接客户端数等信息 client list:所有已连接客户端的 IP 和端口 config get dbfilename:当前 RDB 文件名 config get dir:当前 RDB 持久化目录 关键信息: redis_version:2.8.17 os:Linux 5.4.0-66-generic x86_64 dbfilename dump.rdb dir /root rdb_last_save_time:1775801194 rdb_last_bgsave_status:ok RDB 的持久化目录被设置成 /root,并且根据 rdb_last_save_time 和 rdb_last_bgsave_status 可以推断出它不仅指定了该目录,还成功写进去了。 而我们知道,/root 目录的权限是 700,即只有 root 用户才有写权限。 因此,我们可以确认,当前的 Redis 是 root 权限下运行的。 根据之前端口扫描看到的 22 端口开放,于是通过 redis 写入 ssh 公钥 $\to$ ssh 连接就是目前的首要目标。
阅读全文