WEB CTF 條件競爭

2021-09-28 16:28:16 字數 1055 閱讀 7275

條件競爭漏洞是一種伺服器端的漏洞,由於伺服器端在處理不同使用者的請求時是併發進行的,因此,如果併發處理不當或相關操作邏輯順序設計的不合理時,將會導致此類問題的發生。

下面以相關操作邏輯順序設計的不合理為例,具體討論一下這類問題的成因。在很多系統中都會包含上傳檔案或者從遠端獲取檔案儲存在伺服器的功能(使用者上傳頭像),下面有一段簡單的上傳檔案的的**

<?phpif(

isset

($_get

['src'])

)?>

*先通過copy($_get['src'],$_get['dst']);將檔案從原始檔位址複製到目的位址,然後檢查$_get['dst']的安全性,如果發現$_get['dst']不安全就通過unlink($_get['dst'])將其刪除。但是,當程式在服務端併發處理使用者請求時問題及來了。如果在檔案上傳成功後但是在相關安全檢查發現它是不安全檔案刪除它以前的這個檔案就被執行了那麼會怎樣呢?

假設攻擊者上傳了乙個用來生成惡意shell的檔案,在上傳完成和安全檢查完成並刪除它的間隙,攻擊者通過不斷發起訪問請求的方法訪問了該檔案,該檔案即劊唄執行,並且在伺服器上生成乙個惡意shell的檔案,至此,該檔案的任務就全部完成了,至於後面發現它是不是乙個安全的檔案並把它刪除的問題都已經不重要了,因為攻擊者已經成功的在伺服器中植入了乙個shell檔案,後續的一切都不是問題了

由上述過程我們可以看到這種「先將猛獸放進屋,再殺之」的處理邏輯在併發的情況下是十分危險的,極易導致條件競爭漏洞的發生。

攻擊者通過不斷地發起訪問上傳的惡意檔案請求的方法成功的將原有處理不安全的檔案

上傳檔案e -

> 刪除不安全檔案e

的業務邏輯變成了

上傳檔案e -

> 訪問執行檔案e,生成shell檔案s -

> 刪除不安全檔案e

不安全檔案e雖然被刪除了,但是有它生成出來的shell檔案s卻保留在了伺服器中,對攻擊者來說這個shell檔案s才是後續攻擊的關鍵。

競爭條件(race condition)

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

Web條件競爭

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

條件競爭漏洞

競爭條件發生在多個執行緒同時訪問同乙個共享 變數 檔案等沒有進行鎖操作或者同步操作的場景中。開發者在進行 開發時常常傾向於認為 會以線性的方式執行,但他們忽視了並行伺服器會併發執行多個執行緒,這就會導致意想不到的結果。執行緒同步機制確保兩個及以上的併發程序或執行緒不同時執行某些特定的程式段,也被稱之...