SSRF漏洞總結
阿新 • • 發佈:2020-08-09
SSRF是什麼?
(服務端請求偽造)是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。
file_get_contents(),fsockopen(),curl_exec()三個函式使用不當時將會造成ssrf
SSRF的危害?
- 探測內網資訊
- 攻擊內網或本地其他服務
- 利用file協議讀取本地檔案
- 對內網web應用進行指紋識別
- 埠掃描
gopher、dict協議以及redis服務、Curl 命令
Gopher
協議可以做很多事情,特別是在 SSRF 中可以發揮很多重要的作用。利用此協議可以攻擊內網的FTP、Telnet、Redis、Memcache
,也可以進行GET、POST
請求。DICT
A Dictionary Server Protocol
,允許客戶端在使用過程中訪問更多字典並且該協議約定伺服器端偵聽埠號:2628
。redis
服務是在6379
埠開啟的
curl命令:
curl 是常用的命令列工具,用來請求 Web 伺服器。它的名字就是客戶端(client)的 URL 工具的意思 不帶有任何引數時,curl 就是發出 GET 請求
eg:
curl https://www.example.com
-v
引數輸出通訊的整個過程,用於除錯。我們便可以利用-v
引數進行讀取檔案:
使用file協議curl -v file:///etc/passwd
使用ftp協議 curl -v "ftp://127.0.0.1:埠/info"
使用dict協議 curl -v "dict://127.0.0.1:埠/info"
使用gopher協議 curl -v "gopher://127.0.0.1:埠/_info"
修復方法:
修復方案: • 限制協議為HTTP、HTTPS • 禁止30x跳轉
• 設定URL白名單或者限制內網IP
SSRF利用(一):
關於file()與file_get_content():
詳見:
https://www.cnblogs.com/3cH0-Nu1L/p/13462107.html
SSRF利用(二):
①訪問正常檔案
訪問正常的檔案,提交引數[?url=http://www.xxx.com/robots.txt]
②埠掃描
當訪問未開放埠,指令碼會顯示空白或者報錯。提交引數[?url=dict://127.0.0.1:2333]
當訪問開放埠時,指令碼會顯示banner 資訊。
提交引數[?url=dict://172.16.132.152:22](有成功率)
提交引數[?url=dict://127.0.0.1:3306]
提交引數[?url=dict://127.0.0.1:21]
③讀取本地系統檔案
利用file 協議可以任意讀取系統本地檔案,提交引數\
[?url=file://c:\windows\system32\drivers\etc\hosts]
④內網Web應用指紋識別
識別內網應用使用的框架,平臺,模組以及cms可以為後續的滲透測試提供很多幫助。
大多數web應用框架都有一些獨特的檔案和目錄。
通過這些檔案可以識別出應用的型別,甚至詳細的版本。
根據這些資訊就可以針對性的蒐集漏洞進行攻擊。
比如可以通過訪問下列檔案來判斷phpMyAdmin是否安裝以及詳細版本。
[?url=http://localhost/phpmyadmin/README]
⑤攻擊內網應用
內網的安全通常都很薄弱,溢位、弱口令等一般都是存在的。
通過ssrf攻擊,可以實現對內網的訪問,從而可以攻擊內網應用或者本地機器,獲得shell,這裡的應用包括服務、Web 應用等。
僅僅通過get方法可以攻擊的web應用有很多,比如struts2命令執行等。
SSRF防禦:
①限制協議
僅允許http和https請求。
②限制IP
避免應用被用來獲取內網資料,攻擊內網。
③限制埠
限制請求的埠為http常用的埠,比如,80,443,8080,8090。
④過濾返回資訊
驗證遠端伺服器對請求的響應是比較簡單的方法。
⑤統一錯誤資訊
免使用者可以根據錯誤資訊來判斷遠端伺服器的埠狀態
參考:
https://blog.csdn.net/weixin_30633949/article/details/97824781