Download e execução de código da internet
Last updated
Last updated
Nessa seção serão apresentados dois comandos para interação HTTP/HTTPS com hosts disponíveis na Internet.
wget é um utilitário para realizar download de arquivos e páginas da internet a partir de comunicação HTTP/HTTPS. Seu uso básico é wget 'https://site.com/pagina.html'
, para realizar o download da página.
Nota: é recomendado colocar o site entre aspas simples ou duplas para evitar a interpretação no shell de algum símbolo que esteja na URL, quebrando o comando.
Para realizar download de um arquivo, utilize a opção -O
, especificando um nome de arquivo para guardar os bytes obtidos via rede. Por exemplo, para baixar a versão mais recente do Alpine Linux como alpine.iso, é só executar wget 'https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.1-x86_64.iso' -O alpine.iso
Uma barra de progresso será impressa na tela conforme o download está sendo realizado.
A opção -r
do wget serve para realizar um crawling no site e efetivamente baixar todas as páginas que encontrar. Por exemplo, para baixar todas as issues da Phrack Magazine, execute: wget -r "http://phrack.org/archives/issues/"
Outro uso da opção -O
, bastante importante para cenários ofensivos, é a de salvar o download para o stdin. Isso é feito passando o nome de arquivo como um hífen (-O -
), visto que o hífen como parâmetro, em vários softwares Linux, é visto como "leia da entrada padrão".
A partir daí, caso o download seja de um shell script, podemos passar seu conteúdo via pipe para uma shell - como o bash ou o sh. Efetivamente isso irá executar o script sem tocar o disco, evitando certos softwares antivírus.
Como exemplo, vamos executar o instalador da linguagem rust via: wget 'https://sh.rustup.rs' -O - | sh
O curl é um utilitário utilizado para realizar requisições HTTP/HTTPS, contemplando todos os métodos HTTP, permitindo download e envio de informações para um servidor. Ele é indicado para realizar interação com APIs e realizar downloads.
Em algumas edições do Ubuntu, o curl não vem preinstalado. Para instalá-lo, execute:
sudo apt install curl -y
Para mostrar os headers da resposta, utilize a opção --head, como no exemplo abaixo.
curl --head https://blog.midnighthackings.com
Vários sites realizam redirecionamento para um subdomínio específico quando o domínio principal é acesado. Isso é sinalizado a partir da resposta HTTP 301 ou 302. Conforme imagem abaixo, o curl não seguirá por padrão o redirecionamento:
curl https://midnighthackings.com
Para seguir o redirecionamento, utilize a opção -L. Dessa vez o curl irá carregar o site corretamente:
curl -L https://midnighthackings.com
Para enviar dados via POST, temos primeiro que especificar o método HTTP como POST via opção -X e informar o corpo da requisição via opção --data. No exemplo abaixo, estamos tentando logar em uma aplicação de teste, passando no corpo da requisição o usuário e senha.
curl -L -X POST --data "username=myuser&pass=mypassword" http://testphp.vulnweb.com/userinfo.php
-U meuuseragent
: modificar User-Agent para myuseragent
-H "myheader: value"
: adicionar header HTTP à requisição