CSRF
什么是CSRF?
跨站請求偽造也叫CSRF/XSRF
攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發送郵件、發訊息,盜取你的賬號,添加系統管理員,甚至于購買商品、虛擬貨幣轉賬等,如下:其中Web A為存在CSRF漏洞的網站,Web B為攻擊者構建的惡意網站,User C為Web A網站的合法用戶,
CSRF攻擊的危害
CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求
CSRF危害:以你的名義發送郵件,發訊息,盜取你的賬號,甚至于購買商品,虛擬貨幣轉賬
問題包括:個人隱私泄露以及財產安全
CSRF實作條件
受害者必須一次完成兩個步驟:
1.登錄受信任的網站,并在本地生成Cookie
2.在不登處(退出)網站的情況下,訪問危險網站(攻擊者引導你訪問的站點)
一下為CSRF產生的場景:
1.你不能保證你登錄一個網站后,不在打開一個web頁面并訪問另外的網站
2.你不能保證你關閉瀏覽器后,你本地的Cookie立刻過期,事實上,關閉一個瀏覽器不能結束一個會話,但大多數人都會錯誤的認為關閉瀏覽器就等于退出登錄/結束會話了
3.所謂的攻擊網站,可能是一個存在其他漏洞的可信任的經常被人訪問的網站
CSRF的防御
1.盡量使用POST,限制GET
2.將Cookie設定為HttpOnly
3.增加token驗證
4.增加Referer識別
SSRF——服務端請求偽造
什么是SSRF
? SSRF是一種由攻擊者構造形成由服務器發起請求的一個安全漏洞,一般情況下攻擊者是無法從外網訪問內網的,正因為它是由服務器端發起的,所起它能夠請求到與服務端相連的 而與外網隔離的內部系統
SSRF 攻擊的原理
? 大都是由于服務端提供了從其他服務器應用獲取資料的功能且沒有對目標地址進行過濾和限制
? 比如從指定URL地址獲取網頁文本內容,加載指定地址的圖片和下載等
SSRF攻擊的危害
? SSRF可以對外網,服務器所在內網,本地進行埠掃描,攻擊運行在本地或內網的應用,或者利用File協議讀取本地檔案
1.讓服務端去訪問相應的網址
2.讓服務端去訪問自己所處內網的一些指紋檔案來判斷是否存在相應的cms
3.可以使用file、dict、gopher、ftp、協議進行請求訪問相應的檔案
4.攻擊內網的web應用(可以想內部任意主機的任意埠發送精心構造的資料包{payload})
5.攻擊內網應用程式(利用跨協議通信技術)
6.判斷內網主機是否存貨:方法是訪問是否由埠開放
7.Dos攻擊(請求大檔案,始終保持連接keep-alive-always)
SSRF攻擊防御
1.修改組態檔,加上認證功能
2.對目標地址進行嚴格過濾
3.過濾回傳的資訊
4.統一錯誤資訊
5.限制請求的埠
6.禁止不常用的協議
7.對DNS Rebinding,考慮使用DNS或者HOST白名單
SSRF漏洞可能存在的地方
1.能夠對外發起網路請求的地方就可能存在SSRF漏洞
2.從遠程服務器請求資源(Upload ,from ,URL,Import&EXport,CouchDB )
3.資料庫內置功能(Oracle,MongDB,MSSQL,Postgres,CouchDB)
Webmail 收取其他郵箱郵件(POP3,IMAP,SMTP)
檔案處理,編碼處理,屬性資訊處理(ffmpeg,ImageMagic,DOCX,PDF,XML)
SSRF使用到的相關協議
Dict協議:
? Dict協議,字典服務器協議,dict是基于查詢回應的TCP協議,它的目標,并允許客戶端在使用程序中訪問更多的字典,Dict服務器和而客戶機使用的埠TCP2628;主要用來探測內網埠協議
http協議:
? 主要用來發送http協議,獲取超文本內容,包括文字、圖片、視頻、音頻、等常用互聯網資源
File協議:
? 本地檔案傳輸協議,File協議主要用于訪問本地計算機中的檔案,就如同在Windows資源管理器中打開檔案一樣
Gopher協議:(沒什么用)
? Gopher協議是互聯網上使用的分布型的檔案收集獲取網路協議,gopher協議實在HTTP協議出現之在Internet常見的重用協議,但是現在已經很少用了
利用curl命令的相關操作
curl -v ‘file://127.0.0.1/etc/passws’===利用file協議查看passwd檔案
curl -v ‘dict://127.0.0.1:22’===利用dict協議探測埠是否存活
SSRF-PHP相關危險函式
? SSRF涉及到危險函式主要是用于網路訪問,支持偽協議的網路獲取
以PHP為例:
file_get_content()—從用戶指定的URL獲取圖片,然后把它用一個速記檔案名保存在本地硬碟
fsockopen()—
curl_exec()—使用curl獲取資料
SSRF的繞過技巧
? 后臺一般會對用戶的請求中攜帶的內部ip地址或者HOST進行過濾主要有一下幾種方式進行繞過:
1.更改ip地址寫法
2.利用決議URL所出現的問題
3.利用320跳轉
4.通過非HTTP協議
5.DNS Rebinding
6.利用ipv6
7.利用IDN
更改ip地址寫法繞過
? 后臺對傳入的ip地址會進行過濾,此時需要對ip地址進行轉換格式繞過過濾,對于這種過濾我們采用改編ip的寫法進行繞過
以192.168.0.1舉例
更改ip地址的寫法:
8進制格式:0300.0250.0.1
16進制格式:0xC0.0xA8.0.1
10進制整數格式:3232235521
16進制整數格式:0XC0A80001
合并后兩位:1.1.278/1.1.755
合并后三位:1.278/1.755/3.14.159267
利用決議URL出現問題繞過
? 在某些情況下,后端程式可能會對訪問URL進行決議,對決議出來的HOST地址進行過濾這時候可能出現對URL引數決議不當,導致可以繞過過濾
比如:http://www,baidu.com@192.168.0.1/
? 當后端程式通過不正確的正則運算式(不如將http知道到com為止的內容認為是訪問請求的host地址)對上述URL進行決議的時候很有可能會認為訪問URL的host地址為www.baidu.com,而實際上這個URL所請求的地址是192.168.0.1
利用302跳轉繞過
? 如果后端服務器在接受到引數后,正確的決議了URL的host,并且經行了過濾,這個時候我們可以用302跳轉的方式進行繞過
在網路上有一個非常神奇的服務,http://xip.io當我們訪問這個網站的子域名是,例如192.168.0.1.xip.io就會自動重定向到192.168.0.1
利用DNS Rebinding
? 對于常見的ip限制,后端服務器可能通過
攻擊者注冊一個域名(如attacker.com),并在攻擊者控制下將其代理給DNS服務器, 服務器配置為很短回應時間的TTL記錄,防止回應被快取, 當受害者瀏覽到惡意域時,攻擊者的DNS服務器首先用托管惡意客戶端代碼的服務器的IP地址作出回應, 例如,他們可以將受害者的瀏覽器指向包含旨在在受害者計算機上執行的惡意JavaScript或Flash腳本的網站,
惡意客戶端代碼會對原始域名(例如attacker.com)進行額外訪問, 這些都是由同源政策所允許的, 但是,當受害者的瀏覽器運行該腳本時,它會為該域創建一個新的DNS請求,并且攻擊者會使用新的IP地址進行回復, 例如,他們可以使用內部IP地址或互聯網上某個目標的IP地址進行回復
害者的瀏覽器指向包含旨在在受害者計算機上執行的惡意JavaScript或Flash腳本的網站,
惡意客戶端代碼會對原始域名(例如attacker.com)進行額外訪問, 這些都是由同源政策所允許的, 但是,當受害者的瀏覽器運行該腳本時,它會為該域創建一個新的DNS請求,并且攻擊者會使用新的IP地址進行回復, 例如,他們可以使用內部IP地址或互聯網上某個目標的IP地址進行回復
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290387.html
標籤:其他
上一篇:學Docker命令這一篇就夠了
