上心师傅的思路分享(二)
Druid monitor 与Springboot常见报错界面渗透小技巧
目录
前言
1.Druid monitor介绍
2.Druid未授权(1rank)
3.druid弱口令
4.Druid进一步利用
4.1 URL监控
4.2 Session监控
利用思路
EditThisCookie(小饼干插件)
5.SpringBoot Actuator未授权访问漏洞
5.1 简介
5.2 具体利用
5.3 个人利用方式
5.4 fuzz字典
5.5 使用工具
1. SpringBoot-Scan
2. 存在误报的情况
3. 出现端点泄露站点
4. 进一步利用
4.1 heapdump泄露
4.2 SwaggerUI泄露
6.总结
前言
最近回顾看一下上心师傅在上课时分享的渗透思路,结合我个人的实战案例与利用方式加以总结和记录,其中包含上心师傅上课时讲的我之前遇到过的Springboot报错界面druid的渗透思路以及我自己在springboot界面遇到的漏洞利用方式进行总结,下面的思路中的漏洞都是我遇到过的,刚好进行一波复盘.
免责声明
博文中涉及的方法可能带有危害性,博文中的图片中的域名展示仅供参考,并不具有威胁性,仅供安全研究与教学之用,读者将其方法用作做其他用途,由读者承担全部法律及连带责任,文章作者不负任何责任.
下面是上心师傅上课讲的一些思路与我个人当时想到的思路与方式:
1.Druid monitor介绍
Druid是一个非常好用的数据库连接池,但是他的好并不止体现在作为一个连接池加快数据访问性能上和连接管理上,他带有一个强大的监控工具:Druid Monitor。不仅可以监控数据源和慢查询,还可以监控Web应用、URI监控、Session监控、Spring监控。
想知道如何进行在本地搭建的师傅可以看下面师傅的这篇文章
Druid Monitor监控-CSDN博客https://blog.csdn.net/rgh520219/article/details/103107914#:~:text=Druid%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%E5%B8%B8%E5%A5%BD%E7%94%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%EF%BC%8C%E4%BD%86%E6%98%AF%E4%BB%96%E7%9A%84%E5%A5%BD%E5%B9%B6%E4%B8%8D%E6%AD%A2%E4%BD%93%E7%8E%B0%E5%9C%A8%E4%BD%9C%E4%B8%BA%E4%B8%80%E4%B8%AA%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%8A%A0%E5%BF%AB%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E6%80%A7%E8%83%BD%E4%B8%8A%E5%92%8C%E8%BF%9E%E6%8E%A5%E7%AE%A1%E7%90%86%E4%B8%8A%EF%BC%8C%E4%BB%96%E5%B8%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E5%BC%BA%E5%A4%A7%E7%9A%84%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%EF%BC%9ADruid,Monitor%E3%80%82%20%E4%B8%8D%E4%BB%85%E5%8F%AF%E4%BB%A5%E7%9B%91%E6%8E%A7%E6%95%B0%E6%8D%AE%E6%BA%90%E5%92%8C%E6%85%A2%E6%9F%A5%E8%AF%A2%EF%BC%8C%E8%BF%98%E5%8F%AF%E4%BB%A5%E7%9B%91%E6%8E%A7Web%E5%BA%94%E7%94%A8%E3%80%81URI%E7%9B%91%E6%8E%A7%E3%80%81Session%E7%9B%91%E6%8E%A7%E3%80%81Spring%E7%9B%91%E6%8E%A7%E3%80%82
2.Druid未授权(1rank)
在springboot常见报错界面直接拼接常见路径(可构造未授权拼接尝试):
html:
ip/druid/index.html ##Druid Index
ip/druid/sql.html ##Druid sql监控页面
ip/druid/weburi.html ##Druid Web URI监控页面
ip/druid/websession.html ##Druid Web Session监控页面json:
ip/druid/weburi.json ##Druid Web URI json
ip/druid/websession.json ##Druid Web Session jsonDruid 登录接口:
ip/druid/login.html ##Druid登录认证页面
下面就是springboot常见的爆粗界面
未授权,就是如下这种情况,经典springboot报错.我通常会尝试拼接/druid看是否会直接进入后台页面,或是出现登录界面
或是出现登录界面拼接上面路径下对应的下面路径,看能进入出现如下图所示的页面,代表存在druid未授权,1 rank到手
下面的接口路径是url如果是第一条,出现登录界面,可以尝试下面的语句,看是否存在未授权登录
如下图所示,拼接/druid后出现登录界面,尝试弱口令无法进入,尝试拼接未授权页面,发现进入后台页面
如果出现登录界面无法弱口令尝试无效时,可尝试通过未授权进入
/druid/login.html/druid/index.html/prod-api/druid/login.html/prod-api/druid/index.html/dev-api/druid/login.html/dev-api/druid/index.html/api/druid/login.html/api/druid/index.html/admin/druid/login.html/admin-api/druid/login.html
3.druid弱口令
ruoyi/123456 是我个人碰到的常见组合
常见用户:admin ruoyi druid
常见密码:123456 12345 ruoyi admin druid admin123 admin888
4.Druid进一步利用
其中 URL Session Spring这三个我们需要重点关注的监控
4.1 URL监控
URL监控可以实时查看别人访问的url路径,这里我们可以去查看有没有一些敏感信息的接口,比如说获取用户信息的一些接口,登录界面(可以和下面进行配合)等
可惜我当时监控的时候,并没有什么有价值的路径,但是可以耐心等待,如果有管理员或其他用户访问一些重要的信息的接口话,访问后获取到信息就能拿到中危以及高危了,这里接口也比较少,我就尝试了几个
/page/list
/page/info/2
/page/control/params/list/2
/page/control/params/7
/media/video/list/page
/media/video/list
/media/image/list/3
/media/image/list/2
/media/image/list/1
出现下面的代表有权限访问,并且成功拿到数据,如果出现401显示未授权的话,那就要利用到下面的Session监控了,当然有可能接口时POST请求的话,就要通过burp抓包了
假如说在url中出现下面两的url
/xx.action
/xxx.do
都可以打一波Struts2最终getshell
低版本默认 shiro 默认 key:kPH+bIxk5D2deziIxcaaaA==
4.2 Session监控
利用思路
如果出现上面访问接口时出现401如果我们要获取数据,就得想办法拿到更高的权限了,可以通过查看Session监控,因为这个也是实时监控的,所以做好等工作或是上班时间,可能访问的用户会多一些,出现session后,我们可以将页面中的Seesion数据收集起来,通过burp尝试去跑
如果是未授权进来的话,只需要在跑URL接口的数据时,进行Session遍历,查看是否获取到了数据,我们的目的就是找到管理员或是更高权限的用户的session
如果是登录界面的,我们可以在登录界面进行抓包,然后将session替换为获取到的session遍历,然后查看是否进入,进入的话我们在进行抓包然后上面的接口获取数据的操作
EditThisCookie(小饼干插件)
具体如何使用可以看下面师傅的这篇博文
EditThisCookie使用-CSDN博客https://blog.csdn.net/ss810540895/article/details/109775087
5.SpringBoot Actuator未授权访问漏洞
这个漏洞也是Springboot报错页面常见的漏洞之一我也捡到过一个洞,具体利用方式如下
5.1 简介
Spring Boot Actuator是Spring Boot项目中的一个模块,它提供了一组用于监控和管理Spring Boot应用程序的端点。这些端点可以用来检索应用程序的运行状态、查看应用程序的统计数据、查看应用程序中的配置信息等。此外,还可以使用Actuator执行一些安全操作,如关闭应用程序。使用Actuator可以更好的监控、管理和维护Spring Boot应用程序。
5.2 具体利用
尝试在报错界面拼接下面的端点,当然如果拼接无法返回数据的话,也有可能是api的路径不对,尝试fuzz目录或是接口,然后再进行拼接
其中以下是它端点:
Http | 路径 | 描述 |
---|---|---|
get | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
get | /configprops | 描述配置属性(包含默认值)如何注入 Bean |
get | /beans | 描述应用程序上下文里全部的 Bean,以及它们的关系 |
get | /dump | 获取线程活动的快照 |
get | /env | 获取全部环境属性 |
get | /env/{name} | 根据名称获取特定的环境属性值 |
get | /health | 报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供 |
get | /info | 获取应用程序的定制信息,这些信息由 info 打头的属性提供 |
get | /mappings | 描述全部的 URI 路径,以及它们和控制器(包含 Actuator 端点)的映射关系 |
get | /metrics | 报告各种应用程序度量信息,比如内存用量和 HTTP 请求计数 |
get | /metrics/{name} | 报告指定名称的应用程序度量值 |
post | /shutdown | 关闭应用程序,要求 endpoints.shutdown.enabled 设置为 true(默认为 false) |
get | /trace | 提供基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等) |
get | /heapdump | 获取正在运行的JVM的堆转储 |
5.3 个人利用方式
我个人会尝试选择拼接这个路径,如果出现很多端点,那么OK,可以直接搜索,比较重要的几个端点
如果设置了 management.endpoints.web.exposure.include
为 *
,就可以在 /actuator
看到所有存在的端点,截图如下:
/actuator
5.4 fuzz字典
或者尝试使用burp进行fuzz,这种时候不确定路径的时候,需要先找出准确的的API返回路径
如下所示.正常我们是在报错接口的跟路径下尝试,当然也存在可能是在别的路径下进行拼接
http://xxxx.xxx.xxx.xxx:xx/api/actuator
api-docs
actuator
actuator/./env
actuator/auditLog
actuator/auditevents
actuator/autoconfig
actuator/beans
actuator/caches
actuator/conditions
actuator/configurationMetadata
actuator/configprops
actuator/dump
actuator/env
actuator/events
actuator/exportRegisteredServices
actuator/features
actuator/flyway
actuator/health
actuator/healthcheck
actuator/httptrace
actuator/hystrix.stream
actuator/info
actuator/integrationgraph
actuator/jolokia
actuator/logfile
actuator/loggers
actuator/loggingConfig
actuator/liquibase
actuator/metrics
actuator/mappings
actuator/scheduledtasks
actuator/swagger-ui.html
actuator/prometheus
actuator/refresh
actuator/registeredServices
actuator/releaseAttributes
actuator/resolveAttributes
actuator/scheduledtasks
actuator/sessions
actuator/springWebflow
actuator/sso
actuator/ssoSessions
actuator/statistics
actuator/status
actuator/threaddump
actuator/trace
actuator/env.css
artemis-portal/artemis/env
artemis/api
artemis/api/env
auditevents
autoconfig
api
api.html
api/actuator
api/index.html
api/swagger-ui.html
api/v2/api-docs
api/v2;%0A/api-docs
api/v2;%252Ftest/api-docs
api-docs
beans
caches
cloudfoundryapplication
conditions
configprops
distv2/index.html
docs
druid
druid/index.html
druid/login.html
druid/websession.html
dubbo-provider/distv2/index.html
dump
decision/login
entity/all
env
env.css
env/(name)
eureka
flyway
gateway/actuator
gateway/actuator/auditevents
gateway/actuator/beans
gateway/actuator/conditions
gateway/actuator/configprops
gateway/actuator/env
gateway/actuator/health
gateway/actuator/httptrace
gateway/actuator/hystrix.stream
gateway/actuator/info
gateway/actuator/jolokia
gateway/actuator/logfile
gateway/actuator/loggers
gateway/actuator/mappings
gateway/actuator/metrics
gateway/actuator/scheduledtasks
gateway/actuator/swagger-ui.html
gateway/actuator/threaddump
gateway/actuator/trace
gateway/routes
health
httptrace
hystrix
info
integrationgraph
jolokia
jolokia/list
jeecg/swagger-ui
jeecg/swagger/
liquibase
list
logfile
loggers
liquibase
metrics
mappings
monitor
nacos
prod-api/actuator
prometheus
portal/conf/config.properties
portal/env/
refresh
scheduledtasks
sessions
spring-security-oauth-resource/swagger-ui.html
spring-security-rest/api/swagger-ui.html
static/swagger.json
sw/swagger-ui.html
swagger
swagger/codes
swagger/doc.json
swagger/index.html
swagger/static/index.html
swagger/swagger-ui.html
swagger-dubbo/api-docs
swagger-resources
swagger-resources/configuration/ui
swagger-resources/configuration/security
swagger-ui
swagger-ui.html
swagger-ui.html;
swagger-ui/html
swagger-ui/index.html
system/druid/index.html
system/druid/webseesion.html
threaddump
template/swagger-ui.html
trace
users
user/swagger-ui.html
version
v1/api-docs/
v2/api-docs/
v3/api-docs/
v1/swagger-resources
v2/swagger-resources
v3/swagger-resources
v1.1/swagger-ui.html
v1.1;%0A/api-docs
v1.2/swagger-ui.html
v1.2;%0A/api-docs
v1.3/swagger-ui.html
v1.3;%0A/api-docs
v1.4/swagger-ui.html
v1.4;%0A/api-docs
v1.5/swagger-ui.html
v1.5;%0A/api-docs
v1.6/swagger-ui.html
v1.6;%0A/api-docs
v1.7/swagger-ui.html
v1.7;%0A/api-docs
v1.8/swagger-ui.html
v1.8;%0A/api-docs
v1.9/swagger-ui.html
v1.9;%0A/api-docs
v2.0/swagger-ui.html
v2.0;%0A/api-docs
v2.1/swagger-ui.html
v2.1;%0A/api-docs
v2.2/swagger-ui.html
v2.2;%0A/api-docs
v2.3/swagger-ui.html
v2.3;%0A/api-docs
v1/swagger.json
v2/swagger.json
v3/swagger.json
v2;%0A/api-docs
v3;%0A/api-docs
v2;%252Ftest/api-docs
v3;%252Ftest/api-docs
webpage/system/druid/websession.html
webpage/system/druid/index.html
webroot/decision/login
webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js
webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js?v=2.9.2
webjars/springfox-swagger-ui/springfox.js
webjars/springfox-swagger-ui/springfox.js?v=2.9.2
webjars/springfox-swagger-ui/swagger-ui-bundle.js
webjars/springfox-swagger-ui/swagger-ui-bundle.js?v=2.9.2
%20/swagger-ui.html
5.5 使用工具
1. SpringBoot-Scan
这款工具是曾哥开发的一款对于Sprinboot未授权访问的一款工具,当然,如果自己没有判断前,可以尝试用这个工具判断一下是否为spring的站
工具包含对spring的识别,以及进行延时扫,避免扫崩站点,自己写脚本也很简单,但是有写好的好用的工具,当前用工具咯
工具会将泄露的端点以红色显示出来,无法访问的会以黄色404显示出来,出现紫色的话代表存在页面,但是因为权限的原因,无法获取到信息
2. 存在误报的情况
如果出现扫描的页面,存在页面长度一致的
3. 出现端点泄露站点
4. 进一步利用
4.1 heapdump泄露
如何进行进一步利用,目前我个人只尝试过两种利用方式,如果下面两个其中之一的端点泄露的话
尝试搜索一些关键的数据库比如mysql或是redis,看是否存在泄露,会出现脱敏现象,我们需要借助另一个端点,其中redis和mysql数据库等秘钥信息泄露,后面会使用工具将脱敏的秘钥获取到明文,只要能成功接管,那么就是高危:
/actuator/./env/actuator/env
# 这个是进一步利用需要借助的端点
/actuator/heapdump
下面就通过我遇到过的一个站点做演示
直接Ctrl+F全局搜索,一些关键的数据库,或是自己一点一点去查看
redis
mysql
接下来访问这个路径,进行下载
/actuator/heapdump
Heap Dump文件泄露,访问路径会返回一个GZip压缩的JVM堆dump,其中是jvm heap信息,
尝试使用JVisualVM
:JDK 自带工具,供开发者用于监视,故障排除。
打开工具在左上角,的文件处将heapdump文件导入,点击堆的概述部分,在概述部分的下面点击系统属性,可以看到一部分敏感信息泄露
然后点击OQL控制台,然后在查询编辑器中输入select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())进行查询,可以发现
切换至类标签,在下方输入框限制检索条件java.util.Hashtable
,点击结果中第一项java.util.Hashtable$Entry
依次查看其中的敏感信息,然后this后面的值代表第几个实例例如我下面的#494,#498,按照我的经验来基本账户密码信息都在靠后的实例中,发现了root用户,以及最初查询到的密码,还有数据库名
经过使用不同工具查询,目前根据返回的密码信息,发现返回多个密码信息均为Passw0rd@123
如果想看更加详细的文章的话可以看下面这篇文章,当然很多人接触时会看不懂,我也一样
【web安全】Spring boot heapdump获取敏感信息_Java_H_InfoQ写作社区https://xie.infoq.cn/article/a4a4287321b98f5d07febc716
4.2 SwaggerUI泄露
具体就是这个接口文档泄露,出现接口泄露时,可以通过尝试调用不同接口组合来获取信息,我之前遇到过一个站点,就是通过获取到不同的接口后,需要配合其他接口获取到的id和其他的信息来进一步利用,也可以尝试通过使用工具来进行参数fuzz,当然注意删除和增加的数据接口,不要乱测试
详细的介绍太多了,这里仅做记录,如果需要进一步利用的师傅可以看下面师傅的利用,比较详细
Swagger ui接口自动化批量漏洞测试_swagger 漏洞-CSDN博客https://blog.csdn.net/qq_44159028/article/details/127878364
/actuator/swagger-ui.html
6.总结
对自己之前测试过程中遇到的Springboot页面的常见漏洞进行回顾,同时通过上心师傅的讲解,让我对druid有了进一步利用的思路,之前只是通过简单的未授权和弱口令,对于接口的利用知道但不会利用,慢慢学习,慢慢成长.
相关文章:

