我明白,一個典型的基於堆棧的緩衝區溢出攻擊的有效載荷看起來是這樣的:基於堆棧的緩衝區溢出攻擊中的修改後的返回地址是如何近似的?
(返回地址)(返回地址)... (返回地址)(返回地址) (返回地址)(返回地址) (NOP)(NOP)(NOP)(NOP)...(NOP) (NOP)(NOP)(NOP)(SHELLCODE)
我也明白的shellcode的成功執行取決於幾件事情:
- 的重複返回地址的有效載荷的部分 具有覆蓋該堆棧幀的 返回指針
- 返回地址必須是NOP 滑動的某些部分的 地址(或 的開頭shellcode)
我沒有得到的是如何使用這種技術的惡意軟件總是可以讓這兩件事情正確。在我看來,爲了製作一個工作的有效載荷,攻擊者必須知道目標緩衝區的大概地址和它與返回地址的大致距離。
這兩個通常是相當確定性的?例如,如果攻擊者在他的機器上進行了幾次試驗和錯誤的會話,那麼相同的有效載荷是否會在所有其他機器上使用完全相同的二進制文件?