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