三大程式語言的數組越界訪問
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
有著作權,請勿任意轉載。若要分享,請註明本篇來源。