私はセキュリティユニットを勉強していますが、私はフォーマットストリング攻撃を理解しようとしています。誰かが私にこれを説明しようとしてもらえますか?フォーマットストリングCでの攻撃
次のコードをから取得され:http://julianor.tripod.com/bc/tn-usfs.pdf:
/*
* fmtme.c
* Format a value into a fixed-size buffer
*/
#include <stdio.h>
int
main(int argc, char **argv)
{
char buf[100];
int x;
if(argc != 2)
exit(1);
x = 1;
snprintf(buf, sizeof buf, argv[1]);
buf[sizeof buf - 1] = 0;
printf("buffer (%d): %s\n", strlen(buf), buf);
printf("x is %d/%#x (@ %p)\n", x, x, &x);
return 0;
}
私はそれを理解するように、%n
形式指定子バックメモリに指定されたアドレスを読み取るために使用され、次いでスタックから値をポップprintf
場合、それは私たちのアドレスをお読みください。私はこれを引き離すように見えることはできません。文書で
は、以下の例が提供されます。
perl -e 'system "./fmtme", "\x58\x74\x04\x08%d%n"'
は\x58\x74\x04\x08%d%n
はどこから来たのか?
シェルコードです。 –