BOOK THIS SPACE FOR AD
ARTICLE ADCommand injection(também conhecida como injeção de shell) é uma vulnerabilidade de segurança da Web que permite que um invasor execute comandos arbitrários do sistema operacional (SO) no servidor que está executando um aplicativo e, normalmente, compromete totalmente o aplicativo e todos os seus dados. Muitas vezes, um invasor pode aproveitar uma vulnerabilidade Command injection para comprometer outras partes da infraestrutura de hospedagem, explorando relações de confiança para direcionar o ataque a outros sistemas dentro da organização.
A falha funciona através de uma função chamadas exec onde a aplicação executa diretamente o que foi enviado pelo usuário no servidor.
A Função exec serve pra executa um programa externo de um servidor
ex:
<?php
echo exec(‘whoami’);contimuar
?>
a função exec ira executar o comando whoami no servidor sendo assim o servidor mostrar a output do comando.
Essa parte será dividida em três partes.
criar um laboratório
exploração da falha
e upgrade de shell
o que é o lamp
lamp é uma combinações de progamas para um desenvolvimento web sendo eles
linux
apache2
mysql
php
o que é e como instalar o apache2
O apache é um servidor o web que permite aos donos de site exibir suas paginas para todos dentro da internet.
A instalação do apache é bem simples, ao utilizar o comando ‘apt install apache2 -y’ o programa será instalado sem nenhuma preocupação
Assim que finalizada a instalação do Apache, iremos testar na máquina host se o serviço já está disponível. Utilizarei o comando ip addr show para descobrir o ip do servidor
sabendo o meu ip posso ver se meu servidor apache no meu browser basta digitar o ip que contem no inet na aba de pesquisa e será exibido a pagina do apache
feito isso o apache esta pronto pra uso
instalando o php
o php é um linguagem interpretada usada para aplicações server-side ou seja no lado do servidor
a instalação do php é bem simples basta digitar o comado ‘apt install php php-cli -y’ e o php será instalado
podemos testar se o php foi instalado corretamente criando o php info, para fazer isso devemos digitar o seguite comando ‘cd /var/www/html’ chegando la digite ‘nano info.php’ e o nano criara um arquivo .php, feito isso digite o código abaixo dentro do arquivo
<?php
phpinfo( );
?>
pressione ctrl+ x, s ou y logo apos enter , e agora podemos testar o php ,para testar o php basta digitar o ‘127.0.0.1/info.php’ na barra de pesquisa do browser e ele exibira todas as informações do php
nesse lab não usarei o mysql mas para fazer sua instalação basta digitar o comando a seguir e ele sera instalado ‘apt install mysql-server mysql-client php-mysql -y’
criando o lab
para criar as paginas precisamos criar um input simples no método post com o código abaixo e logo apos salve como index.html
obs: os arquivos criados a parti daqui serão todos salvos na pasta /var/www/html
<form action=”recebe.php” method=”post”>
<label for=”target”>digite o dominio ou ip para ser consultado:</label>
<input type=”text” id=”target” name=”target”/>
<input type=”Submit” value”Submit”>
</form>
feito isso podemos salvar e olhar no browser digitando na barra de pesquisa 127.0.0.1/index.html e nosso input esta pronto
para criar o arquivo que valida nosso input devemos criar um arquivo chamado “recebe.php” e digitar o codigo abaixo
<?php
if(isset($_POST[“target”]))
{
$target = $_POST[“target”];
if($target == “”)
{
echo “sem dados”;
}
else
{
echo “<pre>” . shell_exec(“nslookup “ . $target) . “</pre>”;
}
}
?>
feito isso o nosso lab esta pronto.
Antes de começar a exploração devemos entender o que esta acontecendo por debaixo dos pano.
o código em php abaixo faz uma verificação, se enviamos algo vazio ou se contem algum conteúdo nele.
se o input estiver vazio ele retorna “ sem dados ”
caso o input contenha algum dados ele chama a função exec que por sua vez lança o que foi digitado pelo usuário em programa externo que no nosso caso é o ‘Nslookup’
O NSlookup serve para trazer informações básicas de um domínio ao digitar o domínio www.google.com
ele retorna algumas informações do domínio
como a falha ocorre
a falha ocorre por um erro do programador que por sua vez não adiciona um filtro no que o usuário envia para o servidor, sendo assim um simples ; pode trazer grandes problemas para uma empresa que tenha essa falha em sua aplicação.
para explorar essa é falha muito simples, a aplicação espera que o usuário adicione um domínio ao input, mas e se adicionarmos um ; depois do domínio colocado no input e passarmos um comando de um sistema operacional
simplesmente o servidor reconheceu o comando ls e o executou e nos listou todos os diretórios da pasta
Hora da Shell
sabendo que o servidor recebe comando linux podemos fazer uma shell reversa usando qualquer tipo de linguagem, mas para a shell funcionar era necessário abrir uma determinadas porta no seu roteador. porem podemos fazer a shell reversa sem a necessidade de abrir a porta no roteador, utilizando o NGROK, não irei ensinar como instalar o ngrok pois já tem vários tutoriais
fazendo a shell reversa
utilizei a linguagem php para fazer minha shell reversa
para fazer a conexão basta deixar o nc na esculta digitando o comando abaixo
nc -nlvp 1421
logo apos abre a porta 1421 no ngrok
./ngrok tcp 1421
feito isso o ngrok nos dará uma porta e um ip
agora é só subi a shell utilizando o ip e a porta do ngrok
substitui o ip pelo domínio que o ngrok me deu, ao enviar a payload o site executou e retornou com a shell no meu terminal
E agora temos acesso ao servidor.
agora eu posso dar comandos no servidor, apos da o comando whoami estamos logado como o usuário www-data podemos usar o python para melhorar a shell .
para podermos da um upgrade na shell usamos o seguinte comando
python -c ‘import pty; pty.spawn(“/bin/bash”)’
apos da o comando vc recebera uma shell melhorada
agota iremos da um ctrl + z para trocar para o terminal local
depois escreva stty raw -echo para o que for escrito no seu terminal local seja escrito também na shell do servidor
digite o comando fg para colocar a shell em primeiro plano
“quando digitar o comando fg não aparecera no terminal pois estará escrevendo na shell do servidor e não o terminal local “
depois digite export TERM=xterm-256color e agora temos uma shell aprimorada
porque aprimorar a shell
Quando conseguimos um shell reverso, geralmente faltam várias coisas que dificultam bastante a interação. Pela falta de um tty, não conseguimos verificar as permissões com “sudo -l”, não conseguimos usar o “vi” e várias outras dificuldades. Então a primeira coisa que costumamos fazer é obter (spawnar) um tty. Porém mesmo após este passo, ainda faltam algumas coisas:
Não tem “autocomplete” com o tabO comando “clear”não funcionaCTRL+C finaliza o shellRodar um “sudo -l” com estas limitações é terrível! Simplesmente não conseguimos dar um “CTRL+C” e somos obrigados a digitar a senha errada três vezes para sair! E quem já teve um shell travado e a única saída era o “CTRL+C” sabe o sofrimento que é ter que refazer todo o shell.
por isso é bom aprimorar a shell.
E agora temos total acesso ao servidor
O command injection acontece por uma falha de programação onde o programador deixa o servidor receber tudo que o usuário digita sem tratar o que foi digitado.
Agradeço ao meu professor e mentor o @bootsantos que acredita em meu potencial e me inspira a cada dia a continuar estudando.
referencias: