Israel Helton Wernik

I'm a Cyber Researcher and Python Programmer.

File Upload Vulnerabilities - Usando Burp Suite

29 Mar 2018 »

Vamos aprender como enviar um arquivo malicioso para um server ou computador e ter controle no site.



Podemos criar com Veil-Evasion ou Metasploit, ou ter seu próprio PHP Shell.

Vamos conhecer uma ferramenta chamada weevly para criar um payload ou shell

Criando o shell em PHP:
no terminal do kali:

weevly generate 123456 /root/shell.php

123456 - senha para acessar aquele payload e controlar o site


Iniciando o BURP Proxy
Para enviar o nosso shell precisamos de um proxy para manipular os dados do POST.

para isso iremos usar o BURP Proxy

  • Abrir o BURP
  • proxy - options ver a porta em que está rodando, no nosso caso porta 8080


Agora devemos configurar o browser para enviar todos os requests ao burp proxy

No Firefox do Kali:

  • preferences - advance - network - settings - check manual proxy configuration
colocar na porta 8080 - ok


Agora no burp na janela intercept podemos interceptar todo o tráfego no browser:
podemos modificar e depois clicando no forward é enviado.


Lembrar de quando desligar o BURP mudar a configuração do firefox para no proxy


Manipulando os Requests do site para enviar nosso payload
Iremos usar o site dvwa no modo mais seguro


Fazemos upload de nosso arquivo malicioso

Mudamos o arquivo shell.php para shell.jpg e enviamos


Na tela da direita vemos o request interceptado e agora podemos manipular ele, precisamos que o arquivo seja php para poder rodar, mas o sistema não deixa subir um arquivo .php, por isso iremos mudar ele para shell.php.jpg


nesse caso mudamos para shell3.php.jpg pois já enviamos outros antes para testar

E agora clicamos no Forward do Burp para enviar e…

Acessando o Shell
Basta colocar o comando weevly +  endereço para qual o arquivo foi enviado no server + senha criada


Pronto agora com qualquer comando linux podemos controlar todo o site


Pode-se digitar help para ver todas as opções:


Security - Como evitar esse tipo de ataque


No código devemos ter uma segurança e:
  • nunca deixar o usuário fazer upload de um executável (php.exe ...etc)
  • verifique o tipo do arquivo e a extenção
  • Análise o arquivo, recrie-o, renomea-o.
  • Destruir a imagem original

Veja um exemplo de como verificar o arquivo, recriar outro e renomea em PHPr:

// Is it an image?
if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) &&
( $uploaded_size < 100000 ) &&
( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
getimagesize( $uploaded_tmp ) ) {

// Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
if( $uploaded_type == 'image/jpeg' ) {
$img = imagecreatefromjpeg( $uploaded_tmp );
imagejpeg( $img, $temp_file, 100);
}
else {
$img = imagecreatefrompng( $uploaded_tmp );
imagepng( $img, $temp_file, 9);
}
imagedestroy( $img );

// Can we move the file to the web root from the temp folder?
if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
// Yes!
$html .= "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";
}
else {
// No
$html .= '<pre>Your image was not uploaded.</pre>';
}

// Delete any temp files
if( file_exists( $temp_file ) )
unlink( $temp_file );
}
else {
// Invalid file
$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}