上心师傅的思路分享(二)
Druid monitor 与Springboot常见报错界面渗透小技巧 目录 前言 1.Druid monitor介绍 2.Druid未授权(1rank) 3.druid弱口令 4.Druid进一步利用 4.1 URL监控 4.2 Session监控 利用思路 EditThisCookie(小饼干插件) 5.SpringBoot Actuator未授权访问漏洞 5.1 简介 5…...

116页 | 2024年中国金融行业网络安全研究报告(免费下载)
以上是资料简介和目录,如需下载,请前往星球获取!!!...

基于fabric封装一个简单的图片编辑器(vue 篇)
介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装,实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…...

Linux中 .PHONY 和 all 在 Makefile 中的作用
1 .PHONY 和 all .PHONY 是 GNU make 工具中的一个特殊指令,用于指示某个目标是一个伪目标。伪目标并不对应于实际的文件,而是用来执行一系列命令的标识符。使用 .PHONY 的好处包括避免与现有文件同名造成的冲突,以及提高 make 的执行效率&am…...

Flutter 中的 FlexibleSpaceBar 小部件:全面指南
Flutter 中的 FlexibleSpaceBar 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它提供了丰富的组件来帮助开发者构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的组件库中,FlexibleSpaceBar 是一个与 SliverAppBar …...

每天一个数据分析题(三百五十四)-分析报表
分析报表的主要作用是通过可视化图表的形式将各种分析结果完整、准确地呈现给阅读者,帮助阅读者读懂数据,从而进一步发现数据背后隐藏的业务问题。下列说法正确的是? A. 静态报表的主要载体是电子表格工具 B. BI报表的数据源获取方式是应用…...

卫星通信频段有哪些
卫星通信使用到的频段涵盖L, S, C, Ku, Ka等,而最常用的频段是C(4~8GHz)和Ku(12~18GHz)频段,而Ka(27-40GHz)频段是后起之秀。目前地球赤道上空有限的地球同步卫星轨位几乎已被各国占满,C和Ku频段内的频率资源被大量使用,而Ka频段的…...

RobotMaster编程语言:深度探索与实践挑战
RobotMaster编程语言:深度探索与实践挑战 RobotMaster编程语言,作为机器人编程领域的一颗璀璨明珠,其独特性与复杂性吸引了无数探索者的目光。本文将从四个方面、五个方面、六个方面和七个方面深入剖析这一编程语言的奥秘,同时揭…...

Ascend训练软件栈了解
一.分布式大模型训练的完整流程及注意事项 1. 迁移分析 模型选取与约束说明 : 确保模型能在GPU或CPU上运行并获取性能基线,了解不支持场景,如DP模式、APEX库、bmtrain框架等。支持度分析 : 使用msFmkTransplt工具分析模型算子、…...

官网万词霸屏推广 轻松实现百度万词霸屏源码系统 带完整的安装代码包以及搭建教程
系统概述 官网万词霸屏推广源码系统是一款基于先进技术研发的综合性 SEO 工具。它的设计理念是通过智能化的算法和策略,帮助用户快速提升网站在百度等搜索引擎中的排名,实现大量关键词的霸屏效果。该系统整合了多种优化技术,包括关键词研究、…...

Linux 36.3 + JetPack v6.0@jetson-inference之图像分类
Linux 36.3 JetPack v6.0jetson-inference之图像分类 1. 源由2. imagenet2.1 命令选项2.2 下载模型2.3 操作示例2.3.1 单张照片2.3.2 视频 3. 代码3.1 Python3.2 C 4. 参考资料5. 补充5.1 第一次运行模型本地适应初始化5.2 samba软连接 1. 源由 从应用角度来说,图…...

重庆公司记账代理,打造专业财务管理解决方案的领先企业
重庆公司记账代理,作为专业的财务管理服务提供商,我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持,我们通过长期的专业经验和对市场的深入理解,为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…...

transformers 阅读:Llama 模型
正文 学习一下 transformers 库中,Llama 模型的代码,学习过程中写下这篇笔记,一来加深印象,二来可以多次回顾。 笔者小白,里面错误之处请不吝指出。 层归一化 LlamaRMSNorm transformers 中对于 LlamaRMSNorm 类的…...

