一、越權漏洞
什么是越權漏洞:
越權漏洞是一種很常見的邏輯安全漏洞。是由於服務器端對客戶提出的數據操作請求過分信任,忽略了對該用戶操作權限的判定,導致修改相關參數就可以擁有了其他賬戶的增、刪、查、改功能,從而導致越權漏洞。漏洞原理分析:
漏洞產生的原因:
開發者認為通過登錄即可驗證用戶的身份,而對用戶登錄之后的操作不做進一步的權限驗證,進而導致越權問題。 主要是因為開發人員在對數據進行增、刪、改、查詢時對客戶端請求的身份未做驗證、鑒權等邏輯判斷。 通常情況下,我們使用一個web應用程序提供的功能時,流程如下。如果在“驗證權限"環節存在缺陷,那么便會導致越權。實例測試:
平行越權案例:
案例擴展一:水平越權
通過水平越權漏洞實現修改或刪除其他用戶個人信息。測試方法:
申請兩個帳戶,如test3和test4。 抓取test4用戶的請求數據包,通過修改數據包中代表用戶ID相關參數的值,判斷是否可通過修改test4用戶的數據來實現修改或刪除test3用戶的信息。測試工具:burpsuite
垂直越權案例:
案例擴展二:垂直越權
通過垂直越權漏洞實現在沒有任何權限的情況下添加管理員用戶,獲得管理員權限。測試方法:
在添加用戶處抓取請求數據包,生成form表單,設置賬號密碼,越權添加管理用戶。測試工具: burpsuite
防御方案:
1、前后端同時對用戶輸入信息進行校驗,雙重驗證機制2、 執行關鍵操作前必須驗證用戶身份,驗證用戶是否具備操作數據的權限
3、特別敏感操作可以讓用戶再次輸入密碼或其他的驗證信息
4、可以從用戶的加密認證 cookie 中獲取當前用戶 id,防止攻擊者對其修改。或在 session、cookie 中加入不可預測、不可猜解的 user 信息
5、直接對象引用的加密資源ID,防止攻擊者枚舉ID,敏感數據特殊化處理
6、永遠不要相信來自用戶的輸入,對於可控參數進行嚴格的檢查與過濾
二、支付邏輯漏洞
什么是支付邏輯漏洞:
支付邏輯漏洞是指系統的支付流程中存在業務邏輯層面的漏洞。
支付流程通常為選擇商品和數量-選擇支付及配送方式-生成訂單-訂單支付-完成支付
最常見的支付邏輯漏洞通常是由於服務器端沒有對客戶端請求數據中的金額、數量等敏感信息作校驗導致一般在電子商務網站上容易出現此類漏洞
支付邏輯漏洞一般可以分為四類:
1、支付過程中可以修改支付金額
2、可以將訂單中的商品數量修改為負值
3、請求重放
4、其他問題(程序異常、其他參數修改導致的問題等)
支付邏輯漏洞的危害:
任意金額購買商品,甚至可以導致購買商品后系統給自己賬戶充值
測試方法:
支付邏輯漏洞之修改訂單商品數量:
1、登錄網站,選擇購買一個商品並抓取數據包
2、找到其中代表商品數量的參數,將參數的值修改為負數
3、發送數據包,生成訂單,觀察訂單是否有效,是否能進入支付頁面
4、完成支付
實例測試:
案例:
通過支付邏輯漏洞的修改訂單商品數量實現0元購買商品
測試工具:burpsuite
修復方法:
1、在請求數據中對對涉及金額、數量等敏感信息進行加密,保證加密算法不可猜解。並在服務器端對其進行校驗。
2、支付交易請求數據中加入token,防止重放攻擊。
三、密碼找回漏洞
漏洞原理分析:
用戶憑證客戶端回顯
找回密碼功能模塊通常會將用戶憑證(通常為驗證碼或者鏈接)發送到用戶注冊時使用的手機號或者郵箱中,只要用戶不泄露自己的用戶憑證就不會被攻擊者利用。
有些信息系統在密碼找回功能的設計存在邏輯缺陷,可能會將用於用戶自證身份的信息的用戶憑證以各種各樣的方式返回到客戶端。這樣攻擊者只要通過在本地抓取數據包並對其內容加以分析就能獲取到其他用戶的用戶憑證,從而達到重置任意用戶密碼的目的。
測試方法和流程:
在測試系統是否存在用戶憑證客戶端回顯漏洞時,可以先用自己的賬號進行密碼找回操作,並在抓取記錄每次交互操作時的rēsponse數據包。然后觀察分析數據包中是否存在和手機或郵箱中收到的用戶憑證相同的字符串。測試流程如下:
案例講解:
一、用戶憑證暴露在請求鏈接中
步驟一:進入某直播網站登錄處,點擊忘記密碼,選擇通過注冊手機找回密碼。
步驟二:輸入手機號碼,點擊獲取驗證碼,然后使用firebug查看請求鏈接,將發現驗證碼直接出現在請求鏈接中。
二、加密驗證字符串返回給客戶端
步驟一:進入某電商官網按正常流程執行找回密碼功能,填寫好郵箱和圖片驗證碼,點擊下一步,然后使用抓包工具抓取請求包。分析返回的數據包,發現其中包含了一個加密字符串,將其記錄下來。
步驟二:之后,郵箱中會收到一個找回密碼用的驗證碼。將該驗證碼在頁面上填好,點擊下一步即可進入到密碼重置頁面。
步驟三:仔細觀察發現,密碼重置頁面URL中的加密驗證字符串和之前返回數據包中的加密字符串是同一個。既然如此,則可以繞過郵箱驗證碼校驗,直接利用抓包工具獲取到的加密字符串構造到url中進行任意密碼重置了。如圖,成功重置並登錄了官方客服的賬號。
三、網頁源代碼中隱藏着密保答案
步驟一:進入某郵箱網站官網,點擊找回密碼按鈕,再點擊"網上申訴"鏈接。
步驟二:在網上申訴頁面直接查看源代碼,發現源代碼中不但有密碼提示問題,還在Hide表單里隱藏着問題答案。通過該方式,可獲得任意用戶修改密碼問題答案,從而可以修改其他用戶郵箱密碼。
四、短信驗證碼在客戶端回顯
步驟一:進入商城網站首頁,點擊忘記密碼。然后通過短信驗證方式找回密碼。
步驟二:輸入圖片驗證碼,點擊獲取短信驗證碼。
步驟三:此時抓取數據包,發現服務端直接將短信驗證碼646868返回給了客戶端,將短信驗證碼填寫到驗證碼處即可成功重置其密碼。同理,通過該方式,可以重置其他用戶的密碼。
防御方案:
1、驗證碼爆破的,從驗證碼有效期和請求次數進行限制;
2、token驗證之類的,不要直接返回給用戶;
3、修改加密算法和加密內容,一定要是強加密,也要做到增加猜解難度或密文不可猜解;
4、用戶身份驗證一定要在后端實現;
5、在最后一步修改密碼的動作時,一定要校驗帳號是否通過了驗證、短信與手機號是否對應、發送短信與已校驗帳號不要使用同一個session名稱;
四、驗證碼暴力破解
什么是驗證碼暴力破解:
通常在網站的用戶注冊、密碼找回等頁面會設計有手機或郵箱驗證碼進行驗證。主要為了貫徹落實上網實名制以及保障用戶帳戶的安全性。
當這些驗證碼具有一定的規律性,並且沒有做好對應的防護措施時,會導致攻擊者通過窮舉或其它方式猜解出驗證碼,從而對目標系統造成危害。
漏洞危害:
惡意注冊(任意用戶注冊,批量注冊無用帳戶等)
重置任意用戶密碼
......
漏洞原理分析:
測試實例:
案例:
通過暴力破解短信驗證碼實現重置任意用戶密碼
測試方法:
1、接收驗證碼,觀察驗證碼是否有規律性(如純數字或可預測的字母)
2、多次填寫驗證碼提交,觀察是否有時效性或失敗次數限制。
3、通過工具暴力猜解驗證碼
則試工具: burpsuite
防御方案:
1、提高驗證碼的復雜度(如:設為6位以上數字和字母的組合)
2、限制單位時間內驗證碼輸入錯誤的次數(如規定10分鍾內連續輸錯5次就鎖定10分鍾)
3、縮短驗證碼的時效性(一般短信驗證碼為5分鍾內有效)
五、驗證碼重復使用
什么是漏洞重復使用:
如果設計不合理,將會導致驗證碼在驗證成功一次之后,下次使用的時候就不再刷新,也就是可重復使用。
驗證碼重復使用的危害:
惡意注冊
暴力破解
無限刷帖
......
漏洞原理分析:
測試實例:
案例:
通過重復使用驗證碼實現登錄頁面暴力破解。
測試方法:
通過重放請求,觀察返回的信息提示來進行判斷。如果通過重放沒有提示"驗證碼錯誤"之類的信息,而只是提示"用戶名密碼錯誤"這些信息,就說明存在漏洞
測試工具:burpsuite
防御方案:
當服務器端處理完一次用戶提交的請求之后,及時將session域中的驗證碼清除,並生成新的驗證碼。
六、驗證碼客戶端回顯
什么是驗證碼客戶端回顯:
驗證碼客戶端回顯就是指當用戶向網站系統發送一條驗證碼(如短信驗證碼)的請求時,驗證碼會直接返回顯示在前端頁面中,或者可通過抓包工具截獲該驗證碼。
漏洞危害:
繞過短信驗證碼驗證進行登錄或注冊
重置任意用戶密碼
......
漏洞原理分析:
測試實例:
案例:
通過驗證碼客戶端回顯漏洞實現帳戶綁定任意手機號碼
測試方法:
1、輸入任意手機號碼,點擊發送短信驗證碼並抓取數據包
2、查看返回數據包,觀察驗證碼是否回顯。
3、若回顯,則提交驗證碼。
測試工具:burpsuite
防御方案:
1、在服務端對驗證碼進行校驗。
2、禁止將驗證碼內容輸出到客戶端頁面以及返回的數據包中。
七、驗證碼繞過
什么是驗證碼繞過:
通常我們在進行帳號注冊、密碼找回、手機或郵箱綁定的時候,都需要接收驗證碼,如果沒有做好邏輯判斷,可以通過修改返回的數據包來實現繞過驗證碼的安全防護
漏洞危害:
繞過驗證碼的限制進行用戶注冊
意用戶密碼重置
實現用戶與任意手機號或郵箱綁定
......
漏洞原理分析:
測試實例:
案例:
通過驗證碼繞過漏洞實現重置任意用戶密碼
測試方法:
1、在接收驗證碼后,輸入任意驗證碼,提交並抓包
2、嘗試修改返回包中相關的參數值。
3、轉發數據包,若進入密碼重置頁面,則證明存在漏洞。
測試工具: burpsuite
防御方案:
在服務端增加驗證碼的認證機制,而不僅僅是在客戶端進行判斷。
八、驗證碼自動識別
什么是驗證碼自動識別:
當驗證碼設計不存在邏輯層面的問題時,就要涉及到與驗證碼機制本身的正面對抗,也就是驗證碼識別技術。
這里的驗證碼主要是指圖片驗證碼。驗證碼自動識別就是指通過自動化的技術對圖片驗證碼中的字符或公式等內容進行還原,從而突破驗證碼的安全限制。
漏洞危害:
突破驗證碼的安全限制,使驗證碼功能失效
漏洞原理分析:
一般對於圖片驗證碼的識別流程為:圖像二值化處理一去干擾一字符分割一字符識別
圖像二值化就是將圖像上像素點的灰度值設置為0或255 ,也就是將整個圖像呈現出明顯的黑白效果。為了防止驗證碼被自動識別,通常會加入一些點、線、色彩之類的方式進行圖像干擾,如下所示:
所以為了達到良好的識別效果,需要對圖像進行去干擾處理。
字符分割主要包括從驗證碼圖像中分割出字符區域以及把字符區域划分成單個字符。
字符識別就是把處理后的圖片還原回字符文本的過程。
測試實例:
案例:
通過驗證碼自動識別漏洞實現暴力破解登錄密碼。
測試方法:
1、獲取驗證碼鏈接
2、將鏈接載入驗證碼識別工具進行驗證碼識別,配置相關工具
3、如成功破解用戶帳戶,則證明驗證碼識別有效。
測試工具:burpsuite, Pkav http fuzzer
防御方案:
1、增加背景元素的干擾。如背景色、背景字母等
2、字符的字體進行扭曲、粘連
3、使用公式、邏輯驗證方法等作為驗證碼。如四則運算法、問答題等
4、圖形驗證碼和使用者相關,比如選擇聯系人頭像,選擇購買過的物品等作為驗證碼
5、對單位時間內提交請求失敗的次數進行限制