筆者前言:
作為一個地地道道的安服仔,每日的作業就是滲透測驗,在測驗的程序中累積了很多的經驗,看到了各種各樣奇葩的漏洞,于是乎便有了這樣的一篇文章,以下文章均由本人測驗發現并打碼,侵刪
什么是業務邏輯漏洞
業務邏輯漏洞就是指攻擊者利用業務/功能上的設計缺陷,獲取敏感資訊或破壞業務的完整性,一般出現在密碼修改、越權訪問、密碼找回、交易支付金額等功能處, 邏輯漏洞的破壞方式并非是向程式添加破壞內容,而是利用邏輯處理不嚴密或代碼問題或固有不足,進行漏洞利用的一個方式,
既然提到了完整性,相信大家在漏洞挖掘的時候經常會看到三個關鍵字,他們分別是保密性、完整性和可用性,那么他們又是什么,他們又代表哪些特性呢?
資訊安全工程師應該知道的事情
機密性是確保資訊僅被合法用戶訪問,而不泄露給非授權用戶、物體或程序,或供其利用的特性
完整性是指所有資源只能有授權方或以授權的方式進行修改,及資訊未授權不能改變的特性
可用性是指所有資源在適當的時候可以由授權方詢問,即資訊可被授權物體訪問并按需求使用的特性

越權漏洞
漏洞描述及測驗方法:
這類漏洞是指應用在檢查授權(Authorization)時存在缺陷,使得攻擊者在獲得低權限用戶帳后后,可以利用一些方式繞過權限檢查,訪問或者操作到原本無權訪問的高權限功能,在實際的代碼安全審查中,這類漏洞往往很難通過工具進行自動化檢測,因此在實際應用中危害很大,這里就是說,漏掃是掃不出越權漏洞的,甚至說漏掃工具是掃不到業務邏輯漏洞的,
這里是傳送門->>>https://blog.csdn.net/weixin_48421613/article/details/111117004.
修復方式:
對用戶操作進行權限校驗,防止通過修改引數進入未授權頁面及進行非法操作,建議在服務端對請求的資料和當前用戶身份做校驗檢查,
垂直越權
漏洞描述及測驗方法:
在這里以我個人的理解來講述,什么是垂直越權?垂直越權并非是低權限用戶訪問高權限用戶的用戶資源,這種說法是籠統的,我反而認為,垂直越權應該是:
任意用戶訪問到不屬于自己的功能,注意,這里不順澩,而是功能,通俗來講,就是用戶A擁有一個功能,那就是訪問日志,假設他是一個日志管理員,他除了訪問日志功能沒有其他功能,用戶B是一名訪客管理員,他有一個功能,訪問來訪的用戶,此時用戶A可以訪問用戶B的訪客通訊錄,那么此時就是典型的垂直越權,
而垂直越權不僅僅是get型,同樣也有Post型,而get型的僅僅需要知道介面的uri地址即可訪問,這類漏洞通常危害極大,且利用簡單;而post型的垂直越權大多是介面的某個功能,比如說訪問通訊錄有一個新增訪客功能按鈕,而訪客通訊錄做了權限校驗但是新增訪客按鈕并沒有做,這個時候也是一樣會形成垂直越權的漏洞,區別就是里面的引數是不太好構造的,相對而言利用起來會復雜一些,但是并不能否認其危害性,
案例如下:
此次為大家帶來的案例是一個預約小程式,這個小程式只有兩種用戶,管理員用戶以及訪客用戶,管理員用戶擁有查看訪客通訊錄、新增訪客功能;而訪客用戶則是啥功能都沒得,僅能查看自己
而此次垂直越權則是由于未做權限校驗導致普通訪客用戶直接訪問訪客通訊錄介面uri地址即可成功查看到


