最近,正好作業系統課上正在學程序的競爭關係,再加上寒假安恆杯2月賽上有道web題考到了條件競爭漏洞的利用,所以就系統的學習和總結下條件競爭漏洞。
一.漏洞成因:
執行緒程式設計中,為了保證資料操作的一致性,作業系統引入了鎖機制,用於保證臨界區**的安全。通過鎖機制,能夠保證在多核多執行緒環境中,在某乙個時間點上,只能有乙個執行緒進入臨界區**,從而保證臨界區中運算元據的一致性。
臨界區指的是乙個訪問共用資源(例如:共用裝置或是共用儲存器)的程式片段,而這些共用資源又無法同時被多個
執行緒訪問的特性。
競爭條件」發生在多個執行緒同時訪問同乙個共享**、變數、檔案等沒有進行鎖操作或者同步操作的場景中。
二.條件競爭例項:
程式中多個執行緒之間就產生了資源競爭,這種情況發生了多次,於是最後的結果就和我們的預期不一樣了。
三.web
中的條件競爭
web伺服器處理多使用者請求時,是併發進行的,如果併發處理不當或者是相關的邏輯操作設計的不合理時,就可能導致條件競爭漏洞。
乙個簡單的例子:
將檔案上傳到伺服器,然後檢查上傳的檔案的型別,如果不符合條件就刪除。
但是,如果我們採用多執行緒的方式訪問上傳的檔案,總有一次我們在檔案刪除之前就訪問到了這個檔案,如果這個檔案是
php的一句話木馬,就在伺服器中執行了
shell
了哈具體**和利用指令碼如下:
前端**:
後端php
彈出並返回
array
陣列的最後乙個單元,並將陣列
array
的長度減一
,explode()
函式把字串打散為陣列。
if (!in_array($ext,$allowtype))
?>
四.ctf實戰
先隨便上傳個檔案,發現能夠上傳成功,顯示要上傳可執行檔案
上傳乙個包含一句話木馬的可執行的
php檔案
發現第三層防護,存在黑名單檔案型別過濾,嘗試繞過哈
發現使用.phtml能夠繞過。
發現上傳的檔案被殺軟查殺了,是上傳成功才被查殺的,考慮利用條件競爭漏洞
利用python的requests庫寫乙個多執行緒併發訪問的指令碼
import requests
url ="upload/2.phtml"
while true:
r =requests.get(url)
if 'flag' inr.text:
printr.text
參考資料:
競爭條件(race condition)
在一些作業系統中,協作的程序可能共享一些彼此都能讀寫的公用儲存區。這個公用儲存區可能在記憶體中 可能是在核心資料結構中 也可能是乙個共享檔案。這裡共享儲存區的位置並不影響通訊的本質及其帶來的問題。為了理解實際中程序間通訊如何工作,我們考慮乙個簡單但很普遍的例子 乙個假離線列印程式。當乙個程序需要列印...
WEB CTF 條件競爭
條件競爭漏洞是一種伺服器端的漏洞,由於伺服器端在處理不同使用者的請求時是併發進行的,因此,如果併發處理不當或相關操作邏輯順序設計的不合理時,將會導致此類問題的發生。下面以相關操作邏輯順序設計的不合理為例,具體討論一下這類問題的成因。在很多系統中都會包含上傳檔案或者從遠端獲取檔案儲存在伺服器的功能 使...
條件競爭漏洞
競爭條件發生在多個執行緒同時訪問同乙個共享 變數 檔案等沒有進行鎖操作或者同步操作的場景中。開發者在進行 開發時常常傾向於認為 會以線性的方式執行,但他們忽視了並行伺服器會併發執行多個執行緒,這就會導致意想不到的結果。執行緒同步機制確保兩個及以上的併發程序或執行緒不同時執行某些特定的程式段,也被稱之...