2013-08-16 37 views
0

我正在開發一個項目(實際上是一個競賽)來利用在遠程服務器上運行的應用程序。我確實有它們編譯的二進制文件,其中包含一些調試信息(無源代碼)並且沒有堆棧保護。 我設法將shellcode注入堆棧並覆蓋返回地址,以便它也可以毫無問題地執行。緩衝區溢出 - 硬編碼返回地址

唯一的是我注入一個硬編碼的返回地址。我猜根據操作系統和體系結構的不同,地址可能會有很小的差異(應該是32位)。

我不知道服務器是否使用ASLR執行二進制文件。但它已停用 - 是否有注入動態合適返回地址的方法?

我也在本地嘗試通過連接到運行在我自己的機器上的服務器蠻力強制可能的ASLR地址。如果返回地址不正確,分叉進程崩潰,則文件描述符不會被釋放,並且在1024次嘗試之後,不再有可能進行連接。 是否有可能暴力破解地址?

謝謝!

回答

0

有沒有一種方法注入動態合適的返回地址?

是的,但它很難取決於應用程序,你會尋找一個泄漏的指針,允許你計算可用的地址,如模塊的基地址。 How do ASLR and DEP work?

您還可以 - 假設沒有ASLR - 識別您可以發送到遠程服務器的最大數據量並設置儘可能大的nop底座,然後嘗試跳進它。這會稍微增加你的成功機會。

是否有可能蠻力的地址?

還有一種可能性,但你可能不想依賴它的概率 - 特別是如果它是一個64位應用程序。本文仍然可能會讓你感興趣:Protecting Against Address Space Layout Randomization ...

玩得開心,祝你好運!

+0

謝謝! 只有一個問題:如果我仍然無法控制EIP,如何計算可用地址。那麼,我控制它,但我不能執行我自己的代碼。 – toetoe

+0

請接受我的道歉,但我不認爲我理解你的評論正確。如果你指的是我的回答,想象一下,在特殊情況下,應用程序會泄漏指向易受攻擊函數內部函數局部變量的指針值(多麼方便!)。由於您有二進制文件(您知道堆棧幀佈局),因此可以使用此值來計算堆棧幀地址。所以這是一個兩步開發:1)檢索泄漏指針的值2)使用先前檢索的值來計算您的有效負載位置=>基於堆棧的溢出漏洞,並啓用ASLR。 – dna

+0

是的,我知道你的意思。 問題在於二進制文件是遠程執行的,地址必須通過網絡發送。不幸的是,我沒有看到任何機會。 – toetoe