###### 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