1128 字
6 分钟
vulnhub靶机-Empire:Breakout(Web应用历史漏洞+rpc用户枚举+Capabilities能力权限识别利用)
vulnhub靶机-Empire (Web应用历史漏洞+rpc用户枚举+Capabilities能力权限识别利用)
声明
- 本文为个人跟随b站up主红队笔记学习vulnhub的breakout靶机的复现通关记录,旨在分享靶机和记录学习心得体会,讲解若有谬误之处欢迎指正。
- 该靶机下载地址为’https://www.vulnhub.com/entry/empire-breakout,751/’
- 本博客封面的猫猫在睡觉,没有死掉。
渗透流程
- 在vmware部署靶机并开机后,打开kali对靶机进行信息收集,找到80、139、445、10000、20000端口开放。

- 详细扫描,139、445是samba服务,10000、20000是miniserv,是Webmin的核心组件之一。

- 在漏扫中,发现一个cve2006-3392漏洞。

- 搜索漏洞并下载利用脚本。

- 按照example给出的示例,执行攻击,第一次返回显示需要通过https,修改后执行依旧不行。

- 在80端口源代码最下面找到了段brainfuck语言。

- 利用在线网站或工具进行解密,得到字符
.2uqPEfj3D<P'a-3,可能是一个凭据。
- 打开10000端口的webmin,猜测用户名失败,考虑到有开启samba服务,通过
smbclient -L 目标IP -N列出目标机器共享资源,有IPC$,然后利用139/445端口的Samba服务进行RID枚举,有很多方法,文中先演示自动化的enum4linux(执行enum4linux <host>爆破出cyber用户),其余方法在文末会有补充。
- 分别尝试10000端口和20000端口的webmin和usermin,usermin通过刚才用户和凭据成功登录,可以看到左下角有个命令提示符的标识。

- 那么在攻击机器打开监听,通过bash反弹一个shell给我们的攻击机器。

提权过程
- 进行初步探测,没有sudo命令,当前目录有个tar权限很高。

- 使用
getcap -r / 2>/dev/null查看在Linux系统中递归搜索所有设置了文件能力(capabilities)的文件,得到结果有/home/cyber/tar cap_dac_read_search=ep。 - 在通过
find / -type f \( -name "*.bak" -o -name "*pass*" \) -print 2>/dev/null寻找敏感文件时,发现一个密码备份文件。
- 这时候我们可以考虑用tar的
cap_dac_read_search=ep能力:“可以无视文件访问控制列表(ACL)中的标准读权限限制,去读取系统上的任何文件”,去读取该备份文件(以下命令即利用该能力打包一个无权读的文件)
- 利用发现的密码,通过su,成功切换到root。

- 拿到root后,可以通过“清除命令历史
history -c清空当前shell的历史记录。以及unset HISTSIZE让后续操作不再被记录。并删除掉创建的文件,以及通过sed -i '/cyber.*su.*root/d' /var/log/auth.log清除篡改系统认证日志,来尽可能清除痕迹。
其它补充与收获总结
- Linux Capabilities 是将传统root权限拆分为独立的细粒度权限单元的机制,用于按需授权和提升系统安全性。如SUID或者sudo将root的完全权限直接给了程序,风险自然很高。而Capability机制则是把权限细分给程序,比如只给它读文件的权限,如本靶机只给程序
cap_dac_read_search=ep能力(不过不合理的分配还是导致了风险)。更详细可参考相关文章描述:‘https://www.cnblogs.com/sparkdev/p/11417781.html’ - 找到一篇应该是红队笔记的writeup,关于rpc用户枚举十分详细的介绍’https://xz.aliyun.com/news/91407’,包括其它工具的尝试,其中同样可以成功的比如rpcclient手动交叉查询,利用Samba混合环境的身份映射机制,通过POSIX的UID与SID的交叉查询来撞出用户名,简单步骤如下:
- 通过rpcclient连接收集环境信息:使用enumdomains命令枚举域,在此环境中得到了BREAKOUT和内置域Builtin。并用lookupdomain查询这两个域,获得它们的SID前缀,确认了Samba的身份映射机制。
- 查已知UID的映射:用
lookupnames root获取内置root用户映射出的SID格式。 - 尝试撞真实用户:按POSIX规范(普通用户UID从1000开始),构造的sid并用
lookupsids S-1-5-21-xxxxx-1000查询UID 1000对应的名称时成功将RID 1000返回了Linux的真实用户名cyber。
- UID、RID、SID区分:
- windows的SID格式如:S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-RID(RID为区分用户的值,其它在同个域内固定不变)。
- Linux的UID(一个非负整数,其分配遵循POSIX惯例):root:0,1-999为系统用户/预留用户,1000+为普通用户/交互式用户。
vulnhub靶机-Empire:Breakout(Web应用历史漏洞+rpc用户枚举+Capabilities能力权限识别利用)
https://www.dxowo8.top/posts/post-29/29/ 部分信息可能已经过时







