2018年7月10日 星期二

三大程式語言的數組越界訪問

三大程式語言的數組越界訪問



C語言的數組越界訪問




有學過C語言的很容易就直接看出來,能夠抽取到陣列以外的東西。

問題是,陣列以外的到底有什麼東西,是零嗎?

不對,我們來使用OllyDbg看看




看堆疊,很明顯

我們輸入數字: 4

輸入段分析:

mov     dword ptr ss:[esp+0x4], eax

在scan內 有&a 指向a這塊記憶體區塊

推測eax就是我們輸入的東西

esp+4 內部數值是位址,這個位址內存放的就是我們輸入的數值

&a 意思就是指向a這塊記憶體

存放入堆疊




再來看流程分析一下,


mov     edx, dword ptr ss:[esp+eax*4+0x10]

這段組合語言是重點就是取得陣列之外的東西




這段就是輸出。


輸出了陣列外面的堆疊內容,可以利用這樣的弱點進行竊取對方電腦記憶體內容



Java語言的數組越界訪問

在java內,用java api實現想要的內容,但是一般的電腦都用C語言為底層架構,並不是Jvm相關架構,因此java編譯後,需要在Jvm上面才能執行。





在這邊我就不多提了,有學過Java的很清楚,小編我要表達的是什麼。

利用第二個陣列長度去執行迴圈,取出第一個的陣列內部所有內容。
當長度超過第一個陣列長度java還是一樣能編譯成功但執行後會報錯

Java有出錯回饋,捨去掉了記憶體外洩的風險。

小編的程式碼有寫了try catch的命令,各位可以把try catch關鍵字拿掉,看看編譯執行後,會出現什麼樣的情形。



Python 數組越界訪問




Python有索引值報錯,不構成記憶體洩漏。

另外,也可以這樣寫。



這樣同樣也會報錯。



這些都是同樣描述數組越界訪問的概念。


Java與Python都有設定好錯誤處理
C語言不會有報錯,直接可以進行竊取記憶體內部資料






By  藍雪科技-Sibe



有著作權,請勿任意轉載。若要分享,請註明本篇來源。






Ollydbg 2.01 繁體中文版

Ollydbg 2.01 繁體中文版 Ollydbg 2.01 繁體中文版下載: Mega:   https://mega.nz/#!I2Qy1aQD!-T5zO3PaANjBHU73I4NlkY8SHMxRptbBV8TpmeFt1fo GD: h...