python绘制piper三线图
piper三线图 Piper三线图是一种常用于水化学分析的图表,它能够帮助我们理解和比较水样的化学成分。该图表由三个部分组成:两个三角形和一个菱形。两个三角形分别用于显示阳离子和阴离子的相对比例,而菱形部分则综合显示了这些离子比例在水样…...

咖啡机器人如何精准控制液位流量
在如今快节奏的生活中,精确控制液位流量的需求愈发迫切,特别是在咖啡机器人等精密设备中。为了满足这一需求,工程师们不断研发出各种先进的技术,以确保液体流量的精准控制。其中,霍尔式流量计和光电式流量计就是两种常…...

Go go-redis应用
go-redis 是 Go 语言的一个流行的 Redis 客户端库,它提供了丰富的功能来与 Redis 数据库进行交互。 1、简单应用 package mainimport ("context""fmt""log""github.com/redis/go-redis/v9" )func main() {ctx : context…...

从混乱到有序:PDM系统如何优化物料编码
在现代制造业中,物料管理是企业运营的核心。物料编码作为物料管理的基础,对于确保物料的准确性、唯一性和高效性至关重要。随着产品种类的不断增加和产品变型的多样化,传统的物料编码管理方式已经不能满足企业的需求。本文将探讨产品数据管理…...

npm发布自己的插件包
要发布自己的插件包到npm,可以按照以下步骤进行操作: 1.创建一个新项目 首先确保你已经安装了Node.js和npm。然后,在你的项目目录中初始化一个新的npm项目:npm init命令会引导你创建一个package.json文件,其中包含你插件包的基本…...

Pygame:新手指南与入门教程
在游戏开发领域,pygame 是一个广受欢迎的 Python 库,它提供了开发二维游戏的丰富工具和方法。这个库让开发者可以较少地关注底层图形处理细节,更多地专注于游戏逻辑和玩法的实现。本文将详细介绍 pygame,包括其安装过程、基本概念、主要功能和一个简单游戏的开发流程。 一…...

动态IP与静态IP的优缺点
在网络连接中,使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务,而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点: 更好的 DNS 支持:静态 IP 地址在…...

上海市计算机学会竞赛平台2024年1月月赛丙组最大的和
题目描述 给定两个序列 𝑎1,𝑎2,…,𝑎𝑛a1,a2,…,an 与 𝑏1,𝑏2,…,𝑏𝑛b1,b2,…,bn,请从这两个序列中分别各找一个数,要求这两个数的差不超过给…...

C++三大特性之继承,详细介绍
阿尼亚全程陪伴大家学习~ 前言 每个程序员在开发新系统时,都希望能够利用已有的软件资源,以缩短开发周期,提高开发效率。 为了提高软件的可重用性(reusability),C提供了类的继承机制。 1.继承的概念 继承: 指在现有…...

Python推导式详解
引言 推导式(Comprehensions)是Python中一种简洁且强大的语法结构,可以用来生成列表、字典和集合。推导式使得代码更加简洁、易读,同时也更具Pythonic风格。今天我将将详细介绍列表推导式、字典推导式和集合推导式…...

stm32中如何实现EXTI线 0 ~ 15与对应IO口的配置呢?
STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。 STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18: 线0~15:对应外部 IO口的输入中断。 线16&…...

Python 短文本匹配,短文本语义相似度,基于大模型的短文本匹配,基于LLMs的短文本语义相似度识别,短文本语义扩充和匹配
1.任务描述 之前在做疾病相似度匹配的时候,堪称史诗级难题,虽然最后加上规则以及一些nlp模型,取得了差强人意的效果,但是短文本的语义相似度匹配一直属于比较难以攻克的难题 2.思路 随着近年大模型的飞速发展,就之前…...

提升接口性能方式汇总
1,sql 2,缓存,尤其面向用户,如app数据。可用redis咖啡,二级缓存。 充分利用redis,redis数据类型很多,平时场景中结合实际情况,找一下对应的redis实现方案 比如Zset可以排序&#…...

C++中的常见语法糖汇总
C中的语法糖是指使代码更简洁、可读性更高的语言特性和简化的语法。以下是一些常见的C语法糖: 1. 自动类型推导(auto) 使用 auto 关键字可以让编译器自动推导变量的类型,简化变量的声明。 auto x 10; // 编译器推导 x…...

TensorFlow Playground神经网络演示工具使用方法详解
在现代机器学习领域,神经网络无疑是一个重要的研究方向。然而,对于许多初学者来说,神经网络的概念和实际操作可能显得相当复杂。幸运的是,TensorFlow Playground 提供了一个交互式的在线工具,使得我们可以直观地理解和实验神经网络的基本原理。在这篇博客中,我们将详细介…...

【git】subtree 简单教程
git subtree使用案例 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&am…...

C语言基础:字符串函数使用与剖析
strtok(分割字符串) char * strtok ( char * str, const char * sep ); sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记。strtok函数找…...