Ponte a prueba…
2009 January 23
Os dejo aqui el examen que he puesto esta tarde a los alumnos del curso FTSAI, en la parte del 3er modulo, el de seguridad web. Las respuestas son bastante abiertas en algunos casos y aqui pongo la respuesta que escribiria si el examinado fuese yo.
- Explica las diferencias entre Remote File Inclusion y Local File Inclusion (1 punto)
Ambos fallos ocurren cuando se recibe un parametro por la URL que se usa para abrir un fichero, ya sea como nombre de fichero, ruta completa o parte de la ruta. En el Remote File Inclusion permite la inclusion de un fichero externo que sera interpretado como codigo ejecutable en el servidor afectado. Para que funcione en PHP debe de estar activada la opcion allow_url_fopen en el fichero de configuracion php.ini. Para el Local File Inclusion debemos de conocer la ruta en la que se esta ejecutando el script para poder usar rutas relativas y subir tantos directorios como necesitemos mediante ../ o, si el script lo permite, usar rutas directas como /etc/shadow. - ¿Cómo saltarías un filtro que estuviese eliminando las comillas simples y los espacios a la hora de insertar un SQL Injection? (1 punto)
Por partes. La restriccion de las comillas se saltaria de las funciones CHAR() de los distintos motores de base de datos, que permiten generar cadenas de texto sin necesidad de usar las comillas simples. El problema de los espacios se solventaria usando el comentario multilinea (/**/) entre cada comando y parametro de la sentencia SQL; el motor de base de datos lo interpreta como una separacion entre cadenas y no necesitamos escribir el espacio. - Describe todos los tipos de SQL Injection que conozcas. (2 puntos)
- SQL Injection – El SQL “normal”, usando la funcion UNION y seleccionando los campos deseados de la tabla objetivo
- SQL Injection en base a errores – Provocando errores en el motor de base de datos para poder sacar informacion referente a su estructura
- Blind SQL Injection – Generando sentencias verdaderas o falsas y que provocan cambios visibles en la pagina de respuesta.
- SQL Injection en base a tiempos – Igual que el Blind SQL Injection pero usando funciones propias de los motores de bases de datos para detectar cuando una sentencia es verdadera o falsa.
- SQL Injection con consultas pesadas – Igual que el SQL Injection en base a tiempos pero generando consultas muy complejas que le tomen mucho tiempo de calculo al motor de base de datos.
- Crea dos listas, la de los caracteres que consideras importantes en SQL Injection y otra para LDAP Injection (1 punto)
SQL Injection: ‘ ” (espacio) ; / * + – # %
LDAP Injection: ( ) & | = * - Define, con tus propias palabras, que significa la reducción del juego de caracteres en SQL Injection y LDAP Injection. Pon ejemplos de cada uno. (1 punto)
La reduccion del juego de caracteres consiste en usar los caracteres de comodin de cada uno de los lenguajes anteriormente mencionados (% para SQL Injection y * para LDAP Injection) para comprobar la presencia de un caracter concreto en alguna posicion del campo seleccionado. Si la respuesta es falsa podemos eliminar ese caracter del resto de peticiones que hagamos, pues nunca va a aparecer.
SQL Injection: AND SELECT clave FROM usuarios WHERE usuario = ‘%h%’
LDAP Injection: *)(uid=*b*) - Explica como asegurarías la infraestructura de tu aplicación web de red social en base a la configuración de las sesiones.(2 puntos)
Para asegurar la configuracion de las sesiones de mi aplicacion web recurriria a varios metodos. Para empezar haria uso de las configuraciones de las cookies de sesion, estableciendolas como seguras y marcandolas como httpOnly. Tambien tendria en cuenta el host y el path, limitando la accion de las cookies a las zonas necesarias (como en una zona privada, por ejemplo).
Para evitar el tema de CSRF me preocuparia de establecer la comprobacion de que las peticiones importantes (como las dese realizasen por POST y se comprobasen las cabeceras Referer. Sim embargo, y para que fuese imposible realizar un ataque de este tipo, generaria un Id unico de operacion por sesion de usuario que comprobaria al recibir las peticiones del usuario para determinar si son legitimas o no. - Imagina que al introducir la cadena ‘asdf’ en un buscador en la página de resultado nos encontramos el siguiente código:
<body title=”Search result asdf”>
¿Cómo ejecutarías una ventana de alerta sabiendo que el servidor ejecuta PHP, tiene las magic_quotes activadas y no permite la inserción de los caracteres < y >? Explícalo con tus palabras y escribe como quedaría exactamente el código resultante de la inyección de XSS. (1 punto)
La sentencia que introduciria en el buscado seria: ” onload=alert(document.domain); asdf= lo cual generaria un alert con el nombre del dominio. El codigo que se generaria al final en la pagina seria: <body title=”Search result \” onload=alert(document.domain); asdf=”> - Cuéntame cual es la prueba de Bright-Shadows.net que más te ha gustado y como la has superado. (Nota: No valen, evidentemente, ninguna de las explicadas en clase) (1 punto)
Esta, evidentemente, es una respuesta personal. A mi, una de las que mas me gusto, una vez superadas, fue la prueba RHC 5. La manera de superarla tampoco la voy a poner, infringiria las normas de la pagina y la etica personal.
¿Dificil? ¿Facil? ¿Ni idea? ¿Que nota crees que sacarias? Bueno, espero que al menos al leer las preguntas y las respuestas algo aprenda la gente. Y si quieres examinarte de verdad la proxima edicion del FTSAI sera en Zaragoza
Hombre, leyendo ahora las respuestas me parecen todas “fáciles”, pero estoy seguro que si hubiera echo el examen hubiera suspendido xD
Muy interesante, un saludo!