Análisis forense, inyección SQL y gato sufrido: análisis de la tarea n. ° 3 de la etapa en línea NeoQUEST-2020



Hoy consideraremos la tarea más controvertida de NeoQUEST-2020 : su primera parte es un campeón en el número de participantes que la aprobaron, y la segunda parte obedeció solo a unos pocos. ¿Qué tiene él de especial? ¡Entiende el corte!


¿Alguna vez has tenido que investigar un volcado de RAM? ¿Sabes cuántas cosas interesantes puedes obtener de allí? (spoiler: todo, incluidos los resultados de la ejecución de scripts, fotos recientes, así como el historial del navegador).
¿Qué pasa con las inyecciones SQL exóticas? Carga una determinada imagen en el sitio y recibe información de una base de datos cerrada. ¿No es un delito ideal?
En la primera parte del artículo, consideraremos las herramientas para analizar el volcado de memoria y aprenderemos cómo extraer la información que necesitamos de allí, y en la segunda parte del artículo mostraremos claramente el proceso de manipulación de etiquetas de imagen para una inyección complicada :)

Entonces, la tarea es descargar el archivo, que contiene un archivo binario de 1 GB con el nombre hablado memdump.bin, según el cual podemos suponer que se trata de un volcado de RAM. Utilizaremos el marco de volatilidad para su investigación . Volatility admite varios complementos que facilitan la búsqueda y extracción del volcado de información útil para chantajear a un analista. Primero, use el comando imageinfo y obtenga información sobre el volcado:



A juzgar por el resultado del comando imageinfo, estamos lidiando con un volcado de memoria de Windows 7. A continuación, veremos la lista de procesos en ejecución en el sistema en el momento en que se eliminó el volcado utilizando el comando pslist:



en esta lista, puede ver varios procesos interesantes. Comencemos el estudio con el proceso chrome.exe: siempre puede encontrar algo intrigante en el navegador. Existen complementos adicionales para la volatilidad que automatizan la extracción de información de los procesos. Por ejemplo, el complemento chromehistory nos permitirá extraer un historial de visitas del navegador de un volcado de RAM:



en el historial de Chrome, se pueden notar varias cosas interesantes a la vez. Primero, un enlace a la segunda parte de la tarea, así como consultas de búsqueda sobre metadatos en imágenes PNG, que también es una pista para la segunda parte, pero veremos esto más adelante. En la etapa actual, nos interesan las solicitudes de un código promocional para un descuento en el sitio y los archivos pdf, lo que sugiere el objeto de nuevas búsquedas (la ejecución de Acrobat Reader`a también puede solicitarnos esto). Intentemos encontrar documentos pdf en un basurero usando el comando filescan: ¡



Buena suerte! Parece que hay algo de promo.pdf en el basurero. Intentemos extraerlo usando el comando dumpfiles:



En esta etapa, pueden surgir dificultades menores debido al hecho de que algunos visores de documentos pdf pueden no reconocer el archivo recién extraído (solo necesita eliminar los bytes adicionales al final del archivo). Pero, ¿realmente tenemos miedo de algunos bytes adicionales? :) Al final, abra el documento y vea el código QR, después de leerlo, obtenemos la bandera de la primera parte de la tarea (y al mismo tiempo el código promocional para recibir un regalo del equipo NeoQUEST - entregamos premios memorables todos los participantes que completaron al menos una tarea).



A continuación, intente obtener la segunda bandera. Regresamos al sitio, cuyo enlace se encontró en el historial del navegador. Para acceder al sitio debe ingresar un código promocional. Recordamos el historial de búsqueda en el navegador y la descripción del documento en sí (USAR ESTO PARA UNIRSE), a partir del cual podemos suponer que la primera marca es el código promocional que necesitamos. Lo ingresamos al campo y llegamos al sitio donde se nos ofrece cargar una imagen: a



juzgar por la frecuencia con la que el sitio se congela, nuestros participantes decidieron verificar experimentalmente la carga de todos los tipos posibles de documentos. Una cierta cantidad de tiempo después entendemos que solo las imágenes PNG se pueden cargar en el sitio. El siguiente acertijo es el mensaje "¡No hay suficientes datos para almacenar esta imagen, lo siento!", Que se produce cuando intenta cargar una imagen.

Volviendo al historial del navegador, recordamos las solicitudes del formulario "agregar metadatos al archivo png". Utilizando inferencias simples, llegamos a la conclusión de que, muy probablemente, se deben ingresar ciertos valores en los metadatos para cargar una imagen en un sitio. Puede comenzar explorando el formato PNG (para obtener una descripción, por ejemplo, haga clic aquí ). Primero, verifique la lista de palabras clave estándar para imágenes PNG de metadatos, por ejemplo: "Autor", "Descripción", etc. Usando, por ejemplo, la utilidad de conversión del conjunto ImageMagick, agregue metadatos a la imagen de prueba:

convert test.png -set 'Título' '1' -set 'Autor' '2' -set 'Descripción' '3' -set 'Copyright' '4 '-set' Tiempo de creación '' 5 '-set' Software '' 6 '-set' Descargo de responsabilidad '' 7 '-set 'Advertencia' '8' -set 'Fuente' '9' -set 'Comentario' '0' out.png

Intentamos subir la imagen resultante al sitio y disfrutar del éxito:



Resulta que los campos de metadatos necesarios son Título, Descripción, Autor y Copyright.
Una pista para esto, por cierto, también se puede encontrar en el volcado de memoria: puede encontrar la mención del archivo mr_cat.png usando volatilidad.



Nuestros participantes decidieron que era con la ayuda del Sr. Cat que era necesario inyectar el sitio (muchos mensajes llegaron a nuestro correo con el Sr. Cat en una apariencia comprimida, invertida, reflejada y de otra apariencia desagradable ), ¡pero el gato no tuvo nada que ver con eso! Simplemente distrae y sugiere a los participantes: bueno, mírenme, ¡hay algo interesante dentro! Dentro del vertedero, la imagen solo se conservaba parcialmente; sin embargo, en sus restos puede observar los campos de metadatos necesarios rellenados:



Adelante: ahora podemos subir archivos al sitio; sin embargo, ¿qué da y cómo buscar una bandera? Es lógico suponer que una vez que se requieren metadatos para la descarga, es posible que de alguna manera se utilicen para almacenar archivos descargados (por ejemplo, como claves en una base de datos). ¡Hurra! Nos estamos acercando al postre: necesitamos revisar el sitio para ver la posibilidad de inyección SQL. Descubrimos que si uno de los parámetros se sustituye con una comilla doble ("), el sitio nos notificará un error en lugar de cargar la imagen:



Ahora vemos la consulta SQL en sí y entendemos qué campos podemos operar para construir una inyección para extraer datos de la base de datos utilizada. En cuanto a la ubicación de la bandera, en este caso es lógico verificar la primera imagen que se ha cargado en la base de datos. Además, durante la operación de inyección, debe prestar atención al hecho de que INSERT se ejecuta en la solicitud. Esto lo obliga a construir consultas específicas, porque no puede realizar explícitamente una operación SELECT desde la misma tabla en la que está insertando al mismo tiempo que la operación de inserción (INSERT).

Hagamos una solicitud con la que extraemos la Descripción de la primera imagen en la base de datos:

convert test1.png -set 'Título' '1' -set 'Autor' '", (SELECCIONE descripción DESDE (SELECCIONAR * DESDE imagen) COMO límite x 0,1)) - -' -set 'Descripción' '3' - configure 'Copyright' '4' test.png

Cargue la imagen resultante en el sitio web y obtenga la descripción en el campo Copyright, que es una bandera: ¡



Hurra, tarea completada! Esperamos haber convencido a todos de que verifiquen la entrada del usuario por millonésima vez, y también la mantengan segura manzana de tu ojo al crear un volcado de tu RAM :)
Termina el artículo con una cita de los grandes sabios:


All Articles