一、越權漏洞
1、定義
越權漏洞是一種很常見的邏輯安全漏洞。是由於服務器端對客戶提出的數據操作請求過分信任,忽略了對該用戶操作權限的判定,導致修改相關參數就可以擁有了其他賬戶的增、刪、查、改功能,從而導致越權漏洞。
2、產生原因
開發者認為通過登錄即可驗證用戶的身份,而用戶登錄之后對數據進行增、刪、改、查詢等的操作時缺少進一步的權限驗證,進而導致越權問題。
3、實例測試
1)水平越權
通常說的越權一般是修改get或者post參數導致的查看到他人的業務信息,一般看訂單處,個人信息處等位置的參數
①方法:拿2個賬號,修改賬號1的get或post參數給賬號2。
②例子:身份認證失效漏洞實戰
a)登錄測試賬號時用burpsuite抓包。
b)可以看到card_id,發送到Repeater -> Go,發現了test賬戶的信息,嘗試修改card_id值發現可以越權讀取其他賬戶信息,那么現在關鍵就在於找出鑽石代理馬春生的id。
c)返回登錄界面尋找線索,查看一下登錄頁面源碼,成功找到鑽石代理馬春生的id。
d)回burpsuite修改包里的card_id,獲取密碼。
e)由於密碼用了md5加密,去https://cmd5.com/進行解密。
f)登錄鑽石代理馬春生的賬號,拿到KEY
2)垂直越權
通過垂直越權漏洞實現在沒有任何權限的情況下添加管理員用戶,獲得管理員權限。
方法:在添加用戶處用burpsuite抓取請求數據包,生成form表單,設置賬號密碼,越權添加管理用戶。
4、防御方案
1)前后端同時對用戶輸入信息進行校驗,雙重驗證機制
2)執行關鍵操作前必須驗證用戶身份,驗證用戶是否具備操作數據的權限
3)可以從用戶的加密認證 cookie 中獲取當前用戶 id,防止攻擊者對其修改。或在 session、cookie 中加入不可預測、不可猜解的 user 信息
4)直接對象引用的加密資源ID,防止攻擊者枚舉ID,敏感數據特殊化處理
5)永遠不要相信來自用戶的輸入,對於可控參數進行嚴格的檢查與過濾
二、支付邏輯漏洞
1、產生原因
最常見的支付邏輯漏洞通常是由於服務器端沒有對客戶端請求數據中的金額、數量等敏感信息作校驗,導致一般在電子商務網站上容易出現此類漏洞。
2、危害
攻擊者可以通過burpsuite等工具修改任意金額購買商品(有的訂單中商品數量可以修改為負值),甚至可以導致購買商品后系統給自己的賬戶充值。
3、實例測試
① 打開靶場,用系統給的賬號登錄后,發現小明余額只有1塊錢,買不起書。
② 點擊購買並用burpsuite抓包
③ 修改金額和數量,購買成功並獲得key
4、防御方法
1)在請求數據中對涉及金額、數量等敏感信息進行加密,保證加密算法不可猜解。並在服務器端對其進行校驗。
2)支付交易請求數據中加入token,防止重放攻擊。
三、密碼找回漏洞
1、產生原因
找回密碼功能模塊通常會將用戶憑證(通常為驗證碼或者鏈接)發送到用戶注冊時使用的手機號或者郵箱中,只要用戶不泄露自己的用戶憑證就不會被攻擊者利用。
但有些信息系統在密碼找回功能的設計存在邏輯缺陷,可能會將用於用戶自證身份的信息的用戶憑證以各種各樣的方式返回到客戶端。這樣攻擊者只要通過在本地抓取數據包並對其內容加以分析就能獲取到其他用戶的用戶憑證,從而達到重置任意用戶密碼的目的。
2、測試方法
在測試系統是否存在用戶憑證客戶端回顯漏洞時,可以先用自己的賬號進行密碼找回操作,並在抓取記錄每次交互操作時的response數據包。然后觀察分析數據包中是否存在和手機或郵箱中收到的用戶憑證相同的字符串。
3、實例測試
1)用戶憑證暴露在請求鏈接中
① 進入某直播網站登錄處,點擊忘記密碼,選擇通過注冊手機找回密碼。
② 輸入手機號碼,點擊獲取驗證碼,使用控制台查看請求鏈接,發現驗證碼直接出現在請求鏈接中。
2)加密驗證字符串返回給客戶端
① 進入某電商官網按正常流程執行找回密碼功能,填寫好郵箱和圖片驗證碼,點擊下一步,然后使用抓包工具抓取請求包。分析返回的數據包,發現其中包含了一個加密字符串,將其記錄下來。
② 郵箱中會收到一個找回密碼用的驗證碼。將該驗證碼在頁面上填好,點擊下一步即可進入到密碼重置頁面。
③ 仔細觀察發現,密碼重置頁面URL中的加密驗證字符串和之前返回數據包中的加密字符串是同一個。既然如此,則可以繞過郵箱驗證碼校驗,直接利用抓包工具獲取到的加密字符串構造到url中進行任意密碼重置了。
3)網頁源碼中隱藏這密保答案
① 進入某郵箱網站官網,點擊找回密碼按鈕,再點擊"網上申訴"鏈接。
② 在網上申訴頁面直接查看源代碼,發現源代碼中不但有密碼提示問題,還在Hide表單里隱藏着問題答案。通過該方式,可獲得任意用戶修改密碼問題答案,從而可以修改其他用戶郵箱密碼。
4)短信驗證碼在客戶端回顯
① 進入商城網站首頁,點擊忘記密碼。然后通過短信驗證方式找回密碼。
② 在點擊獲取短信驗證碼的時候抓取數據包,發現服務端直接將短信驗證碼xxxxxx返回給了客戶端,將其填寫到驗證碼處即可成功重置其密碼。同理,通過該方式,可以重置其他用戶的密碼。
4、防御方案
1)從驗證碼有效期和請求次數進行限制驗證碼爆破。
2)不要將token驗證之類的數據直接返回給用戶數據包。
3)修改加密算法和加密內容,一定要是強加密,要做到增加猜解難度或密文不可猜解。
4)用戶身份驗證一定要在后端實現。
5)在最后一步修改密碼的動作時,一定要校驗帳號是否通過了驗證、短信與手機號是否對應、發送短信與已校驗帳號不要使用同一個session名稱。
四、驗證碼相關漏洞
1、驗證碼暴力破解
1)當驗證碼具有一定的規律性,並且沒有做好對應的防護措施時,會導致攻擊者通過窮舉或其它方式猜解出驗證碼,從而對目標系統造成危害。
2)測試方法
a)接收驗證碼,觀察驗證碼是否有規律性(如純數字或可預測的字母)
b)多次填寫驗證碼提交,觀察是否有時效性或失敗次數限制。
c)通過工具暴力猜解驗證碼
3)防御方案
a)提高驗證碼的復雜度(如:設為6位以上數字和字母的組合)
b)限制單位時間內驗證碼輸入錯誤的次數(如規定10分鍾內連續輸錯5次就鎖定10分鍾)
c)縮短驗證碼的時效性(一般短信驗證碼為5分鍾內有效)
2、驗證碼重復使用
1)如果設計不合理,當服務器端接受請求后,沒有將上一次保存的session及時清空,將會導致驗證碼可重復使用。
2)測試方法
通過重放請求,觀察返回的信息提示來進行判斷。如果通過重放沒有提示"驗證碼錯誤"之類的信息,而只是提示"用戶名密碼錯誤"這些信息,就說明存在漏洞。
例如:登錄密碼重置漏洞分析溯源
啟動靶場環境,用系統提供的手機號先獲取一下短信驗證碼,然后在填入驗證碼后直接將手機號修改為17101304128,最后點擊重置即可獲得KEY
3)防御方案
當服務器端處理完一次用戶提交的請求之后,及時將session域中的驗證碼清除,並生成新的驗證碼。
3、驗證碼客戶端回顯
1)用戶向網站系統發送一條驗證碼(如短信驗證碼)的請求,當服務器端在調用短信平台發送短信時,沒有判斷驗證碼和手機是否綁定,並把驗證碼校驗的功能放到客戶端進行,從而導致驗證碼在客戶端回顯,驗證碼會直接返回顯示在前端頁面中或者數據包中(即可通過抓包工具截獲該驗證碼)。
2)測試方法
a)輸入任意手機號碼,點擊發送短信驗證碼並抓取數據包
b)查看返回數據包,觀察驗證碼是否回顯。
3)防御方案
a)在服務端對驗證碼進行校驗。
b)禁止將驗證碼內容輸出到客戶端頁面以及返回的數據包中。
4、驗證碼繞過
1)由於開發者使用了錯誤的邏輯判斷,僅僅在客戶端接收用戶輸入的驗證碼,並且在本地校驗驗證是否正確,而該判斷結果也可以在本地進行修改,最終導致客戶端誤以為已經輸入了正確的驗證碼,實現了驗證碼繞過。
2)測試方法
a)在接收驗證碼后,輸入任意驗證碼,提交並抓包
b)嘗試修改返回包中相關的參數值。
c)轉發數據包,若進入密碼重置頁面,則證明存在漏洞。
3)防御方案
在服務端增加驗證碼的認證機制,而不僅僅是在客戶端進行判斷。
5、驗證碼自動識別
1)當驗證碼設計不存在邏輯層面的問題時,就要涉及到與驗證碼機制本身的正面對抗,也就是驗證碼識別技術。這里的驗證碼主要是指圖片驗證碼。驗證碼自動識別就是指通過自動化的技術對圖片驗證碼中的字符或公式等內容進行還原,從而突破驗證碼的安全限制。
2)測試方法
a)獲取驗證碼鏈接
b)將鏈接載入驗證碼識別工具,進行圖像二值化、去干擾等處理
c)如成功破解用戶帳戶,則證明驗證碼識別有效。
3)防御方案
a)增加背景元素的干擾。如背景色、背景字母等
b)字符的字體進行扭曲、粘連
c)使用公式、邏輯驗證方法等作為驗證碼。如四則運算法、問答題等
d)圖形驗證碼和使用者相關,比如選擇聯系人頭像,選擇購買過的物品等作為驗證碼
e)對單位時間內提交請求失敗的次數進行限制
五、刷贊
1、測試方法
服務器是根據ip地址識別當前用戶是否已點贊的,在數據包里添加一行X-Forwarded-For來偽造http客戶端ip
2、實例測試
① 進入頁面,找到zhangyu的評論
② 在點贊時使用burpsuite抓包
③ send to intruder里遍歷ip
④ 設置好payload,開始攻擊
⑤ 攻擊完畢后返回點贊頁面,刷新一下就可以得到KEY了,可以看到zhangyu點贊數也漲了。
參考
https://www.cnblogs.com/tkb-/p/14394106.html
https://www.cnblogs.com/sijidou/p/13121335.html
https://www.cnblogs.com/Iamyoyodan/p/12984272.html