2017-04-25 9 views
0
void CopyData (char *szdata) { 
char cDest[32]; 
strcpy(CDest, szData); 
printf("%s\n", cDest); 
}`enter code here` 

int main(int argc, char **argv){ 
CopyData(argv[1]); 
} 

攻撃者はこの脆弱性を見つけて、このコードでどのように悪用する可能性がありますか?プログラムがセグメンテーションフォールトエラーを返す可能性のあるケースは何ですか?

+0

これまでの考え方は何でしたか? – Alden

答えて

0

まあ、strcpy()を使って固定文字配列にコピーします。 argv[1]の長さが32より大きい場合は、配列に割り当てられた領域を超えて書き込みを行うと、問題が発生する可能性があります。

また、argv[1]には、存在することを確認せずにアクセスします。 argvchar**であり、char文字列へのポインタの配列へのポインタを意味します。 argcには、これらの文字列の数が格納されます(char)。 argcが2以上であることを確認せずにargv[1]を読むと、ごみを読み取っている可能性があります。

これらの障害は、あなたのプログラムがクラッシュすることを意味したり未定/不規則な振る舞いを持っている場合:

  1. 未満の二つの引数は、プログラムをコマンドラインから起動されたときに与えられている
  2. 2番目の引数がより長さが大きいです32文字
関連する問題