KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm working on a format-string vulnerability lab, where we're given the following code: #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("The variable secret's address is 0x%.8x (on stack)\n", &secret); printf("The variable secret's value is 0x%.8x (on heap)\n", secret); printf("secret[0]'s address is 0x%.8x (on heap)\n", &secret[0]); printf("secret[1]'s address is 0x%.8x (on heap)\n", &secret[1]); 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 */ /* vulnerable place */ 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; } We're not supposed to modify the code at all. Using just the input, we have 4 goals: crash the program, print the value at secret[1], modify the value at secret[1], and modify the value at secret[1] to a pre-determined value. Sample output I get is: The variable secret's address is 0xbfffe7cc (on stack) The variable secret's value is -x0804a008 (on heap) secret[0]'s address is 0x0804a008 (on heap) secret[1]'s address is 0x0804a00c (on heap) Please enter a decimal integer 65535 Please enter a string %08x.%08x.%08x.%08x.%08x.%08x.%08x%08x. bfffe7d0.00000000.00000000.00000000.00000000.0000ffff.0804a008.78383025 So, by entering 8 "%08x"s, I print the address of secret + 4, then I print the addresses
Tags (comma-separated)
Save Edits
Cancel