邏輯漏洞是指由於程式邏輯輸入管控不嚴或者邏輯太複雜,導致程式不能夠正常處理或處理錯誤,邏輯漏洞根據功能需求的不同產生的漏洞方式也不同。一般出現在網站程式的登入註冊、密碼找回、驗證方式、資訊檢視、交易支付金額等地方。
這類漏洞不同於常見WEB漏洞,常見WEB漏洞都可以總結為一定的正規化,而邏輯漏洞不行
邏輯漏洞出現的原因也是有很多種,需要有一定個人經驗積累才能在程式碼審計過程中發現此類漏洞
首先將所有邏輯漏洞的問題分為前端和後端兩個部分,先測試繞過前端規則限制再測試繞過後端規則限制,一般情況下只要能夠突破原有規則限制的都就可以算是漏洞。
挖掘邏輯漏洞總體步驟分為以下三步:
未授權存取敏感資料介面
簡訊api介面洩露被惡意呼叫
資料庫介面洩露,導致資料可被惡意操作
萬能驗證碼:
程式設計師在開發驗證碼模組時,為了方便呼叫驗證碼驗證功能是否完善,故意設定了幾個萬能的驗證碼作為測試資料。在開發結束後由於程式設計師的疏忽,沒有刪除該測試驗證碼資料從而導致該漏洞的產生。
驗證碼回傳:
通過抓包的方式,可以看到驗證碼內容回顯在了封包中;或者通過檢視網頁原始碼可以看到驗證碼中的內容,導致正確驗證碼可以被直接讀取利用到。
刪除驗證碼繞過:
通過抓包將驗證碼的值刪除或者直接刪除驗證碼引數,然後將修改後的封包進行重放導致驗證碼驗證被繞過。
驗證碼爆破:
此處驗證碼爆破通常是指手機簡訊驗證的方式,由於沒有對輸入同一個驗證碼的次數做限制,並且驗證碼的內容太簡單,例如4位元或者6位的純數位組成。可以通過Burp的Intruder模組對驗證碼內容進行爆破,直到匹配到正確的驗證碼。
驗證碼重放
首先,輸入錯誤的驗證碼,進行抓包重放一次,觀察驗證的返回的封包內容,再用正確的驗證碼再進行抓包重放,對比兩個封包的差異,然後根據這些差異驗證碼是否失效。
然後將正確的驗證碼傳送至Burp的Intruder模進行不斷的重放,比較這些封包是否都是正確驗證碼時返回的一樣內容,如果封包內容一樣說明存在驗證碼重放的漏洞。
驗證碼與手機號未統一匹配
首先用自己的手機收到正確驗證碼,在點選註冊時攔截包將手機號改為其他手機號,如果成功的話就註冊了別人的手機號,這是因為後端僅驗證了驗證碼是否是正確的而沒有驗證驗證碼是否與手機匹配。
嘗試不斷重放傳送驗證碼的封包,檢視手機是否在短時間內收到了多條簡訊,是的話則存在簡訊轟炸漏洞,這是因為後端沒有對傳送手機簡訊做時間/次數限制。
如果後端對簡訊驗證碼做了限制,那麼可以嘗試以下幾種方式進行繞過:
首先用一個賬號登陸系統後,通過抓包修改使用者引數,可以達到檢視或者修改他人賬號的目的,儘量對多介面或者多功能模組進行不斷測試越權操作。同時也要多個賬號登陸,分析對比這些賬號封包中的請求引數差異,通過修改這些存在差異的引數,看看是否能夠達到越權操作的目的。
越權漏洞又分為平行越權,垂直越權和交叉越權。
可能存在使用者個人資訊頁面、密碼找回處以及各種呼叫到使用者資訊資料的地方,通過抓包檢視返回資訊是否載入了一些敏感的資料資訊,比如查詢使用者資訊的時候也將使用者的密碼資料在封包中回顯了;或者在使用者個人資料頁面,通過抓包修改使用者ID引數,可以通過遍歷查詢到其他賬號的使用者資料,導致使用者資訊洩露;
通常發生在忘記密碼處,由於系統沒有嚴格匹配使用者忘記密碼時的驗證方式,通過抓包修改使用者引數,導致任意使用者的密碼都能夠被重置。
比如某個忘記密碼功能處採用手機號簡訊驗證的方式來重置使用者密碼,如果該驗證手機號沒有對使用者賬戶進行繫結,那麼就可以通過輸入任意手機號接收簡訊驗證,然後就可以利用該驗證碼重置使用者密碼了。
很多中小型的購物網站都存在訂單金額任意修改漏洞。在提交訂單的時候抓取封包或者直接修改前端程式碼,然後對訂單的金額任意修改。
經常見到的引數大多為:rmb 、value 、amount 、cash 、fee 、money 等
關於支付的邏輯漏洞這一塊還有很多種思路,比如相同價格增加訂單數量,相同訂單數量減少產品價格,訂單價格設定為負數等等。
有些業務的介面,因為缺少了對使用者的登陸憑證的較驗或者是驗證存在缺陷,導致駭客可以未經授權存取這些敏感資訊甚至是越權操作。
一般容易出現在檔案匯出下載,JSON資料頁面,第三方應用頁面等位置。
常見案例:
實際上還有很多案例,他們都存在一個共同的特性,就是沒有對使用者的登陸憑證進行效驗
有些關鍵性的介面因為沒有做驗證或者其它預防機制,容易遭到列舉攻擊。
常見案例:
cookie的效驗值過於簡單。有些web對於cookie的生成過於單一或者簡單,導致駭客可以對cookie的效驗值進行一個列舉。或者通過修改cookie中的某個引數可以登陸其他使用者,即cookie仿冒。
token一般是操作令牌,每個使用者在登入系統時,伺服器會為每個使用者生成token令牌作為操作憑證。如果token設計太過於簡單,那麼可能會被破解;或者token沒有設定過期的時間,使得使用者token不唯一,導致使用者token存在被盜用的風險。
auth設計缺陷
經常研究邏輯漏洞的人可能會對以下URL很熟悉
www.xxx.com/resetpassword.php?id=MD5
使用者修改密碼時,郵箱中會收到一個含有auth的連結,在有效期內使用者點選連結,即可進入重置密碼環節。而大部分網站對於auth的生成都是採用rand()函數,那麼這裡就存在一個問題了,Windows環境下rand()最大值為32768,所以這個auth的值是可以被列舉的。
如下面這個程式碼可以對auth的值做一個字典。
$a=0;
for ($a=0;$a<=32768;$a++){
$b=md5($a);
echo "\r\n";
echo $b;
}
然後重置某個賬號,並且對重置連結內的auth進行列舉。
通常這種漏洞比較容易出現在活動頁面的會員優惠開通,而且要考慮到支付後要比正常購買優惠才算是漏洞。
注意:在做溢位測試時,有可能導致目標伺服器宕機,需要向授權單位申請授權後才能進行測試。
一些網站中的限時活動設定了活動時間範圍,可以通過抓包嘗試更改時間引數為活動未限定範圍內的。
前端加密、後端解密校驗。比如在使用者登入時,通過抓包發現使用者密碼被加密傳輸了,可以利用一些解密工具進行破解,如:Burp解密或者一些線上解密網站。
首先在沒有驗證碼或者驗證碼可以被繞過的情況下,嘗試5次或者10次賬號密碼登陸,檢測目標是否封禁賬戶,如果沒有封禁規則,可以不斷進行爆破。採用賬號密碼爆破,對於一些商城、應用、政府、學校採用撞庫方式判斷是否存在該賬號(需要準備各類字典:手機號撞庫、郵箱撞庫、姓名撞庫)。
url跳轉漏洞也叫開發重定向漏洞,可以把使用者重定向到攻擊者自己構造的頁面去,簡單的說就是可以跳轉到任意指定的url。一般出現在驗證跳轉、sso登陸等位置。
伺服器端未對傳入的跳轉url變數進行檢查和控制,可能導致可惡意構造任意一個惡意地址,誘導使用者跳轉到惡意網站。
危害:
http://www.xxx.com?url=https://www.baidu.com
替換url引數後能夠跳轉到對應頁面,但是一些網站可能會對url跳轉做限制,可以嘗試繞過bypass
1.利用問號繞過限制,最終跳轉到京東頁面
url=https://www.baidu.com?www.jd.com
2.利用@繞過限制,最終跳轉到京東頁面
url=https://[email protected]
3.利用斜杆反斜槓繞過限制
4.利用#繞過限制
url=https://[email protected]
5.利用子域名繞過
6.利用畸形url繞過
7.利用跳轉IP繞過
在支付環節中由於邏輯不嚴謹而產生的漏洞稱為支付漏洞。
只要有引數,都可以修改,都有可能出現問題。
通常使用兩個賬號來對比測試,這樣可以更快發現可疑引數
正常的邏輯是使用者購買商品,然後價格累加得到一個總價進行扣款。這個時候就會產生邏輯問題:如果說使用者購買的商品是負數了,那麼計算的總數就是負數。反過來錢給使用者
正常的邏輯是a-b-c-d 迴圈漸進的進行流程操作。這個時候就會產生邏輯問題:可以直接從中繞過某一個過程進入到下一步操作。如果說有一項是支付的操作,那麼也就會產生支付繞過,如果說有一項是驗證機制,就會繞過驗證直接進入下一步。
直接對下單的金額進行修改值,這裡可以使用fd或者burp抓包
把商品放入購物車點選下單支付,會跳轉到微信,支付寶等第三方支付平臺。這個時候還可以繼續在購物車中加入商品,支付結束之後,商家發放的商品是現在的購物車裡面的東西。
購買成功之後,繼續重放請求,可以讓購買的商品一直增加。購買成功之後,會有一個銀行對商戶網站跳轉的過程,如果反覆進行操作,有機率會導致商品反覆購買和增加,但是不需要付更多的錢。
金錢做了簽名認證之後,修改後不通過,但是在裡面仍然會有一個引數對金額產生影響導致問題產生。
訂單替換髮生在支付之後的事件處理,同時向伺服器發起二次支付請求一個多一個少,支付金額少的,然後支付之後進行替換,告知伺服器訂單支付完成,並且過程可以反覆的回放。
需要兩個收款人,一個是正常的商家,一個是偽造的商家
產生在paypal類似的國際支付的場景。
在支付過程中發生使用者替換現象,首先登陸自己的賬戶,然後取得另外一個人的賬戶名等有效資訊,在業務流程中用對方的使用者名稱替換自己的使用者名稱,用對方的餘額購買完成後,再替換自己的賬戶名,這樣就形成別人的錢買自己的東西
強制攻擊發生在暴力破解的情況下,如果一個商家運用一個自己的網店,接入第三方支付介面,由於設計上的不當導致商家與第三方支付約定的金鑰Key可以單獨被MD5加密,導致可以使用MD5碰撞技術對金鑰進行破解,攻擊者可以設計簡單的金鑰加密資訊使得MD5加密是可以用MD5碰撞技術進行暴力破解。
內建支付功能的app為了設計上的方便有可能會把Md5或者是RSA的私鑰洩漏導致攻擊者反編譯apk之後獲取金鑰資訊使得交易資訊可以被篡改。
13.函數修改:apk反編譯之後的函數修改,可能導致商家在最後一步向支付方提交訂單時未驗證資訊的準確性,仍然被篡改。