<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    【技術分享】梨子帶你刷burpsuite靶場系列之客戶端漏洞篇 – 基于DOM的漏洞

    VSole2021-08-19 11:04:19

     

    本系列介紹

    PortSwigger是信息安全從業者必備工具burpsuite的發行商,作為網絡空間安全的領導者,他們為信息安全初學者提供了一個在線的網絡安全學院(也稱練兵場),在講解相關漏洞的同時還配套了相關的在線靶場供初學者練習,本系列旨在以梨子這個初學者視角出發對學習該學院內容及靶場練習進行全程記錄并為其他初學者提供學習參考,希望能對初學者們有所幫助。

    什么是DOM?

    DOM,全稱document object model,譯為文檔對象模型。是瀏覽器對頁面元素的分層表示。網站可以使用JS操作DOM的節點和對象以及它們的屬性。在DOM的概念中有兩個專有名詞source和sink,目前梨子還找不到合適的中文翻譯。我們暫且理解為DOM操作的入口點和出口點。如果當不安全的payload從入口點傳遞給出口點則可能存在基于DOM的漏洞。

    source

    source是一個JS屬性,可以接收用戶輸入。比如location.search,它可以從查詢字符串中獲取數據,這也是攻擊者比較容易利用的點。還有其他的也是容易被攻擊者控制的source,例如document.referrer、document.cookie還有Web消息等。

    sink

    既然source是接收用戶輸入,那么sink就是使用危險的方式處理source的函數或DOM對象。比如eval()就是一種sink,可以處理JS傳遞給它的參數值。還有一種sink是document.body.innerHTML,攻擊者可以向其注入惡意的HTML和JS腳本并執行。

    什么是污點流(Taint-flow)?

    當網站將數據從source傳遞給sink,然后sink以不安全的方式處理該數據,則可能出現基于DOM的漏洞。危險的數據由source流向sink,所以叫做污點流(Taint-flow)。最常見的source就是URL,通常使用location對象訪問。攻擊者可以構造一個鏈接,然后讓受害者跳轉到指定的頁面。例如

    goto = location.hash.slice(1)if (goto.startsWith('https:')) {  location = goto;}
    

    上面這段代碼會檢查URL,如果包含以https開頭的哈希片段則提取location.hash屬性的值并將其設置為window對象的location屬性。所以攻擊者可以構造這樣的URL來利用這個基于DOM的開放重定向漏洞。

    https://www.innocent-website.com/example#https://www.evil-user.net

    經過上面那段代碼處理以后,會將https://www.evil-user.net 設置為location屬性的值,這會自動將受害者重定向到該站點。一般可以用于釣魚攻擊。

    常見的source

    下面列出一些常見的可能觸發污點流(Taint-flow)漏洞的source

    • document.URL
    • document.documentURI
    • document.URLUnencoded
    • document.baseURI
    • location
    • document.cookie
    • document.referrer
    • window.name
    • history.pushState
    • history.replaceState
    • localStorage
    • sessionStorage
    • IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
    • Database

    下面幾種數據也是可能觸發污點流(Taint-flow)漏洞的source

    • 反射型數據(已在XSS專題中講解)
    • 存儲型數據(已在XSS專題中講解)
    • Web消息

    以Web消息為source的基于DOM的漏洞

    如果網站以不安全的方式傳遞Web消息,例如,未在事件偵聽器中正確驗證傳入的Web消息的源,則事件偵聽器調用的屬性和函數可能會成為sink。攻擊者可以托管惡意iframe并使用postMessage()方法將Web消息數據傳遞給事件監聽器,然后將payload發送到父頁面上的sink。這就以為著攻擊者可以以Web消息為source將惡意數據傳遞到這些所有的sink。

    如何以Web消息為source構造攻擊?

    首先我們考慮這樣的代碼

    <script>window.addEventListener('message', function(e) {  eval(e.data);});script>
    

    這段代碼添加了一個事件監聽器,在接收到消息時執行里面的data部分。這里我們通過iframe注入這個消息

    domburpsuite
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    DOM,全稱document object model,譯為文檔對象模型。是瀏覽器對頁面元素的分層表示。
    Web緩存就是服務器會先將之前沒見過的請求對應的響應緩存下來,然后當有認為是相同請求的時候直接將緩存發給用戶,這樣可以減輕服務器的負荷。
    點擊劫持,就是誘導受害者點擊頁面上透明的按鈕或鏈接以發送一些惡意的請求。
    NoXss是一個供web安全人員批量檢測xss隱患的腳本工具。其主要用于批量檢測,比如掃描一些固定的URL資產,或者流量數據,會有不錯的效果。測試到目前一個月發現將近300個xss。
    1.驗證碼復用 漏洞描述 當服務器端受理請求后,沒有將上一次保存的session及時清空,將會導致驗證碼可重復使用 通常情況下在網站注冊、登錄、找回密碼等頁面都會設計驗證碼驗證。如果設計不合理,將會刀子驗證碼在驗證成功一次之后,下次使用的就不在驗證也就說可以重復使用。 案例: 可以看到此處前端登錄雖有驗證碼驗證,但是只驗證一次。后續可一直使用該驗證碼。 測試方法:發送到repeater
    Headless Chrome是谷歌Chrome瀏覽器的無界面模式,通過命令行方式打開網頁并渲染,常用于自動化測試、網站爬蟲、網站截圖、XSS檢測等場景。
    以上功能點均存在類似的通過修改請求方式的CSRF漏洞。字段來驗證請求的主動性。AddTime參數能控制前臺顯示的時間,但是時間格式有嚴格限制,無法實現存儲型XSS。經測試,該處存在CSRF可以通過此種方式替他人創建文章分類。
    當我們輸入正確的手機號和正確的短信驗證碼,然后進入重置密碼的最后一步,也就是輸入新的密碼輸入密碼后提交到服務端的post數據包需要包含當前用戶的身份信息。修改響應包重置任意賬號密碼:通過手機找回密碼一般需要短信驗證碼驗證,服務端需要告訴客戶端,輸入的驗證碼是否正確。
    自己接過的一個項目,不過其實是客戶自己在使用的一個SaaS平臺,也就是對SaaS平臺的測試本質上來說沒有嚴格授權。由于沒有嚴格授權也就將測試范圍局限在了單個網站上,并沒有根據域名進行拓展。Web應用信息通過Burp發送一定請求包,可以得到服務器如下信息:開發語言:ASP. 由于使用的是ASP.NET開發框架,因此服務器中間件大概率是IIS了。以上功能點均存在類似的通過修改請求方式的CSRF漏洞。
    ?上整理的?試問題?全,有些 HW ?試的題,已經收集好了,提供給?家。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类