對於「條件競爭」的利用

2021-09-29 08:25:10 字數 1047 閱讀 5686

條件競爭漏洞是一種伺服器端的漏洞,是由於開發者設計應用程式併發處理時操作邏輯不合理而造成。當應用面臨高併發的請求時未能同步好所有請求,導致請求與請求之間產生等待時出現邏輯缺陷。該漏洞一般出現在與資料庫系統頻繁互動的位置,例如金額同步、支付等較敏感操作處。另外條件競爭漏洞也會出現在其他位置,例如檔案的操作處理等。

某平台提現功能的業務處理流程為: 使用者發起提現 -> 獲取使用者金額並判斷能否提現 -> 提現:生成提現訂單->扣除提現金額

<?php 

public funtion withdraw

($user_id

,$withdrawal_amount)'"

);if(

$money

['balance']==

0)showerror

('金額為零,無法提現!');

//提現餘額小於等於資料庫的值就提現if(

$withdrawal_amount

<=

$money

['balance'])

where uer_id=''")

;showsuccess

('提現成功!');

}else

}?>

上述**在非併發情況下是沒有問題的。

假設現有乙個使用者在系統中共有2000元可以提現,他想全部提現。於是該使用者同時發起兩次提現請求,第一次提交請求提現2000元,系統已經建立了提現訂單但還未來得及修改該使用者剩餘金額,此時第二次提現請求同樣是提現2000元,於是程式在還未修改完上一次請求後的餘額前就進行了餘額判斷,顯然如果這裡餘額判斷速度快於上一次餘額修改速度,將會產生成功提現的兩次訂單,而資料庫中餘額也將變為-2000。而這產生的後果將會是平台多向該使用者付出2000元。

先儲存檔案,再判斷是否合法,然後又刪除。。。

首先將檔案上傳到伺服器,然後檢測檔案字尾名,如果不符合條件,就刪掉,典型的「引狼入室」。

具體攻擊流程檢視,

競爭條件(race condition)

在一些作業系統中,協作的程序可能共享一些彼此都能讀寫的公用儲存區。這個公用儲存區可能在記憶體中 可能是在核心資料結構中 也可能是乙個共享檔案。這裡共享儲存區的位置並不影響通訊的本質及其帶來的問題。為了理解實際中程序間通訊如何工作,我們考慮乙個簡單但很普遍的例子 乙個假離線列印程式。當乙個程序需要列印...

Web條件競爭

最近,正好作業系統課上正在學程序的競爭關係,再加上寒假安恆杯2月賽上有道web題考到了條件競爭漏洞的利用,所以就系統的學習和總結下條件競爭漏洞。一 漏洞成因 執行緒程式設計中,為了保證資料操作的一致性,作業系統引入了鎖機制,用於保證臨界區 的安全。通過鎖機制,能夠保證在多核多執行緒環境中,在某乙個時...

WEB CTF 條件競爭

條件競爭漏洞是一種伺服器端的漏洞,由於伺服器端在處理不同使用者的請求時是併發進行的,因此,如果併發處理不當或相關操作邏輯順序設計的不合理時,將會導致此類問題的發生。下面以相關操作邏輯順序設計的不合理為例,具體討論一下這類問題的成因。在很多系統中都會包含上傳檔案或者從遠端獲取檔案儲存在伺服器的功能 使...