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>'; } } |