Day6-Basic buffer overflow
Lab 網址 前言 經歷了前面的許多基礎知識與工具介紹,終於來到了第一個漏洞與第一個 lab。而這個漏洞可以說是最簡單也最基本的,就是 Buffer Overflow。 介紹 首先,先來看一個簡單例子。假如一個程式宣告了一些變數及字串,記憶體中的狀態可能會是下圖的樣子: 如果對 buf 字串輸入正常大小的資料,例如這邊宣告的空間是 0x10(16 bytes),輸入 0x10 個 ‘A’,記憶體狀態可能會像下圖這樣: 然而,當使用一些不安全的函式來輸入數據時,例如 gets 函式,可能會產生問題。因為 gets 不會檢查輸入的長度,因此可能會覆蓋到 buf 後面的變數,甚至是 rbp 或 return address。以下例子顯示了覆蓋到後面變數 num3 和 num4 的情況: 如果對填入的值進行精確的編排,則可能成為如下所示的情況: 這就是最基本的 Buffer Overflow 例子。 Lab 查看以下程式原始碼 1#include<stdio.h> 2int main(){ 3 setvbuf(stdout, 0, 2, 0); 4 setvbuf(stdin, 0, 2, 0); 5 setvbuf(stderr, 0, 2, 0); 6 int a = 10; 7 printf("Please input your name: "); 8 char b[10]; 9 gets(b); 10 if(a == 0xdeadbeef){ 11 system("/bin/sh"); 12 } 13 printf("Hello, %s\n", b); 14 return 0; 15} 使用以下指令進行編譯 ...