Cómo explotar vulnerabilidades de cadena de formato

Introducción

En los artículos anteriores, discutimos las funciones de impresión, las cadenas de formato y las vulnerabilidades de cadenas de formato. Este artículo proporciona una descripción general de cómo se pueden explotar las vulnerabilidades de cadenas de formato. En este artículo, comenzaremos resolviendo un desafío simple para filtrar un secreto de la memoria. En el siguiente artículo, discutiremos otro ejemplo, donde encadenaremos una vulnerabilidad de cadena de formato y una vulnerabilidad de desbordamiento de búfer para crear un mejor impacto.

¿Cómo se pueden explotar las vulnerabilidades de formato de cadena?

Como se mencionó en el artículo anterior, a continuación se presentan algunos de los ataques posibles utilizando vulnerabilidades de cadena de formato.

  • Fuga de secretos
  • Denegación de Servicio
  • Fugas de direcciones de memoria
  • Sobrescribir las direcciones de memoria

En este artículo, vamos a discutir los dos primeros elementos.

Filtrando secretos de la pila

El siguiente es el programa vulnerable que usaremos para comprender el enfoque para explotar una vulnerabilidad de cadena de formato simple para poder leer datos de la memoria.

# incluye <stdio.h>

int main (int argc, char * argv) {

char * secret = «[email protected]»;

printf (argv);

}

Como podemos observar, el programa es vulnerable a la vulnerabilidad de cadena de formato ya que la función printf recibe la entrada del usuario y la imprime. Debe tenerse en cuenta que no se utiliza ningún especificador de formato en la función printf, lo que deja al programa vulnerable.

Vamos a ejecutar el programa usando gdb, compruebe el desmontaje de la función principal y establecer un punto de interrupción en la dirección de printf llamada.

gd gdb ./ vulnerable

gef➤ disass main

Volcado de código de ensamblador para la función principal:

0x00000000000401136 <+0>: endbr64

0x0000000000040113a <+4>: push rbp

0x000000000040113b <+5>: mov rbp,rsp

0x0000000000040113e <+8>: sub rsp,0x20

0x0000000000401142 <+12>: mov DWORD PTR ,edi

0x0000000000401145 <+15>: mov QWORD PTR ,rsi

0x0000000000401149 <+19>: lea rax, # 0x402004

0x0000000000401150 <+26>: mov QWORD PTR ,rax

0x0000000000401154 <+30>: mov rax,QWORD (Read more…)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.