foro completo

34
  FORO PHP y MySQL Eduardo Bayón Cascajo Implantación de Aplicaciones Web 11/01/2012

Upload: edubayon8

Post on 14-Jul-2015

189 views

Category:

Documents


0 download

TRANSCRIPT

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 1/34

 

FORO

PHP y MySQL

Eduardo Bayón Cascajo

Implantación de Aplicaciones Web

11/01/2012

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 2/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 1 de 34 

Contenido

Creación de tablas ............................................................................................. 2 Códigos .............................................................................................................. 3 

Index.html ....................................................................................................... 3 Nuevo_usuario.html ........................................................................................ 4 Registro.php ................................................................................................... 5 Inicio_sesión.php ............................................................................................ 6 Cerrar_sesion.php .......................................................................................... 7 Lista_temas.php ............................................................................................. 8 Nuevo_tema.html ............................................................................................ 9 Nuevo_tema.php .......................................................................................... 10 Mostrartema.php ........................................................................................... 11 Contestarpost.php ........................................................................................ 12 Borrarpost.php .............................................................................................. 14 Borrartema.php ............................................................................................. 15 

Pruebas ............................................................................................................ 16 Modificación para subir archivos ...................................................................... 18 

Modificación en los scripts para subir ficheros adjuntos ............................... 18 Borrado de los archivos adjuntos a un tema o post ...................................... 21 

Modificaciones en borrarpost.php ............................................................. 21 Modificaciones en borrartema.php ............................................................ 22 

Usuarios con su avatar ................................................................................. 23 Fichero perfilusuario.php ........................................................................... 24 Fichero admin.html .................................................................................... 26 Fichero borrarusuario.html ........................................................................ 27 Fichero borrarusuario.php ......................................................................... 28 

Seguridad en el Foro ........................................................................................ 30 Inyección de código XSS: ............................................................................. 30 Secuestro se sesión ..................................................................................... 31 Inyección de SQL ......................................................................................... 33 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 3/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 2 de 34 

Creación de tablas

Tabla usuarios:

Tabla temas:

Tabla posts:

 

Tabla sesiones:

Usaremos esta tabla para obtener el e-mail a partir del identificador de sesión a

la hora de crear o borrar posts o temas.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 4/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 3 de 34 

Códigos

Index.htmlEste documento será el que nos aparezca cuando entremos a nuestro foro de

manera predeterminada, a partir de aquí podemos realizar las acciones deacceder si ya estamos registrados, acceder como invitado o registrarnos como

un nuevo usuario:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 5/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 4 de 34 

Nuevo_usuario.htmlEste código recogerá por parte de un usuario un nuevo registro y los enviará al

archivo registro.php que es el que los ingresará en nuestra base de datos:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 6/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 5 de 34 

Registro.php

Y nos mostrará lo siguiente si el usuario ya está registrado:

O lo siguiente si el registro se realiza de manera correcta:

 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 7/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 6 de 34 

Inicio_sesión.phpEste script será el que gestione las entradas en el foro, es decir las sesiones.

Por eso se ha creado en esta versión del foro la tabla sesiones, cada vez que

un usuario se conecte ahí se introducirán los datos:

 

Entonces, si nos autenticamos con éxito se mostrará el siguiente mensaje

satisfactorio:

Y si son erróneos:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 8/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 7 de 34 

Cerrar_sesion.phpEl siguiente código será el que gestione la desconexión del foro y nos renvía a

la página inicial desde donde podemos seguir actuando:

 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 9/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 8 de 34 

Lista_temas.phpEste script nos gestionará la lista de los temas creados en el foro:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 10/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 9 de 34 

Nuevo_tema.htmlEste código html recogerá las entradas de los usuarios que registren un nuevo

tema y lo enviará a nuevo_tema.php:

 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 11/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 10 de 34 

Nuevo_tema.phpGestiona las entradas del anterior script y las almacena en la base de datos:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 12/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 11 de 34 

Mostrartema.php

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 13/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 12 de 34 

Contestarpost.php

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 14/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 13 de 34 

De este modo podremos insertar un mensaje en un tema ya existente.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 15/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 14 de 34 

Borrarpost.phpDe este modo conseguimos el borrado de los post, siempre y cuando el usuario

sea el que ha escrito ese mensaje o sea el usuario administrador:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 16/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 15 de 34 

Borrartema.phpEste será el script que gestione los borrados de los temas, que únicamente

podrá realizar el usuario Administrador del sistema al que le hemos asignado

cuenta de correo electrónico: [email protected]:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 17/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 16 de 34 

Pruebas

Vamos a realizar algunas pruebas más a continuación para ver de qué manera

responde el foro y comprobaremos que todo funciona correctamente.

