2012-06-17 68 views
4

代碼:如何使用緩衝區溢出執行「printf字符串攻擊」?

void doit() 
{  
     system("/bin/sh"); 
     exit(0); 
}  

int main(int argc, char **argv) 
{  
    static int the_var; 
    char buf[512]; 

    the_var = 20; 

    strncpy (buf, argv[1], sizeof(buf) - 1); 

    printf (buf); 

    if (the_var != 20) 
    { 
      doit(); 
    } else { 
      printf ("\nthe_var @ 0x%08x = %d 0x%08x\n", &the_var, the_var, the_var); 
    } 
} 

方案正在與粘性位(主UID 0)所有我必須做的是破解它並運行/bin/sh作爲根運行。

我知道如何用fe破解程序。緩衝區溢出和strcpy(shellcode),但不要如何在這一個上使用'格式字符串攻擊'。你可以看到,有一個var the_var,如果它不等於50,那麼shell正在運行(也許嘗試改變它,一些骯髒的魔法?)。你可以看到,有一個var the_var,如果它不等於50,然後殼運行無論如何,有一個printf (buf)

回答

5

您控制buf。通過%x格式字符串來轉儲堆棧和%n以覆蓋堆棧中的對象the_var。從程序中,如果對象the_var被覆蓋,將調用doit函數並且將執行/bin/sh

+0

感謝提示,它很簡單。 – makowiecki