Текст задания
Задание 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 и продолжить работу с интерпретатором команд в интерактивном режиме)?
Александр
Нижегородский государственный технический университет им. Р.Е. Алексеева
Заказ выполнен очень быстро и качественно! Советую данного исполнителя!
Екатерина
ПГГПУ
Не первый раз обращаюсь к Регине за помощью. Всегда работы выполняет качественно. В этот р...
Анастасия
Российский государственный геологоразведочный университет имени Серго Орджоникидзе
Очень положительный и отзывчивый исполнитель! Взялась за работу сразу же, по хорошей цене....
Юлия
Российский государственный профессиональный педагогический университет
Все сделано оооочень быстро и качественно! Спасибо Вам, Нина Викторовна!