Permissions
儘管有數據執行保護,但仍執行任意程式碼
緩衝區溢出的可利用性根據周圍的程式碼變化很大。例如,是否有其他緩解技術,例如堆棧金絲雀。但是,如果您只考慮 DEP/W^X,那麼可以,通常仍然可以利用它們。
如何利用它很大程度上取決於緩衝區溢出的類型。從您提到使用 NOP 幻燈片來看,我假設您正在談論一個簡單的基於堆棧的緩衝區溢出。在這種情況下,您可以使用諸如面向返回的程式 (ROP)或面向跳轉的程式 (JOP)之類的技術。這些技術重用存在於已標記為可執行的記憶體部分中的程式碼。因此,您不需要標記為可執行和可寫的記憶體。
減輕這些程式碼重用攻擊的一種技術是控制流完整性 (CFI)檢查。這種緩解嘗試只允許程式碼通過已知的“好”路徑流動。近年來,這已經開始獲得更多的主流支持,例如來自clang/llvm的編譯器支持。