邏輯漏洞挖掘技巧
0x01 可能存在的安全隱患
測試系統是否存在設計缺陷、邏輯錯誤漏洞,如支付漏洞、業務流程繞過、業務功能缺陷、短信轟炸、任意用戶密碼重置等,熟悉且利用好每一個業務的功能點,細心才能挖到漏洞
0x02 漏洞原理

什么是設計缺陷/邏輯漏洞?
設計缺陷/邏輯漏洞是指由于程序邏輯不嚴謹或邏輯太復雜,導致一些邏輯分支不能正常處理或處理錯誤。攻擊者利用業務/功能上的設計缺陷,獲取敏感信息或破壞業務的完整性。
設計缺陷/邏輯漏洞產生的主要原因
一個系統功能太多后,程序開發人員難以思考全面,只考慮了常規的操作流程(比如,在A情況,會出現B,那么執行C即可),對某些地方可能有遺漏,或者未能正確處理,從而導致邏輯漏洞。邏輯漏洞也可以說是程序開發人員的思路錯誤、程序開發人員的邏輯存在錯誤。
一般常出現在什么場景?
用戶注冊、用戶登錄、驗證碼獲取、權限鑒定、交易支付、修改個人資料等。
為什么邏輯漏洞不好防范?
設計缺陷/邏輯漏洞是非常隱蔽的,它不像SQL注入、XSS、文件上傳、命令執行等,有鮮明的表示,自動化、半自動化掃描器可以定義一系列規則識別出這些漏洞,而邏輯漏洞一般出現在功能、業務流程中,每個漏洞的出現都有一定的獨特性,很難復制或者通過規則腳本、漏掃工具精準識別。攻擊者利用代碼邏輯上的缺陷,利用合法流量進行攻擊,也沒有防御標準。
支付漏洞簡介
支付漏洞是 高風險漏洞 也屬于 邏輯漏洞,通常是通過 篡改價格、數量、狀態、接口、用戶名等傳參,從而造成 小錢夠買大物 甚至可能造成 0元購買商品 等等,凡是 涉及購買、資金等方面的功能處 就有可能存在支付漏洞。

快捷支付原理
商戶網站接入支付結果,有兩種方式,一種是通過 瀏覽器進行跳轉通知,一種是 服務器端異步通知
瀏覽器跳轉通知
基于用戶訪問的瀏覽器,如果用戶在銀行頁面支付成功后,直接關閉了頁面,并未等待銀行跳轉到支付結果頁面,那么商戶網站就收不到支付結果的通知,導致支付結果難以處理。而且瀏覽器端數據很容易被篡改而降低安全性(這種方式數據經過了客戶端瀏覽器,極大的可能性被第三方惡意修改)
服務器端異步通知
該方式是支付公司服務器后臺直接向用戶指定的異步通知URl發送參數,采用POST或者GET的方式。商戶網站接受異部參數的URL對應的程序中,要對支付公司返回的支付結果進行簽名驗證,成功后進行支付邏輯處理,如驗證金額、訂單信息是否與發起支付時一致,驗證正常則對訂單進行狀態處理或為用戶進行網站內入賬等。
常見的支付漏洞
##修改訂單金額
支付三步曲——訂購、訂單、付款
三個步驟當中的隨便一個步驟進行修改價格測試,如果前面兩步有驗證機制,那么你可在最后一步付款時進行抓包嘗試修改
金額,如果沒有在最后一步做好檢驗,那么問題就會存在,其修改的金額值可以嘗試小數目或者嘗試負數。
支付漏洞如何挖掘
1、找到關鍵的數據包
可能一個支付操作有三四個數據包,我們要對數據包進行挑選。
2、分析數據包
支付數據包中會包含很多的敏感信息(賬號,金額,余額,優惠),要嘗試對數據包中的各個參數進行分。析。
3、不按套路出牌
多去想想開發者沒有想到的地方。
4、pc端嘗試過,wap端也看看,app也試試
水平越權和垂直越權概述
水平越權:指攻擊者嘗試訪問與他擁有相同權限的用戶資源。
垂直越權:低權限用戶嘗試訪問高權限用戶的資源。(例如一個用戶的個人信息管理頁是 user.php,而管理員管理所有用戶信息的頁面是 manageuser.php, 但管理頁面沒有相關的權限驗證,導致任何人輸入管理頁面地址都可以訪問)。
漏洞產生原因
越權漏洞形成的原因是后臺使用了 不合理的權限校驗規則導致的。
通常情況下,一個 Web 程序功能流程是登錄 - 提交請求 - 驗證權限 - 數據庫查詢 - 返回結果。如果驗證權限不足,便會導致越權。常見的程序都會認為通過登錄后即可驗證用戶的身份,從而不會做下一步驗證,最后導致越權。
水平垂直越權漏洞實戰案例

可以看到這里property value的參數是當前學號,與上一篇提到的水平越權差不多,response可以看到一些個人的敏感信息,我們修改參數看看能不能造成水平越權,

成功越權查看他人敏感信息
不過這里的property value是屬性值的意思,現有的信息了解到當前學號是student的身份,所以我們可以嘗試把這里的參數修改為teacher或者是admin看看有沒有什么收獲
修改為admin看看,發包

成功造成垂直越權,返回了當前admin身份的一些敏感信息和email
同樣此處原理也大致相同

某信息采集模塊點擊申請,抓包

