寫(xiě)在最前:
大家分析的時(shí)候看一下自己學(xué)號(hào)是多少,然后分析對(duì)應(yīng)的文件哈,我想都沒(méi)想就打開(kāi)01分析了,全部都做完了發(fā)現(xiàn)我不是這個(gè)文件,當(dāng)事人現(xiàn)在就是很后悔,非常后悔嗚嗚嗚嗚嗚。
實(shí)驗(yàn)一
1 加載bin文件找到reset函數(shù)的步驟
打開(kāi)IDA Pro 7.6
,打開(kāi)task1_0x.elf
文件, 選對(duì)應(yīng)的選項(xiàng)。
然后點(diǎn)開(kāi)main
函數(shù),f5
反匯編生成簡(jiǎn)單易懂的代碼。
2 逆向存在溢出緩沖區(qū)的函數(shù)截圖
從main
函數(shù)開(kāi)始分析,分析如下:
總之,main
函數(shù)的主要功能如下:
- 顯示輸入提示“
input your Student ID immediately
”; - 接收4字符的輸入,存入
aRxBuffer
; - 顯示
aRxBuffer
+\n
這5個(gè)字符; - 調(diào)用
HelpFunc()
,以及一堆不知名函數(shù)。
點(diǎn)開(kāi)HelpFunc()
,分析如下:
很明顯,這個(gè)就是溢出函數(shù)了。主要功能是:
- 收2字符的輸入,存入
length
; - 回顯
length
+\n
這3個(gè)字符; - 收8個(gè)字符的輸入,存入
shellcode
; - 把
length
轉(zhuǎn)換成數(shù)值,存入len
; - 把
shellcode
從字母的ASCII碼值轉(zhuǎn)換成數(shù)值,比如e8
轉(zhuǎn)換成14和8; - 把
shellcode
的數(shù)值形式依次賦值給Buffer[len]
到Buffer[len+3]
。
因?yàn)?code>len就是第二個(gè)輸入,是自己輸入的,所以能夠賦任意值到任意地址上去。我們這里覆蓋掉函數(shù)的返回值就行。
3 逆向找到flag打印函數(shù)的截圖
點(diǎn)開(kāi)Text View
從上往下一翻就翻到了,flag打印函數(shù)就是Die
。
起始地址是080018E0
。
由于固件的最低位是1,所以實(shí)際上的地址是080018E1
。解釋如下圖。
4 溢出函數(shù)棧圖
在HelpFunc
中點(diǎn)開(kāi)sp
變量,就可以進(jìn)入到棧圖的頁(yè)面。
f5
反匯編,然后注釋里有sp
,點(diǎn)開(kāi)這個(gè)。
5 棧的溢出原理
畫(huà)了個(gè)簡(jiǎn)單的示意圖:
我們需要覆蓋返回地址,也就是寫(xiě)入BP+4
~BP+8
這一部分。從溢出函數(shù)棧圖中可以看到Buffer
的起始地址與BP
的距離是0x14
,而len
就是返回地址的最后一位,所以len=Buffer與BP的距離+4
,就是24
(注意是10進(jìn)制)。
老師給了多個(gè)不同的樣本,Buffer
大小不同,計(jì)算方式相同。
6 Qemu模擬運(yùn)行固件的獲取flag的截圖
6.1 首先,安裝QEMU
apt-get install
的版本太老,沒(méi)有實(shí)驗(yàn)需要的架構(gòu)。因此采用源碼安裝:
wget https://download.qemu.org/qemu-7.0.0.tar.xz
tar xvJf qemu-7.0.0.tar.xz
cd qemu-7.0.0
sudo apt-get install ninja-build -y # ninja
sudo apt install libglib2.0-dev -y # glib-2.56 gthread-2.0
sudo apt install libpixman-1-dev -y # pixman-1
./configure --prefix=~/qemu-7.0.0/build --target-list=arm-softmmu --enable-debug
make
make install
我在~
目錄下安裝QEMU,因此運(yùn)行configure
時(shí)目錄采用~/qemu-7.0.0/build
。
安裝完成后,在~/qemu-7.0.0/build
目錄下即可看到需要的可執(zhí)行文件。
./qemu-system-arm -M help
查看是否有mps2-an386
和netduinoplus2
。
6.2 獲取flag
運(yùn)行elf文件:
~/qemu-7.0.0/build/qemu-system-arm -M netduinoplus2 -cpu cortex-m4 -m 16M -nographic -d in_asm,nochain -kernel ~/exp6/task1_01.elf -D log.txt
注意實(shí)驗(yàn)一要選netduinoplus2,否則有段錯(cuò)誤。
然后,輸入三個(gè)內(nèi)容:
- 學(xué)號(hào)后4位;
- 偏移長(zhǎng)度(我的是24);
- shellcode,也就是跳轉(zhuǎn)的函數(shù)地址,由于字節(jié)序的原因,需要從后往前填(也就是
E1180008
)。
就得到flag:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-494613.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-494613.html
到了這里,關(guān)于【HUST】網(wǎng)絡(luò)攻防實(shí)踐|6_物聯(lián)網(wǎng)設(shè)備固件安全實(shí)驗(yàn)|實(shí)驗(yàn)一 裸機(jī)緩沖區(qū)溢出漏洞利用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!