En este artículo, recordamos la sintaxis del ensamblador ARM, tratamos la vulnerabilidad shellshock y también resolvemos las tareas 8 y 10 del sitio
pwnable.kr .
Información organizacionalEspecialmente para aquellos que quieran aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:
- PWN;
- criptografía (criptografía);
- tecnologías de red (Red);
- inversa (ingeniería inversa);
- esteganografía (Stegano);
- búsqueda y explotación de vulnerabilidades WEB.
Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.
Para que pueda conocer nuevos artículos, software y otra información, creé un
canal en Telegram y un
grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones
personalmente y responderé a todos .
Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados a alguien como resultado del uso de los conocimientos y métodos obtenidos como resultado de estudiar este documento.
Solución de búsqueda de piernas
Hacemos clic en el primer ícono con la pierna de la firma y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado. También proporcionan código fuente en C y ensamblador.

Descarguemos ambos archivos y clasifiquemos el código fuente en C. Mediante insertos de ensamblador podemos decir que usa la sintaxis ARM. Sobre el ensamblador ARM en Habré escribió
aquí y
aquí .

En la función main (), se recibe un número del usuario y se compara con la suma de los resultados de las tres funciones key (). Vamos a ordenarlos en orden.

Por lo tanto, el valor del registro de PC se coloca en el registro R3. En el ensamblador ARM, el registro de la PC contiene la dirección de la siguiente instrucción que se ejecutará. Nos fijamos en el código desmontado.

Por lo tanto, la función key1 () devolverá el valor 0x8ce4. Analicemos la función key2 ().

0x8d08 se coloca en R3, que luego se incrementa en 4 y se escribe en el registro R0. Es decir, key2 () devolverá 0x8d0c. Considere key3 ().

Por analogía con la primera función, concluimos que key3 () devolverá un valor del registro LR. LR contiene la dirección de retorno de la función. Veamos dónde se llama la función y tomemos la siguiente dirección.

La función key3 () devolverá 0x8d80. Conéctese a través de SSH e ingrese la suma de los tres números encontrados en el programa.


Entregamos la bandera y obtenemos dos puntos.

Shellshock aka Bashdoor
Shellshock (Bashdoor) es una vulnerabilidad de software descubierta en el programa GNU Bash que permite ejecutar comandos arbitrarios al recibir algunos valores no estándar de variables de entorno. La vulnerabilidad ha recibido el número CVE-2014-6271.
En los sistemas operativos tipo Unix, cada programa tiene variables de entorno. El proceso hijo hereda del padre una lista de variables de entorno. Además de las variables de entorno, bash también mantiene una lista interna de funciones: scripts con nombre que se pueden invocar desde un script ejecutable. Al ejecutar scripts desde otros scripts (primarios), es posible exportar los valores de las variables de entorno existentes y las definiciones de funciones. Las definiciones de funciones se exportan codificándolas en forma de nuevas variables de entorno de un formato especial, comenzando con corchetes vacíos "()", seguidos de la definición de la función como una cadena. Las nuevas instancias de bash al comienzo analizan todas las variables de entorno, detectan este formato y lo convierten nuevamente a la definición de una función interna. Por lo tanto, si un atacante tiene la capacidad de enviar una variable de entorno arbitraria para ejecutar bash, entonces aparece la capacidad de ejecutar comandos arbitrarios.
El siguiente ejemplo imprime el texto VULN.
env x='() { : ; }; echo “VULN”' bash -c “echo text”
Dado que al ejecutar el comando "echo text", se cargará la definición de función contenida en la variable de entorno x, y se ejecutará con él el comando "echo" VULN ".
Solución de trabajo Shellshock
Hacemos clic en el primer ícono con la firma shellshock, y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado.

Cuando está conectado, vemos el banner correspondiente.

Veamos qué archivos hay en el servidor y qué derechos tenemos.

Veamos el resultado del código.

De interés es la línea que llama a la función del sistema. Según el nombre, asumimos que bash, que está al lado del programa y que se llama desde el programa, es vulnerable. Por analogía con el ataque descrito en el artículo, ejecutamos el comando para leer la bandera.
/bin/cat flag
Para hacer esto, definimos una función en la variable de entorno donde colocamos este comando. Y luego ejecuta el programa.
export x="() { :; }; /bin/cat flag;"

Entregamos la bandera y obtenemos un punto más. Nos vemos en el próximo artículo.
Estamos en un canal de telegramas: un
canal en Telegramas .