Hackear un Sitio Web
Claudio
Seguridad WEB La seguridad Web NO es una característica, SON ACCIONES
Equipo de trabajo
Gran Hacker
Seguridad WEB Un problema en constante crecimiento
Seguridad WEB La seguridad debe de ser considerada todo el tiempo de desarrollo
Seguridad WEB Tipos de Ataques
SQL Injection
Primeros Pasos 1.Valores tipo ?id=3 indentificar 2.Concer columnas “-1 UNION SELECT ALL 1,2,3” 3.Versión Myslq “-1 UNION SELECT ALL 1, 4.Nombre Base “-1 UNION SELECT ALL 1,group_concat(table_name),3+from+information _schema.tables+where+table_schema=database( )”
SQL Injection Manos a la obra
SQL Injection 6.Final nombre de usuario “id=- 1+union+select+1,2,group_concat(' ',' Id: ',id,' User: ',usuario,' Pas: ', clave),4+from+administradores fuerza-bruta.html
SQL Injection ¿Dónde quedo mi BD?
SQL Injection Ejemplo Java conn = pool.getConnection( ); String sql = "select * from user where username='" + username +"' and password='" + password + "'"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { loggedIn = true; out.println("Successfully logged in"); } else { out.println("Username and/or password not recognized"); }
SQL Injection Ejemplo Python try: conn = MySQLdb.connect (host = "localhost”,user = "uname”, passwd = "pass”,db = "mydb") cursor = conn.cursor() = "' OR '1'='1" query = "SELECT * FROM user_info WHERE = '" + + "'" print query cursor.execute(query) if cursor.rowcount > 0: print cursor.fetchall() else: print "no item found" except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1])
SQL Injection
Algunas soluciones o Validar datos antes de usarlos en el SQL dinámicos is_int() is_long() gettype() o Usar PDO (PHP Data Objects) o Usar declaraciones parametrizadas MySQLi’s o Usar mínimo mysql_real_escape_string() o El uso de addslashes() no es suficiente.
Cross-site Scripting (XSS)
Algunas soluciones No confiar nunca en datos que obtengas de los usuarios o de cualquier fuente de datos Saneando los datos strip_tags($_POST['comentario']); Escapando los datos htmlspecialchars(); Las validaciones de datos de entrada, deben realizarse siempre del lado del servidor, no sólo en el lado del cliente
Cross Site Request Forgery (CSRF)
function verificar($form, $token, $delta_time=0) { // comprueba si hay un token registrado en sesión para el formulario if(!isset($_SESSION['csrf'][$form.'_token'])) { return false; } // compara el token recibido con el registrado en sesión if ($_SESSION['csrf'][$form.'_token']['token'] !== $token) { return false; } // si se indica un tiempo máximo de validez del ticket se compara la fecha actual con la de generación del ticket // if($delta_time > 0){ $token_age = time() - $_SESSION['csrf'][$form.'_token']['time']; if($token_age >= $delta_time){ return false; } return true; }
Cross Site Request Forgery (CSRF)
Recomendaciones para PHP
Recomendaciones Mantener CMS actualizado a la última versión Instalar solamente plugins y temas seguros Blinda la carpeta wp-admin o admin, o bien si puedes, fuerza la autentificación mediante SSL Revisar la sección de seguridad de ayuda del CMS para comprobar que has realizado todas las acciones de seguridad Suscribirte al feed de Ayuda del CMS para estar informado de las alertas de seguridad Reportar Errores al CMS Quitar todos los archivos CHANGELOG.txt y demás archivos.txt de los módulos que instalamos en nuestro sitio Poner un limite de intentos en el login.
Recomendaciones Generales No Confíes en Nadie
Recomendaciones Generales Piensa como ellos
Recomendaciones Generales Actualizate Siempre
Preguntas y Respuestas
¡¡¡¡Muchas Gracias!!!! Claudio Morales