本篇原創作者:Rj45
什么是緩沖區溢出?這里我借某臺棧溢出靶機里面的第一道題目來解釋緩沖區溢出的原理。
可以看到靶機里面有兩份權限不同的文件,而我目前拿到的shell是 level0
#include <stdio.h>#include <string.h>#include <unistd.h>int main(int argc, char **argv) { uid_t uid = geteuid(); setresuid(uid, uid, uid); long key = 0x12345678; char buf[32]; strcpy(buf, argv[1]); printf("Buf is: %sn", buf); printf("Key is: 0x%08xn", key); if(key == 0x42424242) { execve("/bin/sh", 0, 0); } else { printf("%sn", "Sorry try again..."); } return 0;}
1、審計:可以看到,程序一開始聲明并初始化了key=0x12345678, 并聲明了32字節的buf, 然后通過strcpy函數將第一個參數拷貝到buf中, 接著判斷key是否為0x42424242,如是則獲得shell。(levelOne的權限為level1) key已經初始化為0x12345678,如何才能將其修改為0x42424242?
2、溢出:如何將key修改為0x42424242?--通過緩沖區溢出覆蓋key值為0x42424242。什么是緩沖區溢出?在樣例程序中聲明了一段32字節的buf,此為緩沖區, 當通過strcpy函數將輸入的函數第一個參數拷貝到緩沖區的時候,由于strcpy函數為危險函數,其不會對操作對象進行任何檢查,故在輸入數據不超過32個字節時不會發生任何情況, 但當輸入的數據超過32個字節的時候,就會發生溢出,也即所謂的緩沖區溢出。
3、覆蓋:根據前面我們學習到的內容,一個程序在載入內存后,其棧區會存在函數的各種變量、參數、棧針、返回地址等,并且各種數據是相鄰分布的。這就意味著,一個存在緩沖區溢出的程序,在精準控制溢出范圍的情況下,可以精準覆蓋內存棧區中某些特殊位置的數據。這就為利用構造了條件,也即在本樣例程序中的覆蓋key值為0x42424242。
4、危險函數:顯而易見,在緩沖區溢出的過程中,最關鍵的就是strcpy函數。那么還有哪些類似strcpy的危險函數呢?
可以看到這些危險函數集中為IO函數。
1、命令
objdump -d levelOne -M intel
2、反匯編 下面為樣例程序的反匯編情況:
000011e9 <main>: 11e9: 8d 4c 24 04 lea ecx,[esp+0x4] 11ed: 83 e4 f0 and esp,0xfffffff0 11f0: ff 71 fc push DWORD PTR [ecx-0x4] 11f3: 55 push ebp 11f4: 89 e5 mov ebp,esp 11f6: 56 push esi 11f7: 53 push ebx 11f8: 51 push ecx 11f9: 83 ec 3c sub esp,0x3c 11fc: e8 ef fe ff ff call 10f0 <__x86.get_pc_thunk.bx> 1201: 81 c3 ff 2d 00 00 add ebx,0x2dff 1207: 89 ce mov esi,ecx 1209: e8 42 fe ff ff call 1050 <geteuid@plt> 120e: 89 45 e4 mov DWORD PTR [ebp-0x1c],eax 1211: 83 ec 04 sub esp,0x4 1214: ff 75 e4 push DWORD PTR [ebp-0x1c] 1217: ff 75 e4 push DWORD PTR [ebp-0x1c] 121a: ff 75 e4 push DWORD PTR [ebp-0x1c] 121d: e8 0e fe ff ff call 1030 <setresuid@plt> 1222: 83 c4 10 add esp,0x10 //調整棧幀 1225: c7 45 e0 78 56 34 12 mov DWORD PTR [ebp-0x20],0x12345678 //聲明并初始化了一個變量,地址為ebp-0x20,數據為0x12345678 122c: 8b 46 04 mov eax,DWORD PTR [esi+0x4] 122f: 83 c0 04 add eax,0x4 1232: 8b 00 mov eax,DWORD PTR [eax] 1234: 83 ec 08 sub esp,0x8 1237: 50 push eax 1238: 8d 45 c0 lea eax,[ebp-0x40] 123b: 50 push eax 123c: e8 1f fe ff ff call 1060 <strcpy@plt> //將輸入點數據拷貝到ebp-0x40 1241: 83 c4 10 add esp,0x10 //調整棧幀 1244: 83 ec 08 sub esp,0x8 1247: 8d 45 c0 lea eax,[ebp-0x40] 124a: 50 push eax 124b: 8d 83 08 e0 ff ff lea eax,[ebx-0x1ff8] 1251: 50 push eax 1252: e8 e9 fd ff ff call 1040 <printf@plt> 1257: 83 c4 10 add esp,0x10 125a: 83 ec 08 sub esp,0x8 125d: ff 75 e0 push DWORD PTR [ebp-0x20] 1260: 8d 83 14 e0 ff ff lea eax,[ebx-0x1fec] 1266: 50 push eax 1267: e8 d4 fd ff ff call 1040 <printf@plt> 126c: 83 c4 10 add esp,0x10 126f: 81 7d e0 42 42 42 42 cmp DWORD PTR [ebp-0x20],0x42424242 //判斷ebp-0x20處的變量是否為0x42424242 1276: 75 18 jne 1290 <main+0xa7> //如果相同則跳轉到后門函數 1278: 83 ec 04 sub esp,0x4 127b: 6a 00 push 0x0 127d: 6a 00 push 0x0 127f: 8d 83 24 e0 ff ff lea eax,[ebx-0x1fdc] //將’/bin/sh’壓入棧中,作為函數參數 1285: 50 push eax //將0壓入棧中作為函數參數 1286: e8 05 fe ff ff call 1090 <execve@plt> //后門 128b: 83 c4 10 add esp,0x10 128e: eb 12 jmp 12a2 <main+0xb9> 1290: 83 ec 0c sub esp,0xc 1293: 8d 83 2c e0 ff ff lea eax,[ebx-0x1fd4] 1299: 50 push eax 129a: e8 d1 fd ff ff call 1070 <puts@plt> 129f: 83 c4 10 add esp,0x10 12a2: b8 00 00 00 00 mov eax,0x0 12a7: 8d 65 f4 lea esp,[ebp-0xc] 12aa: 59 pop ecx 12ab: 5b pop ebx 12ac: 5e pop esi 12ad: 5d pop ebp 12ae: 8d 61 fc lea esp,[ecx-0x4] 12b1: c3 ret 12b2: 66 90 xchg ax,ax 12b4: 66 90 xchg ax,ax 12b6: 66 90 xchg ax,ax 12b8: 66 90 xchg ax,ax 12ba: 66 90 xchg ax,ax 12bc: 66 90 xchg ax,ax 12be: 66 90 xchg ax,ax
棧中的情況如下圖:
如此當填充滿32個字節的數據后,在填充4個B,即達成利用條件,進入后門函數。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
USARMY是什么意思?美國軍隊不同于其他英語國家。通常,在英語中,陸軍指的是陸軍,如中國人民解放軍,但在美國,美國陸軍應該翻譯成美國軍隊或美國軍隊,陸軍是美國陸軍的一個專門術語,而美國空軍和海軍的英語則更為正常,即usaf-U.s.空軍和usn-U.s.navy某個軍隊沒有具體規定,不需要大寫,小寫的意思是一般意義上的軍隊。jointhearmy.這個詞組中army是否需要大寫?意思是美國軍隊。...
IPHONE4S如何從電腦里下載軟件?下載并安裝itunes購買應用程序。打開itunes,點按左側的itunes store,選擇您喜愛的應用程序,然后下載它。將iphone連接到電腦,點擊左邊的設備3354應用或音樂3354,勾選下面的應用或音樂3354,點擊右下角的同步或應用。注意:可能會提示,(1)如果不想刪除iphone的原應用,請選擇轉移;否則,請選擇不傳輸。(2)還有一個提示可能出...
移動4g套餐哪個最劃算?8元天悅卡套餐最最合算8元天悅卡,月租8元,乾坤二卦30分鐘通話費,1元500M流量,自動續費,不用什么不花錢多。但,這個套餐好像老用戶肯定不能申請辦理。在網上有各種攻略這個可以做個參考,很多網友申請辦理成功了。我感覺這個套餐最合算,而且更適合保號,等待“攜號轉網”的用戶三大運營商4g套餐對比,哪一個更劃算?以貴州聯通為例,我公司有所推出4G全國組合套餐,里面乾坤二卦有流量...