簡體   English   中英

堆溢出攻擊,此代碼可能會出問題

[英]Heap Overflow attack, what can go wrong with this code

char *test(char *arg1, char* arg2){
size_t length=strlen(arg1);
char *c= malloc(length+4);
for(int i=length;i>0;i--)
   *(c+i+4)=*(arg1)^(arg2[i%8]);
*(size_t *) (c) =length;
return c;
}

此代碼是否遭受堆溢出攻擊?

那里很多事情都會出錯。 最重要的是,表達式*(c+i+4)=*(arg1)^(arg2[i%8])將在循環的第一次迭代中使分配的緩沖區溢出。

想象length==1 因此,您將為c分配5個字節。 循環中的第一次, i等於1。因此,表達式c+i+4解析為c+5 ,這比您分配的內存超出一個字節。

其他可能出錯的地方:

  • arg1是無效的指針。 您的程序崩潰。
  • arg1引用的字符串確實很長,您不能為其分配足夠的內存。 malloc失敗,程序崩潰。
  • arg2尋址的內存小於8個字節,因此您的代碼讀取的內容超出了分配的內存。 這可能不會崩潰,但是結果將是...未定義。
  • 您假定size_t為4個字節。 您的malloc應該是malloc(length+sizeof(size_t))

暫無
暫無

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

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