Day10-GOT Hijacking
前言 前一天我們介紹了 GOT 和 Lazy Binding 的機制,今天要介紹的是如何利用這些機制進行攻擊,也就是 GOT Hijacking。 簡介 由於 Lazy Binding 的機制,GOT 是可寫的。因此,如果能夠覆蓋 GOT 的值,那麼下次呼叫該函數時,就可以控制即將執行的函數指針。這種情況通常出現在陣列未驗證輸入範圍、記憶體越界(即所謂的 out of bounds,oob)或是透過格式化字串(format string)將特定值寫入 GOT 的情況。 Lab 1#include<stdio.h> 2#include<stdlib.h> 3 4int backdoor(const char *arg){ 5 system("/bin/sh"); 6} 7 8long long value[4]; 9 10int main(){ 11 setvbuf(stdin, 0, 2, 0); 12 setvbuf(stdout, 0, 2, 0); 13 setvbuf(stderr, 0, 2, 0); 14 long long index; 15 for(int i = 0; i < 4; i++){ 16 puts("Enter a index to store a value: "); 17 scanf("%lld", &index); 18 puts("Enter a value: "); 19 scanf("%lld", &value[index]); 20 } 21 if(value[0] != 123){ 22 puts("CHECK FAILED\n"); 23 exit(0); 24 } 25 if(value[1] != 456){ 26 puts("CHECK FAILED\n"); 27 exit(0); 28 } 29 if(value[2] != 789){ 30 puts("CHECK FAILED\n"); 31 exit(0); 32 } 33 if(value[3] != 101112){ 34 puts("CHECK FAILED\n"); 35 exit(0); 36 } 37 puts("CHECK PASSED\n"); 38 return 0; 39} 使用以下指令進行編譯(注意,預設編譯會是 Partial RELRO): ...