¿Cómo hacer que un sitio sea vulnerable a SQLi?

5

Recientemente me interesé por las inyecciones de SQL: (por alguna razón, corrígeme si me equivoco) me pareció un buen lugar para comenzar (soy un principiante). De todas formas, quiero hacer un sitio en el que pueda practicar. En otras palabras, básicamente tal vez una página de contenido, una página de inicio de sesión y una base de datos con, por ejemplo, administrador, usuarios, pases, etc., etc.

Tendré que aprender SQL, pero eso me llevará media hora, ya he hojeado algunos sitios. Probablemente necesitaré HTML, y algo de PHP básico ...

Mi pregunta: ¿me estoy perdiendo algo? ¿Y qué define exactamente el código SQL vulnerable? Lo siento, estoy siendo un poco amplio aquí. Lo más cercano que encontré es esto: enlace

En una nota al margen, ¿es SQLi un buen lugar para comenzar con las vulnerabilidades de la web?

Gracias de antemano!

EDITAR: ¡Gracias por todas las maravillosas respuestas!

    
pregunta Jacob Kudria 21.05.2013 - 17:18
fuente

5 respuestas

12

No te molestes en escribir tu propio sitio para una práctica como esa. En su lugar, haga uso de los abundantes recursos en la web.

Un objetivo de buenas prácticas es el proyecto Damn Vulnerable Web Application ( DVWA ). El proyecto OWASP WebGoat es otro interesante.

    
respondido por el Ayrx 21.05.2013 - 17:20
fuente
5

Algunas notas

Un ataque de inyección SQL es cuando se inserta algo inesperado en una base de datos. Los tipos de inyecciones dependen de las vulnerabilidades del sistema.

Inyección de consultas SQL

Si la base de datos no tiene los permisos adecuados, lo que significa que el usuario web tiene control total sobre la base de datos, entonces pueden hacer cosas como reemplazar todos los registros, eliminar tablas y agregar sus propias tablas.

Un ejemplo podría ser una inyección en una edición donde el sitio espera que el usuario edite su propio registro, pero en su lugar, actualiza todo en el servidor.

\' or where 1=1;

Si tienen acceso de solo lectura a la base de datos, pueden aumentar sus privilegios y obtener más información de la que deberían. Este ejemplo estaría en un servidor que está devolviendo dos registros, el usuario luego agrega la tabla del usuario como su resultado.

\' UNION ALL SELECT username,password from USERS;

inyección de PHP

Muchas de las características de las últimas versiones de PHP se han reforzado para solucionar problemas con la ejecución del código, sin embargo, algunos desarrolladores usan cosas como exec() para realizar acciones en el código extraído de una base de datos. Algunas versiones anteriores de PHP todavía son vulnerables a los ataques.

Los desarrolladores son la primera línea de defensa cuando se trata de escribir un sitio web. Digamos que tiene un CMS corporativo y los desarrolladores crearon una tabla editable por el usuario en el CMS para modificar algo como anuncios gráficos.

El atacante podría ingresar phpinfo(); y ver toda la base de datos sobre el servidor, o ejecutar códigos de línea de comando (según el acceso de la cuenta de usuario del sitio web en el servidor web), o agregar su propia puerta trasera al sitio ( escribir o reescribir archivos). Esto podría permitir al usuario redirigir todo el tráfico fuera del sitio por completo.

inyección de script

Si bien el PHP del sitio puede ser menos vulnerable a un ataque, un usuario todavía puede inyectar cosas como iframes que contienen códigos maliciosos, javascripts que contienen códigos maliciosos o applets de JAVA que les permiten robar cookies de usuarios. Dado que javascript puede ejecutar AJAX y enviar solicitudes a un servidor web diferente sin previo aviso, es probable que esto no se vea en la interfaz a pesar de que pueda suceder.

<script type='text/javascript'> 
  window.location('http://someotherwebsite.com');
</script>

Pruebas

Las ramificaciones legales de las pruebas en el buzón de otra persona son diferentes según el país en el que se encuentre y el país en el que se hospeda el servidor. Dicho esto, hay muchas versiones gratuitas de sistemas operativos como FreeBSD y varios tipos de Linux (algunos más seguros que otros) donde puede instalar un sistema operativo, un servidor web y un servidor MySQL en un servidor virtual Máquina bajo algo como Virtual Box y vaya a la ciudad sin tener que alojar su máquina de producción.

Algunas de las otras respuestas dadas por otros carteles también son excelentes en este hilo.

    
respondido por el AbsoluteƵERØ 21.05.2013 - 21:37
fuente
1

Si te gusta entrar en las vulnerabilidades web, te recomiendo que aprendas algunos conceptos básicos sobre PHP, HMTL, Javascript y SQL.

Si has hecho esto: Comenzando con OWASP

    
respondido por el Dr.Ü 21.05.2013 - 17:21
fuente
1

Cualquier forma que tome la entrada y la use directamente en una consulta SQL sin verificar que la entrada sea segura sería vulnerable a la inyección de SQL. Ser vulnerable a la inyección de SQL es más o menos el estado estándar del ser, a menos que tome medidas específicas para protegerse contra él en su código.

    
respondido por el AJ Henderson 21.05.2013 - 17:50
fuente
1

Para agregar a los recursos de Terry Chia, hay un tutorial de inyección SQL de PentesterLab que hace lo que está buscando, llamado De SQLi a Shell . Lo hice ayer, es muy bueno. También ofrecen un par de recorridos más avanzados.

    
respondido por el mtdevans 21.05.2013 - 20:55
fuente

Lea otras preguntas en las etiquetas