instrutor: Vamos falar sobre
como podemos evitar essas vulnerabilidades agora.
A primeira coisa é que muitas dessas
vulnerabilidades existem devido à funcionalidade que elas fornecem.
Por exemplo, o problema de upload de arquivos que
tivemos, permite que o usuário envie qualquer extensão de arquivo, qualquer
tipo de arquivo, isso não deve acontecer, não deve
haver uma maneira de os usuários enviarem os
arquivos que desejarem.
Talvez se você quiser que eles carreguem uma imagem,
verifique se eles estão carregando a imagem, verifique
os tipos de arquivo.
Se você espera que eles carreguem uma música, um arquivo MP #,
verifique se é um arquivo de mídia, não é um
PHP ou um código executável.
Geralmente, você nunca deve permitir
que os usuários enviem quaisquer executáveis.
Os filtros podem ser usados para verificar se, para
verificar a extensão e se
o arquivo está sendo carregado como JPEG ou qualquer outra coisa.
Mas essa não
é uma boa maneira, a melhor maneira é verificar o tipo
de arquivo e garantir que o tipo de arquivo seja uma imagem ou um
arquivo de mídia, em vez de verificar
a extensão, pois isso também pode ser ignorado.
O segundo tipo de vulnerabilidades que
analisamos foram as vulnerabilidades de execução de código.
Nessas explorações, conseguimos executar qualquer código que desejávamos no
computador de destino.
Novamente, essa funcionalidade deve ser evitada;
você deve permitir que os usuários executem qualquer tipo de
código no seu servidor.
Tente evitar todas essas funções,
como a passagem de
var, e todas essas funções que permitem que
um usuário execute o código do sistema operacional no servidor.
Se você absolutamente teve que
usar algo parecido, certifique-se de analisar a entrada antes de executá-la.
Por exemplo, no exemplo, vimos onde o código estava
executando um ping e ele executará ping em qualquer coisa que colocarmos
na caixa de texto.
Então, eu estou colocando aqui / $ textbox apenas para mostrar que
essa é a entrada que colocamos na caixa de texto.
É assim que o programa
se parece, se parecer muito complicado, esqueça.
Estamos apenas falando sobre o conceito aqui.
Então, vamos falar sobre isso aqui.
Então, digamos, por exemplo, que você colocou
o que fizemos, colocamos
um IP normal, depois colocamos o ponto-e-vírgula e, em seguida, colocamos
um comando que queríamos fazer, apenas por exemplo ls -la.
O problema com isso é o aplicativo da
web usado para interpretá-lo da maneira que é, copiá-lo e executá-lo aqui.
Qual será, quando você executar este comando,
ele fará o ping primeiro e, em seguida, fará o ls -la, que
é o comando que queríamos.
O que você precisa fazer é, por exemplo, se você tiver que
fazê-lo, o que eu aconselho é que você simplesmente não use essas funções.
Se você tivesse que usar uma função como essa, o
que você deve fazer é verificar se a entrada é o que
você está
esperando, por exemplo, você está esperando um endereço
IP e nada mais, para que você possa usar
o regex para garantir, agora eu não vou falar
sobre regex ou o que
é regex, regex é basicamente uma
regra que garante que a entrada
tenha o seguinte formato.
Portanto, é preciso um dígito,
dígito ponto dígito dígito dígito dígito dígito dígito dígito dígito
que, se eu colocar mais alguma
coisa, o aplicativo da Web deve recusá-lo.
Você também pode garantir que não
haja ponto-e-vírgula e que não haja
espaços, para que tudo ocorra como uma coisa
e depois seja executado.
Novamente, essa é uma maneira de torná-la mais segura, mas
a melhor coisa é apenas evitar essas funções.
O terceiro tipo de vulnerabilidade
que analisamos foi a inclusão de arquivos
e analisamos dois tipos.
A inclusão de
arquivo local que nos permitiu incluir qualquer arquivo no
sistema e, em seguida,
ler os arquivos que causam uma vulnerabilidade de divulgação de
arquivos. Você seria capaz de ler qualquer arquivo
no servidor e analisamos a inclusão de
arquivo remoto que é
muito perigoso, o que nos permitiu incluir qualquer arquivo de
qualquer servidor da Web, de modo que pudemos incluir shells PHP e,
em seguida, obter conexão do computador de destino.
Para evitar isso,
antes de tudo, evite a inclusão remota de arquivos.
Portanto, caso algo dê
errado, as pessoas não podem incluir arquivos de fora do
servidor e você pode fazer isso
da mesma maneira
que a habilitamos usando o PHP ini,
desativando o allow_url_fopen e allow_url-include.
E se formos para o nosso
meta-explorável, mostrarei rapidamente, se
fizermos o sudo nano, que é o editor de texto / etc
/ PHP / cgi / php. ini, o mesmo arquivo que
usamos, este é
o arquivo para as configurações do PHP.
Se você abrir
esse arquivo, e agora eu vou fazer
Control + W, e procure por allow_url.
E você quer ter certeza
de que allow_url_fopen esteja
definido como Off e allow_url_include também esteja desativado.
Controle + X + Y e digite e
isso salvará para você.
A outra maneira de
impedir essas explorações é usar a inclusão estática
de arquivos. Portanto, em vez de usar
a inclusão dinâmica de arquivos que vimos, você pode codificar os
arquivos que deseja incluir no
código e não obtê-los usando GET ou POST.
Por exemplo, o que está acontecendo nos exemplos que
vemos nos exemplos de vulnerabilidade é que temos
uma página chamada página ou índice. php.
E então este índice. O php usa um parâmetro chamado página
e, em seguida, outra página,
por exemplo, notícias. php.
E inclui esta notícia. php no código.
Então, como é o código?
No código PHP, você verá algo como incluir.
Então, o que isso
fará basicamente, e que se parece com isso, acredito,
o que isso faz, inclui
o que vier depois do parâmetro da página.
Portanto, o código pega dinamicamente tudo o que aparece após o
parâmetro page e o inclui na página atual, para
que fique no índice. página php.
Ok, isso
é muito ruim, porque mesmo que
não seja GET, às
vezes as pessoas usam o
POST e no POST você não verá isso, então
ele será publicado, mas você
pode usar um proxy como
o Burp proxy e isso parecerá
assim e então você pode modificá-lo e incluir o que
quiser e, em seguida, é exibido na página.
O que realmente queremos é que o usuário não seja capaz de
manipular o que será incluído, portanto, se você
quiser incluir uma página chamada news. php, inclua-o dentro disso
sem dar ao usuário
a capacidade de
alterá-lo.
Eu sei que
você programará seu código para que ele fique assim, mas
os usuários, sabemos, vimos como os
usuários podem brincar com isso e
incluir apenas o que quiserem.
A melhor maneira de fazer isso é
apenas incluir a página. php para
que seu código não use nenhuma variável.
É codificado, pode tornar seu código mais longo,
mas é muito mais seguro.