




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
緩沖區(qū)溢出原理【引例】把1升的水注入容量為0.5升的容量中……第一次大規(guī)模的緩沖區(qū)溢出攻擊是發(fā)生在1988年的Morris蠕蟲,它造成了6000多臺機器被癱瘓,利用的攻擊方法之一就是fingerd的緩沖區(qū)溢出。根據(jù)CNNVD2020年以來每周的漏洞報告文檔中,緩沖區(qū)溢出漏洞的所占總漏洞數(shù)量的百分比一直高居前五。Windows系統(tǒng)中與緩沖區(qū)溢出相關(guān)的病毒:紅色代碼、Slammer、沖擊波、震蕩波、永恒之藍。Sudo發(fā)布安全通告,修復(fù)了一個類Unix操作系統(tǒng)在命令參數(shù)中轉(zhuǎn)義反斜杠時存在基于堆的緩沖區(qū)溢出漏洞(CVE-2021-3156),普通用戶可以通過利用此漏洞,而無需進行身份驗證,成功獲取root權(quán)限,據(jù)報道這個漏洞已存在十年了,大部分的linux系統(tǒng)都存在這個sudo漏洞。2022年共披露安全漏洞23900+枚,其中低風(fēng)險漏洞占比11.13%,中高風(fēng)險漏洞占比較約53.82%,高危漏洞占比35.05%。什么是緩沖區(qū)、緩沖區(qū)溢出?從程序的角度,緩沖區(qū)就是應(yīng)用程序用來保存用戶輸入數(shù)據(jù)、臨時數(shù)據(jù)的內(nèi)存空間。如果用戶輸入的數(shù)據(jù)長度超出了程序為其分配的內(nèi)存空間,這些數(shù)據(jù)就會覆蓋程序為其它數(shù)據(jù)分配的內(nèi)存空間,形成所謂的緩沖區(qū)溢出。緩沖區(qū)溢出后果
緩沖區(qū)溢出是最常見的內(nèi)存錯誤之一,也是攻擊者入侵系統(tǒng)時所用到的最強大、最經(jīng)典的一類漏洞利用方式。利用緩沖區(qū)溢出攻擊,可以導(dǎo)致:進程運行失??;系統(tǒng)宕機、重新啟動等;它可被利用來執(zhí)行特定的程序;可以取得系統(tǒng)特權(quán),進而進行各種非法操作(提權(quán))。樣例程序1#include"stdafx.h"intmain(intargc,char*argv[]){ charbuffer[8];
printf("Pleaseinputyourname:"); gets(buffer); printf("Yournameis:%s!\n",buffer); return0;}發(fā)生溢出樣例程序2voidfunc(char*input){ charbuffer[16]; strcpy(buffer,input);}上面的strcpy()將直接把input中的內(nèi)容復(fù)制到buffer中。這樣只要input的長度大于16,就會造成buffer的溢出,使程序運行出錯C語言存在像strcpy這樣問題的標準函數(shù)還有strcat(),sprintf(),vsprintf(),gets(),scanf()以及在循環(huán)內(nèi)的getc(),fgetc(),getchar()等緩沖區(qū)溢出帶來的問題引起程序運行失敗嚴重時可導(dǎo)致系統(tǒng)崩潰可以人為利用緩沖區(qū)溢出來執(zhí)行代碼(shellcode),從而取得對系統(tǒng)的控制權(quán)最常見的手段是通過制造緩沖區(qū)溢出使程序運行一個用戶shell,再通過shell執(zhí)行其他命令。如果該shell程序?qū)儆趓oot(或者system)權(quán)限的話,攻擊者便可以對系統(tǒng)進行任意操作UESTC程序在內(nèi)存中的映像……文本(代碼)段數(shù)據(jù)段堆棧段內(nèi)存低地址內(nèi)存高地址內(nèi)存遞增方向初始化數(shù)據(jù)段非初始化數(shù)據(jù)段(BSS)堆(Heap)棧(stack)堆的增長方向棧的增長方向內(nèi)核數(shù)據(jù)代碼PEB&TEB系統(tǒng)DLL代碼段程序在內(nèi)存中的映像
代碼段數(shù)據(jù)只讀,可執(zhí)行。在代碼段一切數(shù)據(jù)不允許更改。在代碼段中的數(shù)據(jù)是在編譯時生成的2進制機器代碼,可供CPU執(zhí)行。
數(shù)據(jù)段在程序開始運行的時候被加載??勺x、寫。存儲已初始化和未初始化的數(shù)據(jù)。(全局變量、靜態(tài)變量)
堆棧段放置程序運行時動態(tài)的局部變量,即局部變量的空間被分配在堆棧里面??勺x、寫。
堆往高地址增長,而棧往低地址增長。棧棧是一塊連續(xù)的內(nèi)存空間先入后出生長方向與內(nèi)存的生長方向正好相反,從高地址向低地址生長每一個線程有自己的棧,提供一個暫時存放數(shù)據(jù)的區(qū)域使用POP/PUSH指令來對棧進行操作使用ESP寄存器指向棧頂,EBP指向棧幀底棧棧內(nèi)容函數(shù)的參數(shù)函數(shù)返回地址EBP(棧底指針)的值一些通用寄存器(EDI,ESI…)的值當前正在執(zhí)行的函數(shù)的局部變量CPU里的三個重要寄存器ESP:即棧頂指針,隨著數(shù)據(jù)入棧、出棧而發(fā)生變化EBP:即基地址指針,用于標識棧中一個相對穩(wěn)定的位置。通過EBP可以方便地引用函數(shù)參數(shù)以及局部變量EIP:即指令寄存器,在將某個函數(shù)的棧幀壓入棧中時,其中就包含當前的EIP值,即函數(shù)調(diào)用返回后下一個執(zhí)行語句的地址函數(shù)調(diào)用過程把參數(shù)壓入棧保存指令寄存器中(EIP)的內(nèi)容,作為返回地址放入堆棧當前的基址寄存器(EBP)把當前的棧指針(ESP)拷貝到基址寄存器(EBP)
,作為新的基地址為本地變量留出一定空間,把ESP減去適當?shù)臄?shù)值函數(shù)調(diào)用中棧的工作過程調(diào)用函數(shù)前,壓入棧:上級函數(shù)傳給A函數(shù)的參數(shù)返回地址(EIP)當前的EBP函數(shù)的局部變量調(diào)用函數(shù)后恢復(fù)EBP恢復(fù)EIP局部變量不作處理例子intAFunc(inti,intj){ intm=3;
intn=4; m=i; n=j; …………….. return8;}intmain(){ AFunc(5,6); return0;}語句執(zhí)行前的EBP6當前EBP當前ESPAFunc(5,6);push6push5call_AFuncaddesp+8語句執(zhí)行前的ESP函數(shù)調(diào)用中棧的工作過程5EIP_AFuncpushebpmovebp,espsubesp,0D8pushebxpushesipushediEBPd8hEDIESIEBX3(m=3)4(n=4)main(){語句執(zhí)行前的EBP6當前EBP當前ESPmain(){AFunc(5,6);call_AFuncaddesp+8語句執(zhí)行前的ESP函數(shù)調(diào)用中棧的工作過程5EIP_AFunc{……return8;popedipopesipopebxaddesp,0D8…………..popebpret}EBPd8hEDIESIEBX3(m=3)4(n=4)1.早期的C和C++程序語言沒有對數(shù)組讀寫數(shù)據(jù)進行邊界檢查的機制,導(dǎo)致了這一漏洞常常被攻擊者所利用。
例如:標準C程序庫中還存在許多不安全的字符串操作函數(shù),包括:strcpy(),sprintf(),gets()等等,從而帶來了很多脆弱點,這些脆弱點也便成了緩沖區(qū)溢出漏洞。緩沖區(qū)溢出產(chǎn)生的原因1.C和C++程序語言沒有對數(shù)組讀寫數(shù)據(jù)進行邊界檢查的機制,導(dǎo)致了這一漏洞常常被攻擊者所利用緩沖區(qū)溢出的步驟緩沖區(qū)溢出利用的思路Fun(char*input){ charszBuf[8]={0}; strcpy(szBuf,input); …}input的內(nèi)容:用Shellcode函數(shù)的地址對EIP的填充6szBuf5EIPEBPEDIESIEBX3(m=3)4(n=4)ShellcodeShellcodeShellcode實際是一段代碼,是發(fā)生緩沖區(qū)溢出后將要執(zhí)行的代碼Shellcode的作用就是實現(xiàn)漏洞利用者想要達到的目的,一般是用來安裝木馬或者提升權(quán)限的Shellcode的功能添加administrators或者root組用戶開啟遠程shell下載程序(Trojan或者Rootkit)執(zhí)行強制程序開發(fā)人員書寫正確的、安全的代碼??梢越柚踩拈_發(fā)工具幫助開發(fā)人員發(fā)現(xiàn)程序中的安全漏洞。通過對數(shù)組的讀
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)用工勞動合同
- 2025年婁底考貨運從業(yè)資格證
- 2025年隴南貨運從業(yè)資格仿真考題
- 2025年揭陽貨運從業(yè)資格證考試內(nèi)容
- 2023年全國乙卷高考真題生物試卷解析
- 高壓水流清洗機產(chǎn)業(yè)分析報告
- 煙草、鹽加工機械市場分析及競爭策略分析報告
- 浸漬、涂布或包覆處理紡織物競爭策略分析報告
- 《天然藥物化學(xué)成分提取與分離》課程標準
- 上海市裝修設(shè)計合同范本
- 交房清水樣板間施工方案
- 【施工組織設(shè)計】內(nèi)容完整性和編制水平
- 跨部門工作聯(lián)絡(luò)單
- 配電箱配管施工方案
- DataOps實踐指南(1.0)-中文版-2023.07
- Vue.js前端開發(fā)實戰(zhàn)(第2版)全套完整教學(xué)課件
- 2023風(fēng)力發(fā)電機組延壽評估技術(shù)規(guī)范
- 鞋業(yè)-品質(zhì)培訓(xùn)
- 小學(xué)思政課《愛國主義教育》
- 瓜豆原理【模型專題】(含答案解析)
- 單價、數(shù)量、總價-教學(xué)課件【A3演示文稿設(shè)計與制作】
評論
0/150
提交評論