Задание 1
Важно: выполняйте данную задачу на ОС Linux (Ubuntu или Kali)
Легенда
У вас есть следующий код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
/* выделяем буфер из 255 символов + \0 для хранения команды */
char command[256] = {'p', 'i', 'n', 'g', ' ', '\0'};
/* буфер для хранения хоста, который нужно пропинговать */
char host[16];
printf("please enter host for ping\n");
/* получаем от пользователя имя хоста - нужно ввести в консоли, например, ya.ru и нажать Enter */
gets(host);
/* отладочный вывод - печатаем команду */
printf("command: %s\n", command);
/* отладочный вывод - печатаем хост */
printf("host: %s\n", host);
/* добавляем к команде хост, при этом \0 в команде заменяется на первый символ из host */
strcat(command, host);
/* отладочный вывод - печатаем полную команду */
printf("full command: %s\n", command);
/* выполняем команду */
system(command);
return 0;
}
Важно: строки, которые начинаются с /* и заканчиваются */ - это комментарии (пояснения к коду программы), вы можете их не печатать.
Задача
По аналогии с лекцией установите необходимые зависимости (apt update && apt install gcc) и скомпилируйте данную программу (cc main.c -o main) - не обращайте внимание на предупреждения, если они будут.
Далее: 1. Запустите её (./main), вы увидите приглашение вида:
2. Введите адрес хоста, который необходимо пропинговать и убедитесь, что пинг работает:
3. Завершите работу приложения с помощью сочетания клавиш Ctrl + C
Результаты
В качестве результата пришлите ответы на следующие вопросы:
Какое предупреждение (Warning) было выведено при компиляции? По желанию: проведите доп.исследование на предмет сути предупреждения (с чем оно связано, какие риски от использования одной из функций в программе и что это за функция).
Ввод, приводящий к падению приложения
Ввод, приводящий к выполнению другой команды (не ping)
Задание 2
Важно: выполняйте данную задачу на ОС Linux (Ubuntu или Kali)
Легенда
Программисты прислали вам якобы "исправленный" вариант программы ping:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
/* выделяем буфер из 24 символов для хранения команды */
char command[24] = "ping ";
/* буфер для хранения хоста, который нужно пропинговать */
char host[16];
printf("please enter host for ping\n");
/* получаем от пользователя имя хоста */
/* нужно ввести в консоли, например, ya.ru и нажать Enter */
fgets(host, sizeof(host), stdin);
/* отладочный вывод - печатаем команду */
printf("command: %s\n", command);
/* отладочный вывод - печатаем хост */
printf("host: %s\n", host);
/* добавляем к команде хост, при этом \0 в команде заменяется на первый символ из host */
strcat(command, host);
/* отладочный вывод - печатаем полную команду */
printf("full command: %s\n", command);
/* выполняем команду */
system(command);
return 0;
}
Задача
Проведите повторный анализ и посмотрите:
Можно ли реализовать переполнение?
Можно ли выполнить произвольную команду (если да, то как)?
Если ответ на п.2 - да, то можно ли получить shell (т.е. запустить sh и bash и продолжить работу с интерпретатором команд в интерактивном режиме)?
Екатерина
Мади
Работа выполнена досрочно. С подробным описанием решения. Огромное спасибо!!
Лариса
ТУСУР
Все супер, задания выполнены в срок, оценены преподавателем на максимальный балл, всем рек...
Полина
МГИМО
Ксения - отличный автор. Обращаюсь к ней уже 2ой раз, вся работа выполнена прекрасно. Советую
Серафим
ВУЗ
Работа выполнена очень качественно! Очень грамотный специалист, рекомендую! Обращаюсь не в...