數據包往下滑,最底下有個personId=xxx&type=xxx的參數

personId對應當前身份的學號,type也就是當前身份的縮寫,我們先嘗試修改personId發包看看

成功造成水平越權,與上一個漏洞同理,這里所寫的stu代表的是學生身份,嘗試修改為teacher看看是否有收獲

成功造成垂直越權,不過此處并沒有顯示敏感信息
數據包下面:personId=admin&type=tea ,如果這里改成老師的工號,或許會有附帶信息
如何查找越權漏洞
常見的越權高發功能點有:==根據訂單號查訂單==、==根據用戶 ID 查看帳戶信息==、==修改 / 找回密碼==等。
對于代碼審計,可以先查看前端的網頁源碼,查看一些操作的表單提交的值。查看配置文件和一些過濾器,看是否對 URL 有相關的篩選操作。最后查看后臺處理邏輯,是否存在身份驗證機制,邏輯是否異常,有時的邏輯漏洞也可導致越權操作。
在與服務器進行數據交互時客戶端攜帶著標識用戶的身份的cookie,當服務端的session與cookie中的身份匹配成功后,才能允許該用戶進行相關操作。除了cookie之外,在請求中可能會帶一些參數,細覽下可能存在辨別信息的唯一值,來進行測試。這里要說一點,傳輸的參數并不一定在請求參數中,也有可能存在URL鏈接的位置(GET和POST請求的區別)。當攔截一個請求后分析是否有參數:
1、請求中不存在參數,只用cookie進行身份驗證,無法水平越權,可能出現垂直越權;
2、==請求中存在參數,并且參數中的某些值可能是辨別信息的唯一值(如employeeID、departmentID、ID等),可能存在水平和垂直越權==;越權的原因是參數中的employeeID沒有判斷是否是cookie中用戶所管轄的員工ID。

SRC中的邏輯漏洞總結
1.注冊:
1.短信轟炸
2.驗證碼安全問題
3.密碼爆破
4.郵箱轟炸
2.用戶任意注冊、批量注冊
3.用戶名枚舉
4.XSS(有框的地方就可以嘗試插XSS)
5.登錄:
1.短信轟炸、驗證碼安全問題、密碼爆破、郵箱轟炸
2.SQL注入
3.撞庫
4.抓包把password字段修改為空值發送
5.認證憑證替換、比如返回的數據包中包含賬號,修改賬號就能登錄到其他賬號
6.Cookie仿冒
7.修改返回包的相關數據,可能會登陸到其他的用戶
6.找回密碼:
1.短信郵箱轟炸、短信郵箱劫持
2.重置任意用戶賬戶密碼、驗證碼手機用戶未統一驗證
3.直接跳過驗證步驟
7.購買支付、充值(要利用抓包去仔細查看每一個可用的參數)
1.交易金額、數量修改、更換支付模塊(比如更換支付的模塊金額)
2.交易信息訂單編碼/導致信息泄露
3.整數溢出,int最大值為2147483647,超過最大值
4.修改充值賬戶
5.支付繞過
8.抽獎活動
1.刷獎品、積分
2.并發
9.優惠卷、代金卷
1.并發邏輯漏洞(burp批量獲取優惠券)
2.修改優惠券金額、數量
10.訂單信息
1.訂單信息遍歷、泄露
2.訂單信息泄露導致用戶信息泄露
3.刪出他人訂單
11.會員系統
1.修改個人信息上傳文件,上傳帶彈窗的html
2.如遇上上傳xlsx、docx,可能存在XXE,上傳惡意的文檔盲測
3.圖片上傳也可能遇到imagereagick命令執行,上傳惡意圖片
4.視頻上傳如果使用ffmpeg<3.2.4(視頻按幀分割成圖片),上傳惡意avi盲測ssrf
5.用戶橫向越權訪問、遍歷、導致用戶信息泄露
6.SQL注入、個人簡歷處存儲XSS個人信息注冊的名稱也可以插入XSS
12.傳輸過程
1.明文傳輸賬戶密碼
2.修改信息處無session/token導致csrf
3.POST/COOKIE注入
13.評論
1.POST注入
2.存儲型XSS
3.無session/token導致CSRF
1.驗證碼問題
1.萬能驗證碼
2.返回包中存在驗證碼
3.刪除驗證碼或者cookie中的值可以爆破賬號密碼
2.短信轟炸
1.一直重放
2.刪除修改cookie,重放數據包
3.遍歷參數發送數據包
4.手機號后面加空格或者前面加其他的比如+86或者逗號分號等,然后重發數據包
5.請求參數修改大小寫,或者添加請求參數比如&id=1
6.一個站的登錄處可能做了防護,但是再找回密碼處可能沒有安全防護,或者在注冊流程中沒有安全防護,所以說多測試接口
7.如果對手機號一天的次數進行了限制,還可以再發一次短信,DO intercept之后修改為成功回顯
3.水平越權
1.主要登陸后還是修改參數,主要找到多個接口不斷測試
2.關注網頁源代碼,有時候會有表單,但被bidden(隱藏標簽)給隱藏起來了,可以修改返回包然后嘗試獲取數據檢測
3.多個賬號,主要分析請求參數
4.數據泄露
1.再找回密碼處,填寫數據后抓包查看返回信息,有可能存在敏感數據返回
5.任意用戶密碼重置
1.目前大部分都是在修改密碼處參數修改
2.有些是前端驗證
