前言:
在平時學習安全中常常會有涉及到sql注入
,xss
,文件上傳
,命令執行
等等常規的漏洞,但是在如今的環境下,結合當前功能點的作用,雖然不在owasp top10
中提及到,但是往往會存在的,一般叫做邏輯漏洞
本篇文章是根據《web攻防業務安全實戰指南》一書的知識進行簡要的總結而成的筆記
歸類
邏輯漏洞主要產生的位置
-
登錄處
-
業務辦理處
-
驗證碼處
-
支付處
-
密碼找回處
登錄處存在的邏輯漏洞
可以暴力破解用戶名或密碼
沒有驗證碼機制,沒有根據用戶名限制失敗次數,沒有根據ip限制失敗次數等等
通常思路:
- 直接拿密碼字典爆破某一個用戶名
- 拿固定的弱口令密碼,去跑top xxx的用戶名
- 如果只是用戶名限制失敗次數,可以使用思路2的方法
- 在存在返回提示用戶名錯誤或者密碼錯誤的情況下,可以分別爆用戶名和密碼
常見限制:
- 有時候會發現用戶名或者密碼是密文加密,這時可能是通過前端或者其他方式加密,對於簡單的來說
base64
編碼和md5
的簽名是很好識破的,在爆破的時候可以選擇encode和hash
session沒有清空
登出后服務器端的session內容沒有清除,因此客戶端重新帶回登出前的session,也能夠達到重新登錄
通常思路:
- 在登出后,拿登出前的session,重新訪問需要登錄的界面
業務辦理處存在的邏輯漏洞
水平越權
通常說的越權一般是修改get或者post參數,導致的查看到他人的業務信息,一般看訂單處,個人信息處等位置的參數
通常思路:
- 拿2個賬號,修改賬號1的get或post參數給賬號2
篡改手機號
在需要手機號的短信驗證處,抓包修改手機號,可能做到非本賬號手機號獲取能夠編輯本賬號的驗證碼
通常思路:
- 抓包,查看
get
或者post
參數存在手機號的地方,進行修改
驗證碼處存在的邏輯漏洞
登錄驗證碼未刷新
沒有清空session中的驗證碼信息
通常思路:
- 抓包多次重放,看結果是否會返回驗證碼錯誤,如沒有返回驗證碼錯誤則存在未刷新
- 觀察檢驗的處理業務,如果驗證碼和用戶名密碼是分2次http請求校驗,則也可以爆破用戶名和驗證碼
手機或郵箱驗證碼可爆破
沒有對應的手機號或郵箱,但如果驗證碼純數字4,5位左右,沒有次數校驗,可以爆破
通常思路:
- 拿自己的手機號或郵箱先獲取驗證碼查看驗證碼格式,之后多次提交錯誤的看是否有次數現在,沒有就爆破
手機或郵箱驗證碼回顯到客戶端
在發送給手機或者郵箱驗證碼時,會在response
包中有驗證碼,因此不需要手機和郵箱就可以獲取驗證碼
通常思路:
- 發送驗證碼時抓包,看返回包
修改response包繞過判定
在輸入錯誤的驗證碼時會返回false
之類的字段,如果修改response中的false
為true
,會識別為驗證通過
通常思路:
- 抓包,選擇
do intercept-> response to this request
,放包,抓到下一個包就是response的包,可以修改,重放
支付處存在的邏輯漏洞
修改商品編號
如果業務是通過商品編號來判斷價格的話,可能存在只修改A商品編號為B商品編號,做到以A商品的價格購買B商品
通常思路:
- 先准備2個商品的編號,將其中一個改為另一個
條件競爭
通過條件競爭使余額達到負數,從而買多個商品
通常思路:
- 支付處,多線程請求付款確認,結果如果余額為負數,則存在該漏洞
金額修改
金額直接寫在了post
或者get
請求中,對其進行修改達到修改了商品金額的效果
通常思路:
- 抓包修改金額的字段
商品數量修改
在購買時,如果一個商品為負數,那么它的價格則會是負數,如果購買多種商品,將其中一個設為負數,降低整體的價格
通常思路:
- 購物車里選取多個商品,修改其中一個商品的數量,在購買后查看最終的價格
通過前端限制限購商品
有些商品限購1個,但是判定是通過前端,因此可以抓包后修改數量
通常思路:
- 抓取限購數量內的包,抓取后修改個數,重放
充值中放棄訂單未失效
在充值中選取大額充值訂單,放棄訂單,獲得訂單號,之后充值小額訂單,拿到充值成功的界面,將訂單號修改為放棄的大額訂單,觀察是否成功
通常思路:
1. 看看充值的時候是否有訂單號字段,如果有在成功界面修改為未支付的訂單號,觀察是否充值成功
密碼找回處的邏輯漏洞
驗證碼處的邏輯漏洞在密碼找回處存在一樣適用
修改發送的驗證的目標為攻擊者的郵箱或手機
在找回密碼處,如果字段帶上用戶名,校驗的郵箱或者手機號,將郵箱或者手機號改為自己的,如果自己的能夠收到驗證碼並重置密碼,則該漏洞存在
通常思路:
- 抓包,注意找回密碼流程中的郵箱號或者手機號字段,修改其為自己即可
session覆蓋
已知A的手機號,不知B的手機號,找回A的密碼,輸入驗證碼后到了設置新密碼設置界面。這時在同一瀏覽器下重開窗口找回B的密碼,獲取驗證碼,刷新A設置新密碼的頁面,如果此時修改的是B賬號的密碼,則存在漏洞
通常思路:
- 准備2個賬號,測試步驟如上所述
- 在郵箱收到找回密碼連接時,依然可以使用該思路
弱token爆破
有些時候通過找回密碼的時候填郵箱,郵箱此時會收到一個帶有token的鏈接,點擊鏈接就能跳轉到重置密碼的頁面,如果token是base64
,時間戳
,位數較低的隨機數
則可以爆破
通常思路:
- 正常找回流程獲取重置密碼的url,了解token的規則后,爆破其他郵箱的重置密碼url
密碼找回流程繞過
在找回密碼處,一般會有三個步驟頁面,頁面1找回用戶的填寫,頁面2找回時的手機號短信驗證碼填寫,頁面3填寫新密碼,如果填好頁面1,直接訪問頁面3能夠重設密碼的話,則會存在該漏洞
通常思路:
- 在設置好找回用戶后,直接訪問重設密碼的url頁面