보안 단위를 연구 중이며 형식 문자열 공격을 이해하려고합니다. 누군가 제게 이것을 설명해 주시겠습니까? http://julianor.tripod.com/bc/tn-usfs.pdf :형식 문자열 공격 C
다음 코드에서 가져 내가 알고있는 것처럼, %n
형식 지정이 printf
아빠가 스택에서 값 때 다음, 다시 메모리로 지정된 주소를 읽는 데 사용되는
/*
* 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;
}
, 그것을 우리 주소를 읽어야합니다. 나는 이것을 벗겨 낼 수 없다. 문서에서
은, 다음의 예는 제공됩니다perl -e 'system "./fmtme", "\x58\x74\x04\x08%d%n"'
\x58\x74\x04\x08%d%n
는 어디에서 왔는가?
쉘 코드입니다. –