很顯然,訪客用戶是沒有任何功能的,此時利用訪客用戶的手機去訪問漏洞uri介面,成功查看訪客資料內容
垂直越權測驗方式式不難的,post方式就直接修改cookie這類的唯一驗證身份的標識就可以,get型的直接訪問漏洞頁面即可,具體測驗方式在以前的文章里有詳細的介紹,請大家移步即可
水平越權
漏洞描述及測驗方法:
水平越權,攻擊者能執行與自己同級別的其他用戶執行的操作,即嘗試訪問與它擁有相同權限的用戶資源,即水平越權
這類說法也是不太負責任的,因為有時候普通用戶與管理員用戶很顯然是不同級別的,但是二者都有一個查看公告的功能,只不過管理員能查看更多的公告,而普通用戶只能查看自己的公告,此時若是普通用戶成功的越權訪問到管理員才能看到的公告資訊,那么此時難道就是垂直越權了?我想不是吧
所以我覺得,應該說是,攻擊者能執行與自己相同用戶功能的資料內容,即嘗試訪問與他有相同功能的用戶的資源,即水平越權,
這里的危害要相對于垂直越權危害更高,因為他的利用方式 更加的簡單,畢竟你不需要執行任何的猜測目錄資料的步驟,直接使用本功能的資料包,進行某一段資料的修改或許就可以訪問到其他用戶的用戶資源,
為了方便大家觀看效果,這里以某一個學堂系統為案例,這個系統分為管理層、各個部門分層、各個公司分層,每一個用戶訪問的課程內容都是較其他用戶不相同的,
也就是說,員工甲是來自營銷部門的,那么他只能查看營銷培訓課程;員工乙是一名營銷部門總經理或者是其他公司總經理,那么他不但可以查看到本部門普通員工的課程,也能查看到針對于公司高管的課程內容,
案例如下,這個頁面是用戶甲的課程

通過遍歷他人的課程引數進行越權訪問
這個引數構造復雜,此處僅為方便展示,因為按照測驗案例,引數若是不可構造,構造復雜的也可以說是可證明安全的,這里給他算上是因為在其他管理介面存在垂直越權,可以遍歷到課程的引數
所以說在大家測驗程序中,若是遇到這種不可遍歷的引數,那么是不應該算的,這里僅為大家帶來測驗的方式,實際上無論是get型還是Post型,水平越權造成的引數實際上只有那么一個而已,大家只要找出這個引數便可以了,
支付邏輯漏洞
漏洞描述及測驗方法:
實際上這個情況常見的情況有:
負值反沖、正負值對沖、甚至是直接修改數量單價、總價等等,
負值反沖,就是說程式沒有校驗訂單的取值范圍,若是使用負值則可以進行支付邏輯利用;
正負值對沖,是指,通過修改訂單的數量或者是單價、總價來達到少付錢的目的,但是你的值不能是負值
此次帶來的案例,就是我在測驗程序遇到的一個,部分課程需要加入購物車后充值購買,于是乎我將單價、總數進行更改,成功的達到了少付款的目的,一元購,
案例如下:
首先頁面存在學時卡購買

加入購物車時,價格正常,此時不可以修改,否則會被攔截到

此時點擊下一步,攔截資料包,資料如下

而后修改總價格

此時發送資料包,成功一元購

修復方式:
1.服務器端在生成交易訂單時,商品的價格從資料庫中取出,禁止使用客戶端發送的商品價格,
2.服務器端在生成支付訂單時,對支付訂單中影響支付金額的所有因素(比如商品ID、商品數量、商品價格、訂單編號等)進行簽名,對客戶端提交的支付訂單進行校驗,
短信炸彈
漏洞描述及測驗方法:
是的,你沒看錯,短信炸彈嚴格意義上來講也屬于業務邏輯漏洞,誘發原因是沒有進行時間戳等校驗,此處與資訊安全描述的重放攻擊類似,在測驗程序中,某介面存在發送手機驗證碼的功能,但是短信發送平臺沒有去識別該用戶發送驗證碼的時間等,導致短時間內可以重復的發送大量的短信校驗碼,不但對系統資源進行了消耗,同時也對用戶造成了惡劣的影響,
修復方式:
最簡單的就是短信平臺對同一手機號進行識別,一定時間內不允許繼續發送驗證短信請求,也就是所謂的一分鐘內不允許繼續請求
案例:
某平臺查詢資訊時需要請求驗證碼進行身份校驗

點擊發送驗證碼時,使用burp進行攔截,同時放入至Intruder模塊,重復發包10次

發送成功

未授權訪問
漏洞描述及測驗方法:
未授權訪問漏洞,是在攻擊者沒有獲取到登錄權限或未授權的情況下,不需要輸入密碼,即可通過直接輸入網站控制臺主頁面地址,
通俗的來講,就是你本來需要登錄才能實作的功能,你現在不需要登錄就能看到,這類漏洞最容易測驗,同時也最容易被忽略,測驗方式只需要打開新的隱私瀏覽器進行訪問,或使用burp進行資料包攔截,而后將所有的用戶資訊全部刪掉,若是還能正常訪問,那就是存在此漏洞
修復方式:
在系統中,加入用戶身份認證機制或者tonken驗證,防止可被直接通過連接就可訪問到用戶的功能進行操作
案例:
某路由器存在一處漏洞,此漏洞其實是路由器配置頁面,只需要構造一條引數即可對該頁面進行訪問,而后直接便可以獲取到該路由器登錄頁面的用戶名以及密碼,

此類漏洞不容易被察覺,此處說是未授權訪問,不如說也是資訊泄露
所以我按照資訊泄露來了一波

用戶名列舉
漏洞描述及測驗方法:
這個沒啥好說的,在登錄的時候,輸入不存在的用戶名和錯誤的密碼,若是提示“該用戶并不存在”,則證明該漏洞存在,
我遇到的一個奇葩預約系統,對用戶校驗的時候顯示校驗用戶的身份和訪客的身份,若是訪客存在密碼錯誤,便提示“該訪客密碼錯誤”,說實話,挺low的
修復方式:
統一所有的提示資訊為“用戶名或密碼錯誤”
案例如下:

驗證碼問題
這里玩法就比較多了,驗證碼這里你可以說是圖形驗證碼,你也可以說是短信驗證碼,
驗證碼不失效
漏洞描述及測驗方法:
這里說的是圖形驗證碼使用過一次未立即失效引起的問題,在我遇到的案例中,都是那種驗證碼使用后依然可以繼續使用,這里測驗建議抓包之后,直接在不放包的情況下放入之burp的Intruder模塊進行暴力破解測驗
修復方式:
使用過一次驗證碼后,立即注銷即可
案例:

短信驗證碼可預測
漏洞描述及測驗方法:
這里的短信驗證碼可預測,是指的在發送短信驗證碼的同時,攔截資料包請求,而后進行發包,會看到回傳的手機驗證碼,或在發送請求短信的時候,即將發送至手機里的驗證碼出現在請求資料吧內,這兩種情況我都遇到過,
修復方式:
不要將驗證碼回傳即可
案例:

獲取驗證碼的同時進行資料包攔截


與手機接受到的驗證碼對比,一毛一樣

短信驗證碼繞過
漏洞描述及測驗方法:
這里指的繞過其實就是特權號碼,比如說0000 1111 這種的,或者輸入任意的驗證碼,而后直接修改code回傳值就可以,這個我沒遇到過特權碼繞過,遇到過登錄的時候進行code回傳值進行更改登陸成功的
修復方式:
洗掉特權碼,不要僅僅對code回傳值進行校驗即可
短信驗證碼暴力破解
這里面是因為短信驗證碼過于短,只有四位,輸入錯誤次數無限制,并且失效時間過長,且使用一次之后并不失效引起的,
大家都知道burp是有列舉模塊的,若是短信驗證碼太短了那么列舉的方案就會很少,大大的加大了爆破成功的可能
修復方式:
限制輸入錯誤的次數,錯誤五次需要重新獲取;
盡可能是有六位驗證碼;
失效時間建議不要超過五分鐘;
使用過一次立即失效
這里我遇到的案例,其實都遇到過,但是由于時間實在是過于久遠,所以就不上圖了,大家心領神會即可,畢竟沒有什么測驗難度
登錄認證繞過
漏洞描述及測驗方法:
通常存在于僅適用前端校驗,可以通過關閉js特效或者是偽造responsed的code值進行繞過
修復建議:
不使用前端校驗,嚴格校驗用戶的資料
案例:
輸入任意用戶名密碼

點擊登陸按鈕同時使用抓包工具進行資料包攔截
修改code引數
登錄成功

密碼重置漏洞
漏洞描述及測驗方法:
在得知他人的手機號碼的時候,通過修改response回傳值欺騙服務器進行重置密碼
修復建議:
正確的校驗驗證碼,不要使用前端校驗
示例:
1.點擊普通用戶找回密碼,輸入用戶名
2.修改回傳資料值

3.完成第一次繞過,輸入任意驗證碼,如法炮制

4.輸入新的密碼


5.輸入用戶名admin 密碼 ******登錄成功

SSO認證缺陷
漏洞描述及測驗方法:
SSO認證存在缺陷,可越權登錄他人賬戶,登錄的程序中攔截資料請求,嘗試修改cookie、uid等明顯的引數
修復建議:
正確的配置用戶的權限資訊,不要使用簡單的cookie或session
示例:
首先訪問某達登錄頁面
此時用戶為普通用戶,登錄后僅有一個功能
退出登錄重新登陸,同時攔截資料包如下
嘗試修改cookie為admin
發送資料包,功能出來了

空口令漏洞:
漏洞描述及測驗方法:
找到網站登錄頁面,嘗試輸入用用戶名,不使用密碼直接進行登錄,若是不使用密碼直接登錄則存在空口令
修復建議:判斷輸入密碼是否為空,禁止空口令登錄,
案例:
又又又是一次漏洞挖掘,還是某個神秘的路由器,在控制臺頁面明顯是需要登錄的

當我未使用密碼的時候,點擊登陸,神奇的發現,登錄成功

由于CVND是沒有空口令的,所以寫了一個未授權訪問

會話固定
漏洞描述及測驗方法:
在用戶進入登錄頁面,但還未登錄時,就已經產生了一個session,用戶輸入資訊,登錄以后,session的id不會改變,也就是說沒有建立新session,原來的session也沒有被銷毀),攻擊者事先訪問系統并建立一個會話,誘使受害者使用此會話登錄系統,然后攻擊者再使用該會話訪問系統即可登錄受害者的賬戶
簡而言之,就是說,當sessionid附著在url的get請求里,危害才會最大化,因為這樣的話可以通過釣魚鏈接的方式誘導用戶去登錄,而后利用此特性直接使用該生效的sessionid進行登錄,
修復方式:
在用戶提供的認證資訊(例如用戶名和密碼)、相應的權限級別發生變化時,服務器端應重新生成SessionID,并強制失效之前的會話
案例:
時間太久,找不到了
會話重用
漏洞描述及測驗方法:
用戶退出系統后,服務器端Session未失效,攻擊者可利用此Session向服務器繼續發送服務請求,
最常見的其實就是你登錄之后,點擊注銷后,此時頁面退回至登錄頁面,使用瀏覽器自帶的退回上一頁功能,依然可以回傳至注銷前頁面
修復方式:
用戶退出系統后,服務器端應清空此用戶的Session資訊
案例:
點擊退出登錄按鈕

此時已退回至登錄頁面

點擊瀏覽器回傳按鈕,成功回退至注銷前頁面

重放攻擊
漏洞描述及測驗方法:
關鍵業務操作未作token或者唯一標識碼,導致攻擊者可以重復多次進行請求,導致惡意操作,如重復交易等問題,
這里測驗方式便是,在請求的時候進行burp抓包,而后重復的發送數次,若是成功發送,則是存在此漏洞
修復方式:
服務端應用程式應檢查客戶端提交的資料的唯一性,如使用流水號、時間戳、token等,并將流水號、時間戳等進行簽名,
案例:
新增訪客示例

隨意選中一個資料作為列舉點

發送數次,皆成功

回傳驗證,發現重放成功,成功批量注冊數個用戶

以上便是較為常見的業務邏輯漏洞了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342029.html
標籤:其他
上一篇:GuessedAtParserWarning: No parser was explicitly specified,
下一篇:力扣——最后一個單詞的長度
