脆弱なコードの一部を「壊す」という課題がありました。スニペット:
int main(int argc, char **argv)
{
/*...*/
while(i < argc-1)
{
switch(argv[i][0]-48)
{
case 1:
SmashHeap(argc,argv);
break;
/*...*/
case 8:
PrintfVulnerability(argv[++i]);
break;
default:
printf("%s is not recognized by this program",argv[i++]);
/*...*/
}
i++;
}
return (1);
}
void PrintfVulnerability(char *F)
{
printf(F);
}
結局、私はそれがとても驚くほど簡単で、成績が悪いのではないかと心配していることがわかりました...私の解決策:
- 実行可能ファイルをホームディレクトリにコピーします... freecell.exeを使用しました
$ ./VulnerableCode 8 `freecell.exe`
ふふっ!! フリーセルをやっています。なぜこれが機能したのですか?