2012-03-30 61 views
0

這個問題與前一個問題Previous QuestionLinux的緩衝區溢出返回到libc中

前一個問題的後續行動,通過改變可執行文件的權限與execstack解決。我的新問題圍繞另一個實現繞過堆棧執行保護。這使用return-to-libc並且涉及針對system()的地址執行/bin/sh

我目前使用下面的代碼:

#include <stdio.h> 

void func(char *buff){ 
    char buffer[5]; 
    strcpy(buffer, buff); 
    printf("%s\n", buffer); 
} 

int main(int argc, char *argv[]){ 
    func(argv[1]); 
    printf("I'm done!\n"); 
    return 0; 
} 

我的問題occures當我需要溢出的func()返回地址到地址0x00167100。當我執行緩衝區溢出時,我使用的參數是$(echo -e "\x00\x71\x16\x00")。但是,在\x71從我的論點中刪除之前,問題是最不重要的\x00。事實上,我可以使用\x00\x00\x00\x00\x00...\x71\x16\x00,而傳入的參數仍然是\x71\x16\x00。最終的結果是一些像0x08001671之前的覆蓋地址,當它真的應該是0x00167100

+0

這是什麼問題? – 2012-03-31 00:01:54

+0

@OliCharlesworth爲什麼我失去了這些特定的字節。 – Blackninja543 2012-03-31 00:07:49

回答

3

strcpy()停止複製第一個空字節。這意味着您必須使用至少最後三個字節不爲空的地址。

也許你可以跳過目標函數的第一條指令。

+0

這是問題,但我遇到了一個新問題。還有尾部'\ x00'字節,並且在該字節後面有額外的代碼。有關解決'stycpy()'空字節問題的任何建議。 – Blackninja543 2012-03-31 00:41:59

+0

@ Blackninja543:解決這個問題的方法是確保您的有效負載沒有除最後一個字節之外的任何空值。 – caf 2012-03-31 09:19:49