2017-04-02 61 views
1

如何在啓用NX的情況下在64位系統上利用printf格式字符串的保護功能?格式化字符串攻擊 - 跳轉到x64上的shell

在此代碼示例中,您可以做些什麼來獲得shell?

void f(char *buf) { 
    printf(buf); 
    exit(0); 
} 

int main() { 
    char buf[1024]; 
    scanf("%1024s", buf); 
    f(buf); 
    return 0; 
} 

我想是因爲NX的是,缺乏明顯的地方的跳躍(有沒有execve(/bin/bash...在代碼的任何地方),它必須是一個return-to-libc攻擊,但在哪裏跳?

我相信可以覆蓋GOT條目exit跳轉到任意位置,例如execvesystem,但是如何在寄存器中設置正確的參數?搜索二進制ROP鏈並跳到那裏?

或者還有其他方法可以讓shell脫離這個嗎?

+0

https://www.owasp.org/index.php/Format_string_attack –

回答

0

除了上面所說的你自己,現在大多數printf函數都不支持用於利用格式字符串的%n標記,所以攻擊技術已經失效了。

在今天的情景中,這可能是無法企及的。所以除非這是格式化字符串開發或捕獲標誌類型的事情,否則我建議您關注更多最新的開發技術。