您好,登錄后才能下訂單哦!
js文件都能獲取到哪些信息,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
01 簡介
JavaScript已經成為現代Web瀏覽器開發中最普遍的技術之一。有的測試人員只審計html源代碼,而忽略審計js文件里的源代碼,今天我們就來講一講審計js文件都能獲取到哪些信息。
02 詳解
通過審計js文件源代碼能獲取到的信息,我個人將其分為以下四類:敏感信息、業務邏輯、加密算法、Ajax請求。
敏感信息
審計js文件最直觀的就是很有可能獲取到賬號密碼、配置等敏感信息。
HTML定義頁面結構,CSS定義裝修樣式,而JavaScript定義前端工作內容,主要是監聽事件執行動作,比如邏輯判斷,亦或是向服務器發送請求等等。而要正確執行這些動作,通常都會進行一些簡單的配置。
最常見的配置就是設置網站根路徑,不過也經常遇到直接在js文件里配置賬號密碼的情況;更有甚者,有的開發人員直接在js文件里定義SQL語句,然后由前端發送到服務器執行。這不僅泄露了數據庫信息,也提高了SQL注入漏洞攻擊的風險。
以上是獲取敏感信息的一種情況,還有一種情況就是注釋。
為了更好的維護代碼、調試代碼,我們經常在源碼中見到各種注釋。比如為了方便調試,直接把賬號密碼寫在Javascript代碼中,調試完后,只是把這條語句注釋掉而非刪掉;有時候系統更迭,推出一些新的接口,開發人員把老接口注釋掉使用新的接口,但服務器端并沒有把老接口關掉等等。
以上情況不僅讓我們搜集到了更多目標信息,也增加了系統攻擊面,只能說:這些開發人員真他娘的是個人才。
業務邏輯
除了能獲取到敏感信息,審計js文件還可以獲取到Web系統的一些業務邏輯。
說到業務邏輯,就要牽扯到前端校驗。有些系統只做了前端校驗,只要響應包滿足條件,就會執行下一步操作,服務器端不會再進一步檢驗接下來的請求是否有問題,我們只要修改響應包就可以繞過檢測。
比如輸入錯誤的賬號密碼,響應false,要求重新輸入賬號密碼;我們把響應包攔截,把false改成true,前端檢測到true,認為賬號密碼正確,發送跳轉到系統內部的請求,而服務器沒有再校驗請求是否有問題,將系統內部頁面響應給前端。
要繞過前端校驗,像0/1、true/false這種很容易就能猜到該怎么修改,但有些系統可能有十多個響應碼,或者響應碼有多位,如果我們耐著性子一個一個去試,時間成本會很大。
比如0是用戶名錯誤,1是密碼錯誤,2是驗證碼錯誤,9999是登陸成功,如果我們從0開始,一個一個去試,說真的還不一定能試出來。除非先輸入正確的賬號密碼得到正確的響應碼,然后輸入錯誤的賬號密碼,再用之前得到的正確響應碼替換錯誤的響應碼,嘗試看是否存在前端校驗的問題。
問題是:如果是安全服務,客戶還有可能提供賬號密碼,但攻防演練、挖洞一般都是靠自己白手起家,哪里有什么賬號密碼給你。而前端業務邏輯通常都由js實現,基本都可以通過代碼審計來確定如何構造響應包來嘗試繞過前端校驗。我只想說:信息收集真的很重要。
加密算法
審計代碼能獲取到的第三類信息就是加密算法。在當今的大環境下,企業越來越重視安全,運用了各種防護手段來提高系統的安全系數,提高攻擊者的攻擊成本,其中就有加密機制。
可能很多測試人員在測試的時候,抓包發現參數值都是加密的,就這么放過了。但這種前端加密都是可以在js中找到加密算法的,要么在html文件的js中,要么包含在js文件中。
當然我們也可以不需要知道加密算法到底是怎么樣的,直接輸入測試的明文Payload,系統自然會利用加密算法輸出對應的加密數據。這個Payload不行,我們再輸入下一個明文Payload去測試。
以上的方式時間成本會增加很多,而且有時候系統會先檢測輸入的數據是否含有非法字符,沒有非法字符才會加密發送到服務器端。而只要我們找到了對應的加密算法,就可以手工構造或者編寫腳本批量生成我們想要的加密數據,進而去測試系統是否存在漏洞。
據目前工作經歷來看,涉及到加密的參數,存在漏洞的幾率要高很多。因為前端加密后,后端必須解密才能使用。但很多時候,系統的安全檢測只在請求傳過來的時候,加密時沒有檢測到非法字符就繞過了檢測,后端解密之后就可以肆意橫行。
Ajax請求
審計js文件能獲取到的信息還有Ajax請求,也是漏洞重災區。而Ajax請求的調用通常很隱蔽,且Ajax請求的觸發條件無規律,很容易被遺漏或忽略。
Ajax請求通常是被各個事件觸發調用,而這些事件的觸發往往需要滿足一定條件。但很多時候,即便事件觸發條件未滿足,我們去構造Ajax請求的數據包發送給服務器端,依然可以得到服務器的響應。
服務器訪問控制不當,并沒有去檢測用戶是否是通過正常業務邏輯發送Ajax請求,也沒有去檢測用戶是否有操作權限。服務器認為客戶端發過來的請求都是正確的,這又要提一下安全的本質:一切輸入都是不安全的。而且每一個Ajax請求都對應一個接口,這又增加了攻擊面,每個請求都可能形成獨立的攻擊過程。
舉個真實案例:修改密碼,先要通過短信驗證碼校驗才能修改新密碼。只有管理員才能修改密碼,修改密碼的Ajax請求由修改密碼功能調用,普通用戶沒有這個功能。(某些原因,沒有截圖,意淫一下吧)
開發人員認為所有的用戶都會按照系統業務邏輯一步一步觸發請求,先點擊發送驗證碼,然后填寫驗證碼進行校驗,通過校驗后跳轉到修改密碼的頁面,輸入新密碼,最后修改成功。而且只有管理員有這個功能頁面。
但通過代碼審計,直接在js文件中找到了修改密碼的Ajax請求,請求參數只有新密碼。現在我們已經找到了修改密碼的請求,那么我們可以跳過前面一系列的校驗和請求,只需要構造出修改密碼請求,就可以修改密碼。
而且這個Ajax請求是寫在js文件里的,系統并不會因為用戶權限的不同而調用不同的js文件,所以普通用戶也能夠查到到對應的js代碼,不存在管理員一說。
看完上述內容,你們掌握js文件都能獲取到哪些信息的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。