当前位置: 首页 > 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.dtcms.com/a/361421.html

相关文章:

  • 贪心算法解决固定长度区间覆盖问题:最少区间数计算
  • CICD实战(2) - 使用Arbess+GitLab+SonarQube实现Java项目快速扫描/构建/部署
  • 【MySQL详解】索引、事务、锁、日志
  • 【C++上岸】C++常见面试题目--数据结构篇(第十六期)
  • 科学研究系统性思维的方法体系:数据收集
  • 11,FreeRTOS队列理论知识
  • linux内核 - ext 文件系统介绍
  • 嵌入式学习日志————I2C通信外设
  • 拥抱智能高效翻译 ——8 款视频翻译工具深度测评
  • Linux Shell 脚本中括号类型及用途
  • 【项目思维】嵌入式产业链与技术生态
  • 2025 最新React前端面试题目 (9月最新)
  • Windows Qt5.15.17源码使用VS2019编译安装
  • 六、练习3:Gitee平台操作
  • 瑞芯微RK3576平台FFmpeg硬件编解码移植及性能测试实战攻略
  • 深入掌握 Flask 配置管理:从基础到高级实战
  • 校园网IP地址要如何管理
  • MySQL基础知识保姆级教程(四)基础语句
  • 人工智能学习:NLP文本处理的基本方法
  • C++函数执行时间统计工具:轻量级性能分析的最佳实践
  • 触想轨道交通应用案例集锦(一)
  • PAT 1089 Insert or Merge
  • G156HAN04.0 宽温域高亮工业屏技术白皮书
  • 矩阵中寻找好子矩阵
  • leetcode5( 多数元素)
  • 力扣 23 912题(堆)
  • MySQL 体系结构
  • 09.《路由基础知识解析和实践》
  • 【C#实战】使用ListBox控件与生成器模式构建灵活多变的金融资产管理系统
  • 金融数据安全