instructor: hablemos sobre cómo
podemos prevenir estas vulnerabilidades ahora.
Lo primero es que existen muchas de
estas vulnerabilidades debido a la funcionalidad que proporcionan.
Por ejemplo, el problema de carga de archivos que
teníamos, permite al usuario cargar cualquier extensión de archivo, cualquier tipo
de archivo, esto no debería suceder, no debería haber
una forma para que los usuarios carguen los
archivos que quieran.
Tal vez, si desea que carguen una imagen,
asegúrese de que están cargando la imagen, verifique
los tipos de archivo.
Si espera que carguen una canción, un archivo MP #, asegúrese
de que sea un archivo multimedia, no un
PHP o un código ejecutable.
Por lo general, nunca debe
permitir que los usuarios carguen ningún ejecutable.
Los filtros se pueden usar para verificar si, para verificar
la extensión y asegurarse de que
el archivo que se está cargando es un JPEG o lo que sea.
Pero esa no
es una buena manera, la mejor manera es verificar el tipo
de archivo y asegurarse de que el tipo de archivo sea una imagen o
un archivo multimedia, en lugar de verificar
la extensión porque eso también se puede omitir.
El segundo tipo de vulnerabilidades que
analizamos fueron las vulnerabilidades de ejecución de código.
En estos exploits, pudimos ejecutar cualquier código que quisiéramos en
la computadora de destino.
Una vez más, esta funcionalidad debe evitarse,
debe evitar permitir que los usuarios ejecuten cualquier tipo de
código en su servidor.
Intente evitar todas estas funciones,
como el paso de
var, y todas estas funciones que permiten al
usuario ejecutar el código del sistema operativo en el servidor.
Si tuvo que usar algo
así, asegúrese de analizar la entrada antes de ejecutarla.
Por ejemplo, en el ejemplo que vimos donde el
código estaba haciendo ping y hará ping a cualquier cosa que coloquemos en
el cuadro de texto.
Entonces pongo aquí / $ textbox solo para mostrar que esta
es la entrada que ponemos en el cuadro de texto.
Así es como se ve
realmente el programa si parece demasiado complicado,
olvídalo, solo estamos hablando del concepto aquí.
Así que vamos a hablar de esto aquí.
Entonces, digamos, por ejemplo, que pones lo
que hicimos es que ponemos
una IP normal, y luego ponemos el punto y coma, y luego
ponemos un comando que queríamos hacer, por ejemplo, solo ls -la.
El problema con esto es la aplicación
web utilizada para tomar esto como está, copiarlo y ejecutarlo aquí.
Lo cual, cuando ejecute este comando, primero
hará el ping, y luego hará el ls -la, que es
el comando que queríamos.
Lo que debe hacer es, por ejemplo, si tuviera que
hacerlo, lo que le aconsejo es que simplemente no use estas funciones.
Si tuvo que usar una función como esta, entonces lo que
debe hacer es verificar que la entrada sea lo que espera, por
ejemplo, que
espera una dirección IP y nada más, por
lo que puede usar regex para asegurarse, ahora yo
No voy a hablar sobre expresiones regulares o qué
es la expresión regular, la expresión
regular es básicamente una regla que
asegurará que la entrada se vea
en el siguiente formato.
Por lo tanto, se
necesita un dígito, dígito, punto, dígito, dígito, dígito, dígito, dígito,
dígito, dígito, dígito, que si pongo
algo más, la aplicación web debería rechazarlo.
También puede asegurarse de que no haya punto
y coma y de que no
haya espacios, por lo que todo entra como una
cosa y luego se ejecuta.
Nuevamente, esta es una forma de hacerlo más seguro,
pero lo mejor es evitar estas funciones.
El tercer tipo de vulnerabilidad
que analizamos fue la inclusión de archivos
y observamos dos tipos.
La inclusión de
archivos locales que nos permitió incluir cualquier archivo en
el sistema y luego
leer los archivos que causarán una vulnerabilidad de divulgación de
archivos y luego podría leer cualquier archivo en
el servidor y luego miramos la inclusión
de archivos remota que
es muy peligroso, lo que nos permitió incluir cualquier archivo
desde cualquier servidor web, por lo que pudimos incluir shells PHP y
luego obtener la conexión desde la computadora de destino.
Para evitar esto, en
primer lugar, asegúrese de evitar la inclusión de archivos remotos.
Entonces, en caso de que
algo salga mal, las personas no pueden incluir archivos desde fuera
de su servidor y usted puede
hacerlo de la misma
manera que lo habilitamos usando el ini
de PHP deshabilitando allow_url_fopen y allow_url-include.
Y si vamos a nuestro Metasploitable, te
mostraré muy rápido, así
que si hacemos sudo nano, que es el editor de texto / etc
/ PHP / cgi / php. ini, el mismo archivo que
utilizamos, este es
el archivo para la configuración de PHP.
Si abres ese
archivo, y ahora voy a hacer
Control + W, y buscar allow_url.
Y debe asegurarse de
que allow_url_fopen esté
desactivado y allow_url_include también esté desactivado.
Control + X + Y e ingrese y
eso lo guardará para usted.
La otra forma de
evitar estas vulnerabilidades es utilizar la inclusión de archivos
estáticos, por lo que, en lugar de
utilizar la inclusión de archivos dinámica que hemos visto, puede codificar
los archivos que desea incluir en
el código y no obtenerlos mediante GET o POST.
Por ejemplo, lo que sucede en los ejemplos que
vemos en los ejemplos de vulnerabilidad es que tenemos
una página llamada página o índice. php.
Y luego este índice. php toma un parámetro llamado página y
luego toma otra página,
por ejemplo, noticias. php.
E incluye esta noticia. PHP en el código.
Entonces, ¿cómo se ve el código?
En el código PHP, verá algo como incluir.
Entonces, lo que esto
hará básicamente, y eso se ve así, creo, lo
que esto hace, incluye lo
que viene después del parámetro de página.
Por lo tanto, el código tomará dinámicamente lo que viene después del parámetro
de página y lo incluirá en la página actual para que
esté en el índice. página de php.
De acuerdo,
esto es muy malo porque incluso
si no es GET,
a veces las personas usan
POST y en POST no verá esto, por lo
que se publicará, pero puede
usar un proxy como Burp
proxy y esto se verá así
y luego puede modificarlo y hacer que incluya lo que
desee y luego se muestra en la página.
Lo que realmente queremos hacer es que queremos que el usuario no pueda
manipular lo que se incluirá, por lo que si
desea incluir una página llamada noticias. php, solo inclúyalo dentro
de esto sin darle
al usuario la capacidad
de cambiarlo.
Sé que vas a
programar tu código para que se vea así, pero los usuarios,
lo sabemos, hemos visto cómo los usuarios
pueden jugar con esto y conseguir
que incluya lo que quieran.
La mejor manera de hacerlo es hacer
que incluya la página. php por
lo que su código no está utilizando ninguna variable.
Está codificado, puede alargar su código pero
es mucho más seguro.