小編給大家分享一下服務(wù)器中意外內(nèi)存泄漏的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信小程序、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十年以來,已經(jīng)為成百上千家成都混凝土攪拌罐各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的成百上千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
我們的路由器使用的是一塊Macronix MX15L12835FMI閃存芯片(16針腳SOP):
首先,我需要觀察芯片的常規(guī)操作。在研究過程中,我發(fā)現(xiàn)它的閃存并沒有得到充分使用,只有設(shè)備在啟動(或加載整個操作系統(tǒng))時或在使用Web管理面板時會使用到閃存。閃存芯片似乎使用的是Single API模式,其常規(guī)讀取命令如下所示:
命令開頭為一個05 FF命令,根據(jù)數(shù)據(jù)表提供的信息,這條命令可以讀取出寄存器的狀態(tài)信息。我最初的目的是對閃存讀取命令進行篡改,并用它來從硬盤中讀取數(shù)據(jù)。
考慮到SPI命令是與時鐘信號同步的,那我的攻擊同樣可以跟同一個時鐘信號同步:我可以記錄下時鐘上升沿信號的數(shù)量,并在特定數(shù)量的時鐘信號下將閃存芯片的15號針腳接地,然后修改閃存的讀取命令并用它來讀取其他信息。放大時鐘信號后我們可以看到,數(shù)據(jù)只會在時鐘信號的下降沿發(fā)生變化,所以我們的攻擊應(yīng)該是有效的。
首先我們進入到設(shè)備的串行控制臺中,然后使用命令cat /dev/mtdblock0來觸發(fā)閃存的讀取命令。該命令的原始狀態(tài)如下所示:
為了方便進行對比,所以我運行了cat /dev/mtdblock2:
接下來,我連接了一個晶體管和一個FPGA,F(xiàn)PGA可以讀取時鐘信號并控制晶體管的開關(guān),接地針腳15暫時等待幾個時鐘周期,并讓其中的一個讀取指令地址失效:
我還專門編寫了一個腳本來讓程序等待一定的時鐘周期,并修改閃存的讀取操作,然后運行cat /dev/mtdblock2并通過示波器來監(jiān)控閃存的命令執(zhí)行情況:
如果你仔細看的話,你就會發(fā)現(xiàn)右邊是原始閃存讀取操作的殘余部分(原始命令/dev/mtdblock2為03 01 00 00),我們可以通過運行cat /dev/mtdblock2命令來驗證我們的發(fā)現(xiàn):
需要注意的是,命令確實成功執(zhí)行了,/dev/mtdblock2的第一個數(shù)據(jù)塊跟之前/dev/mtdblock0的一樣,表示我們的操作已經(jīng)成功了。
現(xiàn)在,我們就可以用這種方法來對Web服務(wù)器接口進行攻擊了,如果我可以讓硬盤中的某個資源加載失敗,理論上來說我就可以讓它來讀取任何我想要讀取的內(nèi)容了,比如說通過Web請求來獲取到固件文件等等。
但是,我很快就遇到了如下所示的問題:
雖然我可以從物理閃存中讀取任意區(qū)塊,但我無法保證數(shù)據(jù)可以正確解壓。雖然Web服務(wù)器似乎還可以正常工作,但是其中的一個圖片已經(jīng)無法正確加載了。用Burp進行分析后,我很快就找到了“罪魁禍首”:
這是一個針對/wireless_1.gif的有效請求的一條響應(yīng)數(shù)據(jù),我知道這是一個無效的GIF文件,但我并不知道它到底是什么,我猜測它要么來自于Web服務(wù)器的內(nèi)存,或者是磁盤中的數(shù)據(jù)塊。
為了進行測試,我對整個Web應(yīng)用程序進行了分析,然后發(fā)送了一條新的/wireless_1.gif請求:
神奇的是,這個gif文件竟然自己發(fā)生了變化,而且我也沒觀察到其他的SPI流量生成,這表示我成功實現(xiàn)了內(nèi)存泄漏(很可能是一個內(nèi)存用后釋放漏洞),只不過唯一的遺憾是它并非目標系統(tǒng)的密碼文件。
以上是“服務(wù)器中意外內(nèi)存泄漏的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!