martes, 3 de marzo de 2020

Envia REQUESTS!!!


Cuando necesitemos enviar un fichero a un servidor web utilizando para ello un parámetro de un formulario (método POST), mediante código Python, podremos utilizar la librería: requests.

Para ello utilizaremos el siguiente código

url = <url del servidor web que tratara el formulario enviado>
filess = { ‘<nombre del parámetro utilizado para enviar el fichero>’ : (‘<nombre del fichero’, open(‘<nombre del archivo>’, ‘rb’))}
r = requests.post (url, files=filess)

Para muestra un botón:


En cualquier caso…

Lo que hagas con la información es cosa tuya, no mía... pero ten conciencia.


lunes, 10 de febrero de 2020

Si se puede jugadores.


Supongamos que trabajando desde una máquina virtual basada en Kali Linux y conectados a través del protocolo SMB a una máquina Windows, te encuentras con un archivo que utiliza ADS (Alternate Data Stream) para ocultar información.

¿Qué se hace para ver el contenido de ese ADS desde Linux?

Permitidme hacer un inciso en este punto, para dar una pincelada a este, tan trillado, asunto.

¿Qué son los “Alternate Data Stream”?

Los Flujos Alternativos de Datos, Alternate Data Streams o ADS son una característica del sistema de archivos NTFS que permite almacenar metainformación con un fichero, sin necesidad de usar un fichero separado para almacenarla.

Más información:

·         https://es.wikipedia.org/wiki/Alternate_Data_Streams
·         https://www.securityartwork.es/2015/02/23/alternate-data-stream-ads-flujo-de-datos-alternativos-en-ntfs/

¿Cómo se visualiza desde un entorno Windows?

Dir /R <fichero>

NOTA: Otra forma de detectar la presencia de un archivo con está característica es copiar un archivo con ADS a un sistema que no tenga capacidad para gestionar archivos con ADS, como por ejemplo los antiguos sistemas de ficheros FAT y FAT32

Volviendo al asunto principal y contestando a la pregunta anteriormente formulada

Hay dos posibles opciones:

1.- Montar el recurso mediante el comando: mount –t ntfs <todo lo demás>
     
NOTA: En mi caso no ha funcionado debido a que el punto a montar es un recurso compartido, y aunque hay mucha gente preguntando por Internet, no he podido conseguir información sobre la resolución de dicho problema.

Es decir:

mount –t ntfs //<IP>/<recurso compartido>  /mnt/<ubicación local>

¡¡¡PROVOCA UN ERROR!!!

 
2.- Utilizar el comando: smbclient

En este caso, podemos comprobar si un archivo esconde un ADS, mediante el siguiente uso de:

Smbclient  [-U <usuario>] //<IP>/<recurso compartido> -c ‘allinfo “<nombre de archivo y path desde la raíz del recurso compartido>”’ [<contraseña>]

Como se puede apreciar, el archivo contiene 15 bytes de información ocultos de miradas indiscretas

Si además queremos obtener la información contenida en ese ADS, entonces toca hacer lo siguiente:

Smbclient  [-U <usuario>] //<IP>/<recurso compartido> -c ‘allinfo “<nombre de archivo y path desde la raíz del recurso compartido>”; get “<nombre de archivo y path desde la raíz del recurso compartido>”  “archivo local”’ [<contraseña>]

Descarga del contenido del ADS.

Dentro del <archivo local>, podremos ver la información almacenada en ese ADS


En cualquier caso…

Lo que hagas con la información es cosa tuya, no mía... pero ten conciencia.

lunes, 20 de enero de 2020

Get The F*** !!!!!!!


En una de las últimas máquinas que he realizado en el entono HTB (Hack the Box), para escalar privilegios tuve que utilizar un GTFOBins, pero… ¿qué es esto?

Pues son funciones legítimas del sistema que pueden ser explotadas para evitar las restricciones de seguridad que nos haya impuesto el sistema.

