Tôi có một chương trình C nhỏ để khai thác. Và tôi cũng hiểu được logic đằng sau cuộc tấn công được thực hiện. Tuy nhiên, nhiều như tôi thử, nó chỉ là không làm việc cho tôi.Tấn công chuỗi định dạng
#include <stdio.h>
#include <stdlib.h>
#define SECRET1 0x44
#define SECRET2 0x55
int main(int argc, char *argv[]) {
char user_input[100];
int *secret;
int int_input;
int a, b, c, d; /* other variables, not used here.*/
/* The secret value is stored on the heap */
secret = (int *) malloc(2*sizeof(int));
/* getting the secret */
secret[0] = SECRET1; secret[1] = SECRET2;
printf("Please enter a decimal integer\n");
scanf("%d", &int_input); /* getting an input from user */
printf("Please enter a string\n");
scanf("%s", user_input); /* getting a string from user */
printf(user_input);
printf("\n");
/* Verify whether your attack is successful */
printf("The original secrets: 0x%x -- 0x%x\n", SECRET1, SECRET2);
printf("The new secrets: 0x%x -- 0x%x\n", secret[0], secret[1]);
return 0;
}
Tôi chỉ cần in địa chỉ và giá trị của bí mật [0] bằng chuỗi định dạng "printf (user_input);"
Tôi đã thử đưa một cái gì đó như "\ x6e \ xaf \ xff \ xff% x% x% x% x% s". nhưng nó không hoạt động. Bất kỳ đề xuất sẽ được đánh giá cao. Cảm ơn rất nhiều.
Nếu bạn muốn in địa chỉ của một cái gì đó, có lẽ bạn nên sử dụng toán tử addressof, '&'. –
+1 cho mã được định dạng tốt. –