2011-04-03 57 views
6

我明白,一個典型的基於堆棧的緩衝區溢出攻擊的有效載荷看起來是這樣的:基於堆棧的緩衝區溢出攻擊中的修改後的返回地址是如何近似的?

(返回地址)(返回地址)... (返回地址)(返回地址) (返回地址)(返回地址) (NOP)(NOP)(NOP)(NOP)...(NOP) (NOP)(NOP)(NOP)(SHELLCODE)

我也明白的shellcode的成功執行取決於幾件事情:

  1. 的重複返回地址的有效載荷的部分 具有覆蓋該堆棧幀的 返回指針
  2. 返回地址必須是NOP 滑動的某些部分的 地址(或 的開頭shellcode)

我沒有得到的是如何使用這種技術的惡意軟件總是可以讓這兩件事情正確。在我看來,爲了製作一個工作的有效載荷,攻擊者必須知道目標緩衝區的大概地址和它與返回地址的大致距離。

這兩個通常是相當確定性的?例如,如果攻擊者在他的機器上進行了幾次試驗和錯誤的會話,那麼相同的有效載荷是否會在所有其他機器上使用完全相同的二進制文件?

回答

6

確定內存佈局的準確性完全取決於您正在損壞的函數的堆棧幀。有時偏移量可能非常準確,甚至不需要滑雪橇,但無論如何它都是一個好主意。如果您在調試器中多次觸發問題,您可以瞭解堆棧的混亂程度。其他因素可能會影響偏移的大小。例如,如果偏移量可以針對不同版本的程序進行更改,例如爲windows 2000 and windows xp編寫的漏洞。應用程序的不同語言分佈也會影響偏移量的大小。

但是,ASLR對該開採方法造成嚴重問題。基於瀏覽器的漏洞通常使用Heap Spraying來繞過ASLR。

6

爲了製作工作有效載荷,攻擊者必須知道目標緩衝區的近似地址及其與返回地址的近似距離。

你是對的。事實上,你必須和調試器玩一下,才能寫出正確的漏洞。 一旦你寫了它並進行了測試,如果二進制文件在不同的機器上是相同的,exploit應該可以正常工作。

(做工精細是有點樂觀了。比方說,shellcode的應該啓動。該攻擊可能的有效性取決於其他因素。)

0

五言的地址並不總是根據相同在系統和二進制文件中,一個黑客惡意軟件用來提高機會的是使用不同的返回地址生成多個有效載荷(如果有10個NOPS,則爲+10個增量),並嘗試所有操作直到它們工作。

相關問題