Hack The Box. Tutorial de JSON. Vulnerabilidad en Json.Net y LPE a trav茅s de SeImpersonatePrivilege

imagen

Sigo publicando soluciones enviadas para su posterior procesamiento desde el sitio de HackTheBox . Espero que esto ayude al menos a alguien a desarrollarse en el campo de la seguridad de la informaci贸n. En este art铆culo, aprovechamos una vulnerabilidad en Json.Net y vemos c贸mo aumentar nuestros privilegios a SYSTEM si tenemos el privilegio SeImpersonatePrivilege.

La conexi贸n al laboratorio es a trav茅s de VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde los datos importantes para usted est茅n disponibles, ya que ingresa a una red privada con personas que saben algo en el campo de la seguridad de la informaci贸n :)

Informaci贸n organizacional
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Servicio de inteligencia


Esta m谩quina tiene una direcci贸n IP 10.10.10.158, que agrego a / etc / hosts.

10.10.10.158    json.htb

Primero, escaneamos puertos abiertos. Como lleva mucho tiempo escanear todos los puertos con nmap, primero har茅 esto con masscan. Escaneamos todos los puertos TCP y UDP desde la interfaz tun0 a una velocidad de 500 paquetes por segundo.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.158 --rate=500

imagen

A continuaci贸n, debe recopilar m谩s informaci贸n sobre los puertos conocidos. Para hacer esto, use nmap con la opci贸n -A.

nmap json.htb -p49156,49154,49152,47001,80,137,49153,139,49155,135,445,49158,5985,6666,21

imagen

Ahora, para obtener informaci贸n m谩s detallada sobre los servicios que operan en los puertos, realizaremos un an谩lisis con la opci贸n -A.

nmap -A json.htb -p80,139,135,445,5985,6666,21

imagen

Vamos a ver qu茅 hay en la web. Como resultado, la p谩gina se carga, y solo entonces nos lanza a la p谩gina de autorizaci贸n.

imagen

Podr铆amos evitar esto, pero admin: admin nos permite iniciar sesi贸n.

imagen

No hay nada interesante en el sitio en s铆, y en los intentos de encontrar al menos algo, nos aferramos a las cookies.

imagen

Decode Base64.

echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo

imagen

Es decir, el valor de la contrase帽a es MD5 de la contrase帽a de administrador.

imagen

Adem谩s, nada interesante. Al abrir Burp e interceptar la solicitud, puede encontrar un encabezado HTTP interesante.

imagen

Y en esta etapa, colgu茅 hasta que me dijeron que "rompiera el significado". Obviamente, en tales casos, debe cometer errores y observar la reacci贸n de la API en tres estados: verdadero, falso y error. Pero por alguna raz贸n me lo perd铆.

Punto de entrada


Y luego se descubri贸 que si los datos rotos se transmiten en un encabezado HTTP extra帽o (eliminar algunos de los caracteres), entonces el servidor da errores. A continuaci贸n se muestran los datos que el servidor devuelve con un valor de encabezado normal y con uno a cuatro caracteres eliminados.

imagen

Obtenemos un error interesante en el 煤ltimo caso. Como el objeto JSON est谩 desactivado , podemos explotar esto usando ysoserial . Utilizaremos el gadget ObjectDataProvider para Json.Net y ejecutaremos el comando ping para verificar el supuesto de vulnerabilidad.

imagen

Ahora habilite tcpdump con un filtro de protocolo ICMP para atrapar ping.

imagen

Al interceptar una solicitud, cambiamos el encabezado.

imagen

Y obtenemos el ping que se orden贸.

imagen

USUARIO


Ahora debe hacer lo mismo con el medidor de carga. Primero, generamos una carga y abrimos un oyente.

imagen

imagen

Ahora abra el servidor SMB local desde el que se iniciar谩 la carga.

imagen

Ahora nuevamente serializamos los datos necesarios, como un comando lanzamos nuestra carga desde nuestro servidor.

imagen

Vemos una conexi贸n exitosa al servidor SMB y una sesi贸n de Meterpreter cargada con 茅xito.

imagen

imagen

Y lea el archivo del usuario.

RA脥Z


En primer lugar, buscamos informaci贸n sobre el usuario con el que trabajamos.

imagen

El usuario tiene habilitado el privilegio SeImpersonatePrivilege (el derecho "Suplantar al cliente despu茅s de la autenticaci贸n"). Como dice Microsoft :
Asignar a un usuario el derecho "Suplantar a un cliente despu茅s de la autenticaci贸n" permite que los programas iniciados en nombre de este usuario se hagan pasar por un cliente. El uso de este par谩metro evita que servidores no autorizados se hagan pasar por clientes que se conectan a estos servidores mediante procedimientos RPC o canalizaciones con nombre.
El hecho es que podemos elevar nuestros derechos a SYSTEM. Un estudio completo se puede encontrar aqu铆 . Los siguientes privilegios se ven afectados por esta vulnerabilidad:

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • Setcbprivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

Generemos otra carga y ejecutemos un oyente para ello.

imagen

imagen

Para la operaci贸n usaremos Juicy Potato . Pero como par谩metro, debe especificar el CLSID de la cuenta para el sistema de destino, tambi茅n lo tomaremos del repositorio . Pero primero, veamos qu茅 tipo de sistema.

imagen

Y ahora miramos el CLSID.

imagen

Sube los archivos al host de destino.

imagen

Ahora ejecute Juicy Potato e ind铆quele con qu茅 se crear谩 el proceso (CreateProcessWithTokenW o CreateProcessAsUser, par谩metro -t), archivo de proceso (-p), puerto de escucha (-l) y CLSID (-c).

imagen

El proceso se ha creado con 茅xito, y vemos la sesi贸n de metterpreter creada.

imagen

Y obtenemos la cuenta SYSTEM.

Puedes unirte a nosotros en Telegram. Formemos una comunidad en la que haya personas con conocimientos en muchas 谩reas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la informaci贸n y TI.

All Articles