Estas GTFOBins son  en *NIX a lo que las LOLBAS (Living Off The Land Binaries and Scripts) en el entorno Windows.


En ambos casos existen sendos proyectos que permiten listar las funciones a explotar (Windows y *NIX)

Ahora, ¿cómo lo averigüe?

Para averiguar si dentro de un entorno, existe un GTFOBins, personalmente lo primero que hago es revisar los permisos que tiene un usuario para elevar privilegios mediante el comando: sudo. Para lo cual, simplemente tenemos que ejecutar la opción del comando: sudo –l




Lo que vemos significa que nuestro usuario al ejecutar el comando: sudo /bin/nano /opt/priv, lo hará como usuario “root”.

Ahora, con dicha información, sólo tenemos que buscar en el proyecto mencionado anteriormente como realizar la escalada de privilegios a través del comando: nano, y seleccionar su opción: sudo

En nuestro caso:

               
Es decir, ejecutaremos el comando: sudo /bin/nano /opt/priv, y cuando podamos editar el documento, pulsaremos CONTROL+R y CONTROL+X. En el recuadro que aparecerá, podremos introducir la cadena: reset; sh 1>&0 2>&0, lo cual nos mostrará una línea de comandos en donde los comandos se ejecutará como ROOT.

En cualquier caso…

Lo que hagas con la información es cosa tuya, no mía... pero ten conciencia.

miércoles, 18 de diciembre de 2019

En busca de mis dorados IOC's


Hace tiempo me enfrente a una campaña de Emotet, más concretamente a sus “downloaders”, como mucha gente.

Mi desesperación fue en aumento por gastar tanto tiempo en su análisis, y más allá cuando de repente su funcionamiento cambio y ya no podía manipular sus macros al ejecutar los archivos Word (.doc) en un entorno controlado, por que se eliminaban tras la primera ejecución.

NOTA: Me gusta entender lo que ejecuto, es mi forma de seguir aprendiendo.

Ya sólo me quedaba realizar un análisis estático de los mismos.

Esto siempre lo realizo mediante la apertura de los archivos como si fuera archivos comprimidos, aunque realmente son eso.

El problema que me encontré es que la información visualizada no mostraba el código Visual Basic de la macro y por lo tanto su análisis era imposible.

Así que se me ocurrió fue usar un editor hexadecimal para ver directamente su contenido, y ahí, ¡vi la luz!.

Visualización del archivo downloader de Emotet


Pude observar la existencia de un conjunto de caracteres de sumo interés


Cadena de caracteres encontrado

Se continúo mirando hasta que se llego al final de los caracteres.


Y se pudo ver que se trataba de una cadena codificada en base64

Por lo tanto lo único que sé tuvo que hacer fue extraer y eliminar el patrón, pero ¿qué patrón?

Si nos fijamos bien vemos que el patrón es: _!j@ , pero aún más … podemos decir que se aplica tres veces.

Veamos esto último, para ello cojamos del siguiente tramo de caracteres mostrado


Más concretamente los caracteres: 6_!_!j@_!j@j@A

Si  quitamos el patrón, la cadena nos queda: 6_!_!j@j@A , si quitamos de nuevo el patrón, la cadena nos queda: 6_!j@A y si lo quitamos de nuevo, la cadena nos queda: 6A

Es por esto, por lo que se ha comentado que el patrón se repite hasta 3 veces.

Sabiendo esto, se paso a extraer los comentados caracteres y eliminar el patrón tantas veces como sea necesario mediante la automatización. Para ello se elaboro la siguiente secuencia de comandos de bash:


Que permitió obtener el siguiente resultado:


Si nos fijamos bien, se trata de un script que guarda entre otras cosas la variable: Lxbvplwvfufaj, cuyo contenido es una serie de URLs


A través de estas URLs se pudo conseguir muestras para su análisis, y así configurar distintos IOCs para los sistemas de seguridad.

En cualquier caso …

Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.