Al principio ya realicé algunas con la creación de los nuevos usuarios, el cierrede sesión y el login de usuarios ya registrados.

También he añadido el usuario Administrador con el email [email protected]

que es el que gestionará y tendrá control total a la hora de borrar posts (salvo

el primero de cada tema) y será el único que puede borrar temas como vemos

a continuación:

Y comprobamos que podemos borrar un tema que está creado por otro usuario

como se ve en la imagen:

De manera automática se nos envía a la lista de temas:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 18/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 17 de 34 

Un usuario normal solamente podrá borrar sus posts, cerramos sesión y nos

autenticamos como [email protected] y creamos un tema con varios mensajes,

además el usuario [email protected] contestará y veremos que solo puede

borrar sus mensajes:

 

Ahora que estoy autenticado como usuario [email protected] intentaré borrar

un post de [email protected] y no nos dejará y nos enviará a la lista de temas

mostrandonos las caracteristicas del tema:

En cambio, si que podemos borrar el mensaje que el usuario

[email protected] ha escrito:

El mensaje que no se podrá borrar con ningún usuario será el inicial del tema.

Hasta aquí he seguido casi con totalidad la práctica hecha por Lucia para

conseguir la gestión correcta del sistema ya que con el código que yo tenía

hasta el momento era imposible hacerlo del modo propuesto.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 19/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 18 de 34 

Modificación para subir archivos

Lo primero que he realizado es añadir un nuevo campo a la tabla posts_foro,

que será el campo fichero y almacenará el nombre del fichero adjunto si es

que un usuario responde a un post con un fichero adjunto.

Por lo que nuestra tabla posts_foro quedará de la siguiente manera:

Además he añadido que tengan por defecto el valor NULL en caso de que nose inserte ningún fichero adjunto en el mensaje que escriba el usuario.

Modificación en los scripts para subir ficheros adjuntosHe modificado el archivo contestarpost.php y le he añadido las siguientes

líneas que se harán que se muestre una casilla para poder subir un fichero, de

máximo 512Kb, cuando un usuario quiera responder a un mensaje o post:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 20/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 19 de 34 

En el anterior script es donde seleccionábamos el fichero que subíamos, en el

siguiente apartado, del mismo documento contestarpost.php es el que

gestiona esa subida del fichero y nos le muestra cuando le subamos:

 

Por lo que cuando seleccionemos un nuevo fichero, este será el que gestione

la subida.

También hemos modificado el fichero mostrartema.php ya que es el que nos

debe recuperar la información de los mensajes y por lo tanto en este casomostrar los archivos adjuntos si los hay. Hemos añadido las siguientes líneas

sombreadas en este script para que se muestre correctamente:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 21/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 20 de 34 

Entonces, cuando subamos un archivo, veremos cómo se muestra en el nuevo

campo que hemos añadido:

Y enviamos el mensaje:

Y si pinchamos sobre el enlace, veremos el fichero subido:

Y del mismo modo, este archivo se habrá copiado a nuestro directorio

especificado para almacenar los archivos:

 

Y podemos aprovechar para ver el estado de la tabla y ver como se almacena

el nombre del fichero subido:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 22/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 21 de 34 

Borrado de los archivos adjuntos a un tema o postYa hemos visto que podemos subir ficheros adjuntos en un mensaje, pero

¿Qué pasa cuando eliminamos ese mensaje o cuando eliminemos un tema?

Vamos a ver las modificaciones correspondientes en los scripts

borrratema.php y borrarpost.php para que cuando seleccionemos borrar unmensaje también eliminemos el fichero adjunto si lo hay.

Modificaciones en borrarpost.phpDebemos añadir dos veces el código de borrado del fichero, una vez cuando lo

pueda borrar el creador del mensaje:

Y cuando sea el usuario administrador el que quiera borrarlo:

De este modo, cuando se pueda borrar un post, también se borrará su fichero

adjunto si lo hay.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 23/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 22 de 34 

Modificaciones en borrartema.phpComo ya hemos dicho debemos también habilitar la posibilidad de que cuando

el usuario administrador, el único que puede borrar un tema, lo haga también

se borren los ficheros adjuntos en los mensajes del respectivo tema.

El aspecto de la modificación del script será el siguiente:

De este modo, cuando se elimine todo un tema, se borraran todos sus ficheros

adjuntos, si los hay.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 24/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 23 de 34 

Usuarios con su avatarVamos a continuación a intentar que cada usuario que se registre, si lo desea

que tenga su propio avatar, es decir podrá subir una imagen que luego se

mostrará en sus posts.

Modificaremos la estructura de la tabla usuarios para almacenar la foto del

avatar que suba un usuario:

