dimarts, 3 de desembre del 2013

Evasió d'autenticació amb injecció SQL

Els atacs d'injecció de codi SQL són bastant freqüents avui en dia. Fer un atac d'aquest típus consisteix en colar codi SQL com si fóssin les dades d'entrada d'un formulari.



Ara imaginauvos aquest escenari: un formulari qualsevol per fer login a una pàgina web, amb dos camps, usuari i contrassenya. L'script que executa el codi a la part del servidor el que fa és recollir aquestes dades enviades i fa una consulta SQL en funció d'aquestes.

El codi PHP podria esser aquest mateix:

SELECT * FROM usuaris WHERE user = '$user' AND password = '$password';
on $user i $password corresponen a les dades entrades per l'usuari. Suposant que l'usuari admin fós el que té tots els privilegis del lloc web podriem fer el següent:


  • Al camp del nom d'usuari del formulari hi entram: admin'#
  • Al camp de password del formulari hi entram: password (o qualsevol cosa, inclus cap caràcter)
Substituïnt les dades a la consulta ens quedaria de la següent manera:

SELECT * FROM usuaris WHERE user = 'admin'#' AND password = 'password'
A SQL el caràcter # actua com a delimitador pels comentaris i per conseqüent la part #' AND password = 'password' no s'executaria ja que està comentada.

Si el lloc web on volem accedir no contempla les possibles injeccions SQL ens hauriem loguejat com a administrador fora tenir la clau d'accés.

Cal remarcar que és molt dificil que els programadors web no tenguin en compte aquests típus d'atacs, però sempre n'hi ha algun de despistat que no implementa la seguretat a aquest nivell.

Per prevenir aquests atacs hi ha una sèrie de mecanismes (a nivell de llenguatge de programació, no a nivell de SQL) que et solucionen bastant la cosa, un d'ells es l'objecte PDO (PHP Data Objects) que et permet fer queries segurs, evaluant antes d'executar-lo la possibilitat de sofrir una injecció SQL.

A l'enllaç a continuació hi ha més informació i més exemples sobre aquests típus d'atacs.

Més informació | Security A(r)t Work

Cap comentari:

Publica un comentari a l'entrada

Nota: Només un membre d'aquest blog pot publicar entrades.