簡體   English   中英

緩沖區溢出利用實驗,意外結果

[英]buffer overflow exploit experiment, unexpected result

我正在分析UB的特殊情況,目的是通過利用緩沖區溢出來了解安全性泄漏。

我很難理解有意挑釁UB的實驗結果。 我認為緩沖區的溢出(位於另一個緩沖區和我的檢測器變量之間)會覆蓋另一個緩沖區和檢測器。

簡而言之:變量'value'的值49后面可能是什么原因

strcpy(buffer_two, argv[1]);

在此代碼中:

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

int main(int argc, char *argv[]){
    int value = 5;
    char buffer_one[8];
    char buffer_two[8];
    strcpy(buffer_one, "one");
    strcpy(buffer_two, "two");

    printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);

    printf("\n[STRCPY] copying %d bytes into buffer_two\n\n", strlen(argv[1]));
    strcpy(buffer_two, argv[1]); /* Copy first argument into buffer_two. */

    printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
    printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}

結果:

./overflow_example AAAAAAAAAAAAAAAA1
[BEFORE] buffer_two is at 0xbff2db0c and contains  'two' 
[BEFORE] buffer_one is at 0xbff2db14 and contains  'one' 
[BEFORE] value is at 0xbff2db1c and is 5 (0x00000005)

[STRCPY copying 17 bytes into buffer_two

[AFTER] buffer_two is at 0xbff2db0c and contains  'AAAAAAAAAAAAAAAA1' 
[AFTER] buffer_one is at 0xbff2db14 and contains  'AAAAAAAA1' 
[AFTER] value is at 0xbff2db1c and is 49 (0x00000031)

內存堆棧上升。 這意味着我們將覆蓋buffer_one的值。 但我不知道為什么“價值”的價值受到影響

在您的利用實驗中,您似乎忘記了緩沖區和變量的順序。
您的輸出(以及代碼中的變量聲明)清楚地顯示:

  • buffer_two,大小8,地址0x ... 0c
  • buffer_one,大小8,地址0x ... 14
  • 值,大小4,地址0x ... 1c

(值的大小是猜測值,但不相關,假設它的最低字節地址具有LSB。)

當buffer_two溢出9個字節時,它將完全填充buffer_one,值的第一個字節為'1'== 49,值的第二個字節為0。

重復一遍,嚴格來說,所有這些都是UB,因此大膽猜測。 但這就是漏洞利用的正常環境,您可能已經知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM