上一節講到了滲透測試中xss跨站攻擊檢測方法和防護,這一節也是關于跨站攻擊的另一個手法CSRF,很多客戶找到我們想要了解更多的跨站攻擊檢測方法以及防禦此類攻擊的辦法,想要讓網站的安全性更加堅固,對此提醒大家滲透測試網站必須要拿到授權才能測試哦!

3.3.1. 簡介
CSRF(Cross-site request forgery)跨站請求僞造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點内的信任使用者,而CSRF則通過僞裝來自受信任使用者的請求來利用受信任的網站。
3.3.2. 分類
3.3.2.1. 資源包含
資源包含是在大多數介紹CSRF概念的示範或基礎課程中可能看到的類型。這種類型歸結為控制HTML标簽(例如、、
由于缺少對Cookie的源點檢查,如上所述,此攻擊不需要XSS,可以由任何攻擊者控制的站點或站點本身執行。此類型僅限于GET請求,因為這些是浏覽器對資源URL唯一的請求類型。這種類型的主要限制是它需要錯誤地使用安全的HTTP請求方式。
3.3.2.2. 基于表單
通常在正确使用安全的請求方式時看到。攻擊者建立一個想要受害者送出的表單; 其包含一個Java片段,強制受害者的浏覽器送出。
該表單可以完全由隐藏的元素組成,以緻受害者很難發現它。
如果處理cookies不當,攻擊者可以在任何站點上發動攻擊,隻要受害者使用有效的cookie登入,攻擊就會成功。如果請求是有目的性的,成功的攻擊将使受害者回到他們平時正常的頁面。該方法對于攻擊者可以将受害者指向特定頁面的網絡釣魚攻擊特别有效。
3.3.2.3.
這可能是最少看到的方式。
由于許多現代Web應用程式依賴XHR,許多應用花費大量的時間來建構和實作這一特定的對策。
基于XHR的CSRF通常由于SOP而以XSS有效載荷的形式出現。沒有跨域資源共享政策(CORS),XHR僅限于攻擊者托管自己的有效載荷的原始請求。
這種類型的CSRF的攻擊有效載荷基本上是一個标準的XHR,攻擊者已經找到了一些注入受害者浏覽器DOM的方式。
3.3.3. 防禦
通過CSRF-token或者驗證碼來檢測使用者送出
驗證Referer/Content-Type
對于使用者修改删除等操作最好都使用POST操作
避免全站通用的cookie,嚴格設定cookie的域
3.4. SSRF漏洞
3.4.1. 簡介
服務端請求僞造(Server Side Request Forgery, SSRF)指的是攻擊者在未能取得伺服器所有權限時,利用伺服器漏洞以伺服器的身份發送一條構造好的請求給伺服器所在内網。SSRF攻擊通常針對外部網絡無法直接通路的内部系統。
3.4.2. 漏洞危害
SSRF可以對外網、伺服器所在内網、本地進行端口掃描,攻擊運作在内網或本地的應用,或者利用File協定讀取本地檔案。
内網服務防禦相對外網服務來說一般會較弱,甚至部分内網服務為了運維友善并沒有對内網的通路設定權限驗證,是以存在SSRF時,通常會造成較大的危害。
3.4.3. 利用方式
SSRF利用存在多種形式以及不同的場景,針對不同場景可以使用不同的繞過方式。
以curl為例, 可以使用dict protocol操作Redis、file協定讀檔案、gopher協定反彈Shell等功能,常見的Payload如下:
curl -vvv 'dict://127.0.0.1:6379/info'
curl -vvv 'file:///etc/passwd'
* 注意: 連結使用單引号,避免$變量問題
3.4.4. 相關危險函數
SSRF涉及到的危險函數主要是網絡通路,支援僞協定的網絡讀取。以PHP為例,涉及到的函數有 file_get_contents() / fsockopen() / curl_exec() 等。
3.4.5. 過濾繞過
3.4.5.1. 更改IP位址寫法
一些開發者會通過對傳過來的URL參數進行正則比對的方式來過濾掉内網IP,如采用如下正規表達式:
^10(.(2d|2[0-5]|[01]?d?d)){3}$
^172.(1|[2]d|3[01])(.(2d|2[0-5]|[01]?d?d)){2}$
^192.168(.(2d|2[0-5]|[01]?d?d)){2}$
對于這種過濾我們采用改編IP的寫法的方式進行繞過,例如192.168.0.1這個IP位址可以被改寫成:
8進制格式:0300.0250.0.1
16進制格式:0xC0.0xA8.0.1
10進制整數格式:3232235521
16進制整數格式:0xC0A80001
還有一種特殊的省略模式,例如10.0.0.1這個IP可以寫成10.1。 通路改寫後的IP位址時,Apache會報400 Bad Request,但Nginx、MySQL等其他服務仍能正常工作。 另外,0.0.0.0這個IP可以直接通路到本地,也通常被正則過濾遺漏。
3.4.5.2. 使用解析到内網的域名
XSS全稱為Cross Site ing,為了和CSS分開簡寫為XSS,中文名為跨站腳本。該漏洞發生在使用者端,是指在渲染過程中發生了不在預期過程中的Java代碼執行。XSS通常被用于擷取Cookie、以受攻擊者的身份進行操作等行為。
3.4.5.3. 利用解析URL所出現的問題
在某些情況下,後端程式可能會對通路的URL進行解析,對解析出來的host位址進行過濾。這時候可能會出現對URL參數解析不當,導緻可以繞過過濾。
比如 //@192.168.0.1/ 當後端程式通過不正确的正規表達式(比如将http之後到com為止的字元内容,也就是,認為是通路請求的host位址時)對上述URL的内容進行解析的時候,很有可能會認為通路URL的host,而實際上這個URL所請求的内容都是192.168.0.1上的内容。
3.4.5.4. 利用跳轉
如果後端伺服器在接收到參數後,正确的解析了URL的host,并且進行了過濾,我們這個時候可以使用跳轉的方式來進行繞過。
可以使用如
http://域名.org/redirect-to?url=
http://192.168.0.1等服務跳轉,但是由于URL中包含了192.168.0.1這種内網IP位址,可能會被正規表達式過濾掉,可以通過短位址的方式來繞過。
常用的跳轉有302跳轉和307跳轉,差別在于307跳轉會轉發POST請求中的資料等,但是302跳轉不會。
3.4.5.5. 通過各種非HTTP協定
如果伺服器端程式對通路URL所采用的協定進行驗證的話,可以通過非HTTP協定來進行利用。
比如通過gopher,可以在一個url參數中構造POST或者GET請求,進而達到攻擊内網應用的目的。例如可以使用gopher協定對與内網的Redis服務進行攻擊。
除了gopher協定,File協定也是SSRF中常用的協定,該協定主要用于通路本地計算機中的檔案,我們可以通過類似 file:///path/to/file 這種格式來通路計算機本地檔案。使用file協定可以避免服務端程式對于所通路的IP進行的過濾。例如我們可以通過 file:///d:/1.txt 來通路D盤中1.txt的内容。
3.4.5.6. DNS Rebinding
一個常用的防護思路是:對于使用者請求的URL參數,首先伺服器端會對其進行DNS解析,然後對于DNS伺服器傳回的IP位址進行判斷,如果在黑名單中,就禁止該次請求。
但是在整個過程中,第一次去請求DNS服務進行域名解析到第二次服務端去請求URL之間存在一個時間差,利用這個時間差,可以進行DNS重綁定攻擊。
要完成DNS重綁定攻擊,我們需要一個域名,并且将這個域名的解析指定到我們自己的DNS Server,在我們的可控的DNS Server上編寫解析服務,設定TTL時間為0。這樣就可以進行攻擊了,完整的攻擊流程為:
伺服器端獲得URL參數,進行第一次DNS解析,獲得了一個非内網的IP
對于獲得的IP進行判斷,發現為非黑名單IP,則通過驗證
伺服器端對于URL進行通路,由于DNS伺服器設定的TTL為0,是以再次進行DNS解析,這一次DNS伺服器傳回的是内網位址。
由于已經繞過驗證,是以伺服器端傳回通路内網資源的結果。
3.4.5.7. 利用IPv6
有些服務沒有考慮IPv6的情況,但是内網又支援IPv6,則可以使用IPv6的本地IP如 [::] 0000::1或IPv6的内網域名來繞過過濾。
3.4.5.8. 利用IDN
一些網絡通路工具如Curl等是支援國際化域名(Internationalized Domain Name,IDN)的,國際化域名又稱特殊字元域名,是指部分或完全使用特殊的文字或字母組成的網際網路域名。
在這些字元中,部分字元會在通路時做一個等價轉換,例如 ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ 和 example.com 等同。利用這種方式,可以用 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 等字元繞過内網限制。
3.4.6. 可能的利用點
sftp
tftp(UDP協定擴充)
dict
gopher
ldap
imap/imaps/pop3/pop3s/smtp/smtps(爆破郵件使用者名密碼)
rtsp – smb/smbs(連接配接SMB)
telnet
http、https
mongodb
ShellShock指令執行
JBOSS遠端Invoker war指令執行
Java調試接口指令執行
axis2-admin部署Server指令執行
Jenkins s接口指令執行
Confluence SSRF
Struts2 指令執行
counchdb WEB API遠端指令執行
docker API遠端指令執行
php_fpm/fastcgi 指令執行
tomcat指令執行
Elasticsearch引擎Groovy腳本指令執行
WebDav PUT上傳任意檔案
WebSphere Admin可部署war間接指令執行
Apache Hadoop遠端指令執行
zentoPMS遠端指令執行
HFS遠端指令執行
glassfish任意檔案讀取和war檔案部署間接指令執行
3.4.7. 防禦方式
過濾傳回的資訊
統一錯誤資訊
限制請求的端口
禁止不常用的協定
對DNS Rebinding,考慮使用DNS緩存或者Host白名單,如果想要更完善的網站安全防護,以及提前滲透測試可以找專業的網站安全公司。