Ahora están todas a NULL ya que es valor defecto que le hemos dado en caso

de que no suba avatar, luego comprobaremos de nuevo cuando subamos una

imagen.

Mi idea principal era modificar el fichero registro.php para que cuando un

usuario nuevo se registrara metiera el avatar que quisiera, pero tras muchas

vueltas, todas ellas sin éxito, y consultarlo con Lucia para saber a qué

conclusión ha llegado ella, he realizado las siguientes modificaciones:

1. Crear un fichero perfilusuario.php que será el que gestione cada perfil

de los usuarios del sistema y que les permitirá añadir sus avatares

fácilmente.2. Un fichero nuevo admin.html que enlazará con parte del foro y con un

apartado nuevo, borrarusuario.html que lo gestionará

borrarusuario.php para realizar una buena gestión de nuestro foro y

poder borrar usuarios de manera práctica.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 25/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 24 de 34 

Tras la breve explicación vamos a ver cómo están formados nuestros ficheros y

luego realizaremos alguna prueba de su funcionamiento:

Fichero perfilusuario.php

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 26/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 25 de 34 

De este modo, un usuario autenticado podrá modificar su perfil para añadir una

imagen que el desee y si no lo está se le reenviará al índice de nuestro foro.

Nos autenticamos como un usuario del sistema, y añadimos una imagen:

Lo confirmamos, y ahí tendremos nuestro avatar:

Y el estado de la tabla usuarios con las modificaciones:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 27/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 26 de 34 

Fichero admin.htmlEste fichero será el que realice la función de administración del sistema de

usuarios y nos enlazará con el que veremos a continuación,

borrarusuarios.html:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 28/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 27 de 34 

Fichero borrarusuario.htmlEste será el encargado de recoger los datos del usuario que se desea borrar y

enviárselos a borrarusuario.php:

Digamos que cualquiera puede llegar hasta esta página, pero no podrá realizar

ninguna acción si no es nuestro usuario del sistema ([email protected]) como

veremos a continuación en el fichero borrarusuario.php.

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 29/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 28 de 34 

Fichero borrarusuario.phpEste será, como ya he dicho, el que nos permita administrar las entradas de los

usuarios en nuestro foro, solo el usuario administrador podrá eliminar entradas

y el que no lo sea se le reenviará a la lista de los temas existentes.

Además cuando se borre un usuario, si tiene un avatar adjunto también seborrará la imagen que le acompaña:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 30/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 29 de 34 

Entonces, nos autenticaremos como usuario administrador, [email protected], e

iremos a borrar un usuario:

El estado de la tabla usuarios y la carpeta que almacena los ficheros antes de

borrar:

Y tras pulsar sobre Borrar usuario borraremos su avatar de nuestro sistema, si

lo hay y también borraremos todos sus temas y posts si es que tiene:

 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 31/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 30 de 34 

Seguridad en el Foro

Vamos a ver, tal cual está, sin “sanitizar” nada como es la seguridad de nuestro

foro en cuanto a los siguientes aspectos:

Inyección de código (XXS) Secuestro se sesión

Inyección de SQL

Inyección de código XSS:Vamos a probar algún payload a ver si conseguimos explotar este tipo de

vulnerabilidades, como por ejemplo sobre un tema creado escribimos:

Y enviamos el mensaje… 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 32/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 31 de 34 

Secuestro se sesiónVamos a aprovechar que hemos explotado una vulnerabilidad XSS para

realziar un robo de sesión.

Si especificamos el siguiente código malicioso dentro de un nuevo post y lo

enviamos… 

Aquí tenemos nuestro vulnerabilidad XSS:

 

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 33/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 32 de 34 

Ahora voy a usar la herramienta Edit this cookie del navegador Google

Chrome para modificar mi cookie y realizar el robo de sesión.

Una vez añadido este complemento, especificaremos la sesión que vamos a

robar del siguiente modo:

Pulsaremos primero sobre Guardar los cambios y luego sobre Proteger los

cambios y comprobamos, yendo al perfil de usuario, que estamos autenticado

como el usuario al que hemos accedido:

5/12/2018 FORO COMPLETO - slidepdf.com

http://slidepdf.com/reader/full/foro-completo 34/34

Eduardo Bayón Cascajo Implantación de aplicaciones web

Página 33 de 34 

Inyección de SQLVamos a ver, mediante Havij y SqlMap si podemos realizar un ataque de SQLi

en nuestra base de datos.

Primero intentamos hace evidente la vulnerabildiad, mediante algunas pruebas

manuales:

Con esta simple prueba, ya hemos demostrado la vulnerabilidad SQLi:

 

No he podido explotar más esta vulnerabilidad por falta de tiempo, si puedo

más adelante lo completaré.