¿Qué es una vulnerabilidad de cadena de formato?
Para entender lo que una vulnerabilidad de cadena de formato, es decir, primero tiene que saber qué es una cadena de formato. Una cadena de formato es una forma de decir que el compilador de C cómo debe al formato de los números que les imprime.
Formato de cadenas en C
En el lenguaje de programación C hay una serie de funciones que aceptan un formato de cadena como argumento. Estas funciones incluyen fprintf, printf, sprintf, snprintf, vfprintf, vprintf, vsprintf, vsnprintf, setproctitle, syslog, y otros.
El más común de ellas es printf. El uso de printf es:
printf formato [argumentos ...]
printf el valor de los productos [argumentos ...] en el formato especificado por el formato.
Un ejemplo de llamada a printf es el siguiente:
printf ( "El código de área es:% d \ n", 303);
Especificadores de formato varían de un compilador de C para la siguiente. El formato especificadores soportadas bajo FreeBSD son:
% d Convertir entero a cadena firmado decimales. % u Convertir entero a cadena decimal sin firmar. % i Convertir entero a cadena decimal firmado, el entero puede ser en decimal, en octal (con un 0) o en hexadecimal (0x con una de las principales). % o Convertir entero a unsigned octal cadena. o% x% X Convertir entero a cadena hexadecimal sin firmar, con dígitos 0123456789abcdef `` x''para''y `` 0123456789ABCDEF para X). % c Convertir entero a los caracteres Unicode que representa. % s Ninguna conversión, sólo insertar la cadena. % f Convertir número de coma flotante a decimal firmado cadena de la forma xx.yyy, donde el número de y es determinada por la precisión (por defecto: 6). Si la precisión es 0, entonces no es el punto decimal de salida. e% o% E Convertir número de coma flotante a notación científica en forma x.yyye +-zz, donde el número de y es determinada por la precisión (por defecto: 6). Si la precisión es 0, entonces no es el punto decimal de salida. Si el formulario E se utiliza entonces E se ha impreso en lugar de e. % go% G Si el exponente es menor que -4 o mayor o igual a la precisión, a continuación, convertir el número de coma flotante como para e%% o E. Otra cosa que para convertir% f. Trailing ceros y un punto decimal rezagados se omiten. %% Ninguna conversión: basta con insertar%.
Para más información acerca de especificadores de formato, consulte la página de manual de "formato" de su más cercano sistema Unix.
Cadena de formato vulnerabilidad ataques
Vulnerabilidad de cadena de formato ataques se dividen en tres categorías: la denegación de servicio, la lectura y la escritura.
- Vulnerabilidad de cadena de formato ataques de denegación de servicio se caracterizan por la utilización de múltiples instancias de la especificador% s formato para leer datos de la pila hasta que el programa intenta leer datos desde una dirección ilegal, lo que hará que el programa se cuelgue.
- Vulnerabilidad de cadena de formato de lectura ataques suelen utilizar el formato% x especificador para imprimir las secciones de la memoria que normalmente no tienen acceso.
- Vulnerabilidad de cadena de formato escrito utilizar los ataques% d,% u% x o especificadores de formato para sobrescribir el puntero de instrucción y la fuerza de ejecución de usuario suministrado por el código de shell.
Otras fuentes de información sobre vulnerabilidades Cadena de formato
Para obtener más información sobre la explotación de vulnerabilidades de cadena de formato, consulte la Cadena de formato Explotación de Vulnerabilidades por SCUT, y Cadena de formato ataques por Tim Newsham.
Aprenda a prevenir la cadena de formato vulnerabilidades en su código fuente con estos excelentes libros sobre programación segura en Amazon.com
|


