iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Security

電腦漏洞與入侵系列 第 3

Day 3 - 緩衝區溢位 (Buffer Overflow)

  • 分享至 

  • xImage
  •  

前言

昨天舉了一些常見的攻擊手法,今天我們就來聊聊比較簡單且古早的攻擊手法 ─ 緩衝區溢位。而要了解緩衝區溢位之前,我們得先稍微聊一下什麼是緩衝區/images/emoticon/emoticon13.gif


什麼是緩衝區?

緩衝區(Buffer) ,是電腦暫時存放輸入或輸出資料的記憶區區塊,資料在輸出到其他裝置都會暫時留在緩衝區。當接收資料和處理資料之間速率存在差異時,通常就會使用緩衝區如網路影音串流。

那什麼是緩衝區溢位?

https://ithelp.ithome.com.tw/upload/images/20230918/20163316cZltcmZCwZ.jpg

緩衝區溢位就是讓資料寫入超過緩衝區容量造成溢出,這會導致相鄰的記憶體被覆寫。C與C++語言特別容易遭到緩衝區溢位的攻擊,原因在於它沒有內建防範覆寫記憶體的一些措施。相較於這兩個語言,像是Java, Java Script, C#等就有內建以防範溢位攻擊。

接著我們來看一下緩衝區溢位是怎麼做的

如下圖緩衝區的容量只有8 bytes,我們超過原本的範圍:

https://ithelp.ithome.com.tw/upload/images/20230918/20163316YUwTi2Hkv6.png


範例

這邊是一個C語言的例子。情境是一個登入系統,你輸入正確的密碼passwordqwer的話會得到Correct Password及Privileges to user 的文字,反之則是Wrong Password。

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

int main(void)
{
    char buff[15];
    int pass = 0;

    printf("\n Enter the password : \n");
    gets(buff);

    if(strcmp(buff, "passwordqwer"))
    {
        printf ("\n Wrong Password \n");
    }
    else
    {
        printf ("\n Correct Password \n");
        pass = 1;
    }

    if(pass)
    {
        printf ("\n Privileges to user \n");
    }

    return 0;
}

正常的情況下輸入密碼會得到這樣的結果:

$ ./bfrovrflw 

 Enter the password :
thegeekstuff

 Correct Password 

 Privileges to user

再來是另一種情況:

$ ./bfrovrflw 

 Enter the password :
qwertyuiopasdfghjklz

 Wrong Password 

 Privileges to user

透過超出我們緩衝區能容納的上限來讓輸入的資料覆寫過記憶體裡"pass"設置的值不再相同。因為pass的值不再是0,也讓攻擊者得到了權限而不是原本會顯示的Wrong Password。


參考資料

緩衝區
什麼是緩衝區溢位?
Buffer Overflow Attack
Buffer Overflow Attack Explained with a C Program Example


上一篇
Day 2 - 常見攻擊手段及影響
下一篇
Day 4 - 注入式攻擊 (Injection Attack)
系列文
電腦漏洞與入侵30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言