當可以覆寫的位元組數有限時,緩沖區溢位攻擊可以起作用嗎?
例如,考慮一個場景,其中使用 strncpy 將某種文本(假設長度為 27 個字符,包括一個空終止符)復制到最多可以包含 100 個字符的緩沖區中,然后使用 strncat 移動另外 100 個字符。
在這種情況下,緩沖區將有 127 個字符,即使它只在堆疊上分配了 100 個位元組。由于我無法僅用 27 個位元組覆寫回傳地址,因為它位于堆疊的更遠位置,有沒有辦法可以利用這種行為?也許通過注入允許我覆寫更多字符/覆寫回傳地址的匯編代碼?
uj5u.com熱心網友回復:
你正在覆寫一些不打算被覆寫的東西。您是否可以利用這一點取決于程式將如何使用您覆寫的記憶體,以及您自己的獨創性。
如果它只包含程式已完成使用的變數,并且在它們被正常程式執行覆寫之前不會再次讀取,則該錯誤是不可利用的。
如果它包含將再次使用的變數,那么你看看它對它們做了什么。例如:
如果其中之一是
bool has_administrator_privileges那么你在做生意。如果其中一個是稍后要呼叫的函式指標,您可以將它指向您想要執行的任何代碼。
如果其中一個是資料指標,它將被取消參考以寫入記憶體中的某個位置,您可以更改它以便寫入其他一些記憶體。由于相同的原因之一,這反過來可能是有價值的。
等等。
但是,如果它們是無聊的變數,其值不會以任何對您有用的方式改變程式行為(例如char user_nickname[50]),那么您可能無法有效地利用該錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511454.html
標籤:C安全缓冲区溢出
上一篇:PostgreSQL登錄嘗試失敗
