foro completo
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é.