--- title: INT-7-Криворученко_Савелий-Практика_7 tags: Module 2 description: Use `{%hackmd theme-dark %}` syntax to include this theme. --- <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> # Module_2_INT-7-Криворученко_Савелий ``` ``` <a name="headers"><h2>Особенности работы отдела безопасности сетевых (WEB) приложений</h2></a> ## Задачи: - [ ] Стенд по адресу: 10.90.192.19 Необходимо провести blackbox recon данного узла. Ответ оформить в виде advisory. * Какие tcp порты открыты. * Сколько сервисов(ПО) доступно на данных портах. Назвать не менее 5. * Собрать максимально возможную доступную информацию о каждом найденном сервисе. - [ ] Представлен код безопасных проверок на уязвимости: Check1 и Check2. Ответы можно предоставить как ответы на вопросы в развернутом виде, так и в виде advisory. * Разобрать код. Что он делает и зачем. В чем заключается специфика безопасной проверки. * Наличие каких уязвимостей проверяют Check1 и Check2 * Check1: что должно быть вместо строки ???????????????????????????, чтобы вынести вердикт о наличии уязвимости * Какими еще методами можно удаленно проверить на наличие уязвимостей. * Какие достоинства, риски и ограничения у предложенных методов. |Какие tcp порты открыты| |---| |Подключимся по openvpn| |---| |![](https://i.imgur.com/R2Sr2ph.png)| |Произведем интенсивное сканирование tcp портов| |![](https://i.imgur.com/Ypb5nQL.png)| |![](https://i.imgur.com/n4TlHX7.png) ``` В ходе сканирования были получены порты и сервисы: PORT | STATE | SERVICE |VERSION ------------------------------ 21/tcp open ftp vsftpd 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0) 2200/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0) 4433/tcp open http Apache httpd 2.4.41 514/tcp filtered shell ``` |21 port| |---| |ftp - программные приложения, которые позволяют пересылать файлы с одного устройства на другое. как локальный, так и анонимный доступ отключены. |21 port| |---| |ssh - протокол удаленного управления ОС (ubuntu). Использует ssh-hostkey: | 3072 6dc210f310b74344730d0b2967c55211 (RSA - криптоалгоритм с использованием открытого ключа) 256 81f0dad2b4028836c89499378547e42f (ECDSA -строится эллиптической кривой, использует открытый ключ) 256 dc5a721fb0e894971600b2d3b4ba4f27 (ED25519 - схема шнора) ![](https://i.imgur.com/vVjgjaL.png) |2200 port| |---| |ssh. Использует ssh-hostkey:| |3072 fc0a5afdd0eeccb61f1ec7ee00feb5d5 (RSA) ![](https://i.imgur.com/wnlCb7I.png) |4433 port| |---| |Apache2 - веб. сервер. Версия: 2.4.41. http/1.1. ![](https://i.imgur.com/PuRHvDX.png) ![](https://i.imgur.com/5JjaW1x.png) |Данный ip защищен брандмауером, использовал вызов -Pn| |---| |![](https://i.imgur.com/Ejuwlvz.png) | port 514 является отфильтрованым, отвечающим за shell - обеспечивает поддержку виртуального терминала| |![](https://i.imgur.com/efplxIV.png)| |Не понимаю, что за вид advisory. Если это консультирующая часть то я бы:| |---| |Спрятал за Firewall ПО: ftp ssh| |C Apache ввел запрет просмотра содержимого папок без индексного файл, спрятал версию веб-сервера, поставил firewall, запрет доступа к папкам с резервными копиями --- |2| |---| |Разберем код| |---| |Подписал действия кода| ``` void Check1(host, port) { string iid; string sess; HTTPReply reply = HTTPGETRequest(host, port, "/bitrix/tools/composite_data.php", "Connection: keep-alive"); if (reply.code == 200) { boost::regex pattern; pattern = boost::regex(".*PHPSESSID=([\\d\\w]+).*'bitrix_sessid':'([\\d\\w]+?)'.*", boost::regex_constants::icase); /* поиска подстроки в исходной строке по заданному регулярному выражению*/ boost::smatch what; if (boost::regex_match(reply.fullreply, what, pattern)) { sess = string(what[1].first, what[1].second); iid = string(what[2].first, what[2].second); } /* соответсвия входящей строки и некоторого регулярного выражения */ if (sess.empty() || iid.empty()) { printf("Prereq fail %s", reply.fullreply.c_str()); return; } /* Если id и session неизвестны или пусты, доступ запрещен */ HTTPReply replyPost = HTTPPOSTRequest(plugin, GetServerName(plugin), "/bitrix/tools/vote/uf.php?attachId[ENTITY_TYPE]=CFileUploader&attachId[ENTITY_ID][events][onFileIsStarted][]=CAllAgent&attachId[ENTITY_ID][events][onFileIsStarted][]=Update&attachId[MODULE_ID]=vote&action=vote", "--db7314ff402791dd7fd88f6570d622c1\r\nContent-Disposition: form-data; name=\"sessid\"\r\n\r\n" + iid, "Cookie: PHPSESSID=" + sess + "\r\nContent-Type: multipart/form-data; boundary=db7314ff402791dd7fd88f6570d622c1"); /* Всегда требуется создавать логирования пост запросов, чтобы избежать удаленного выполнения кода RCE */ if (replyPost.code == 200 && replyPost.fullreply.find("??????????????????????????? = /bitrix/tools/vote/uf.php") != string::npos) { printf("Vulnerable"); return; } else { printf("Not Vulnerable"); return; } } } /* ???????????? - другие варианты: /bitrix/tools/upload.php /bitrix/tools/mail_entry.php; /bitrix/modules/main/include/virtual_file_system.php; /bitrix/components/bitrix/sender.mail.editor/ajax.php; /bitrix/tools/vote/uf.php; /bitrix/tools/html_editor_action.php; /bitrix/admin/site_checker.php*/ ``` ``` DWORD Check2(ip, port) { UdpDtlsSocket udp_dtls_sock(ip, port); /* DTLS sock - оболочка для обеспечения шифрования для приложений */ if (!udp_dtls_sock.DtlsConnect()) return false; Buffer notVulnRecv("\xff\xff\x00\x80"); /* call */ Buffer sendValidProbe("\x05\x00\x06\x00\x00\x00\x41\x00\x01\x00"); /* макс размер буфера для udp сокета */ Buffer sendVulnProbe("\x05\x00\x06\x00\x00\x00\x41\x00\x01\x00\x00"); /* опасный буфера для udp сокета */ Buffer recvMsg; /* recvMsg - Получение сообщения из сокета */ printf("[*] Sending vulnerable package..."); if (!udp_dtls_sock.DtlsWrite(sendVulnProbe)) return false; /* При опасном буфере, не выполняет запрос */ bool rc = udp_dtls_sock.DtlsRead(recvMsg); /* перенос значения сокета в переменную */ if ((rc && recvMsg.Size() < 4) || (rc && recvMsg.SubBuf(recvMsg.Size() - 4, 4) != notVulnRecv)) { printf("Vulnerable"); return true; } /* обнаружение уязвимости */ if (rc && recvMsg.Size() >= 4 && recvMsg.SubBuf(recvMsg.Size() - 4, 4) == notVulnRecv) { return false; } /* Не выполняет запрос */ printf("[*] Sending package..."); if (!udp_dtls_sock.DtlsWrite(sendValidProbe)) return false; recvMsg.Clear(); rc = udp_dtls_sock.DtlsRead(recvMsg); if (rc) { printf("Vulnerable"); return true; } return false; } ``` |1. Разобрать код. Что он делает и зачем. В чем заключается специфика безопасной проверки.| |---| |Check1| |1. Производит поиск по заданному регулярному выражению, 2. После чего сверяет с регулярным выражением. А также происходит логирование post запроса для корректной идентификации сессии. Если же без логирования был получен доступ в папку настроек, то уязвимость присутствует.| |Check2| |Данная проверка сверяет кол-во буфера незашифрованного udp сокета с несколькими стадиями проверки| |2. Наличие каких уязвимостей проверяют Check1 и Check2| |---| |Check1| |RCE уязвимость, довольно свежая, получила свою популярность после начала СВО, Построенная на уязвимости bitrix. Внедряется путем post запросов| |Check2| |Удаленный пользователь может с помощью специально сформированного UDP пакета вызвать переполнение стека и выполнить произвольный код на целевой системе. |CVSS: 3.0/ AV: N / AC: L / PR: N / UI: N / S: U / C: H / I: H / A: H| |3. что должно быть вместо строки ???????????????????????????| |---| ``` /bitrix/tools/mail_entry.php; /bitrix/modules/main/include/virtual_file_system.php; /bitrix/components/bitrix/sender.mail.editor/ajax.php; /bitrix/tools/vote/uf.php; /bitrix/tools/html_editor_action.php; /bitrix/admin/site_checker.php*/ ``` |4. Какими еще методами можно удаленно проверить на наличие уязвимостей.| |---| |Использовать nuckle - собственных пользовательских проверок безопасности с помощью очень простого и удобного в использовании синтаксиса шаблонов. ИЛИ сервис SHODAN для просмотра уязвимостей и открытых портов| |5. Какие достоинства, риски и ограничения у предложенных методов.| |---| |Нукля. Достоинства: безопасная проверка, Риск: минимальный если же подход whitebox(не знаю можно ли так говорить).Инструмент имеет мало ложных срабатываний, а также огромное количество полностью настраиваемых шаблонов| |shodan. Достоинства: дает возможность быстро оценить число уязвимых версий ПО после публикации очередной уязвимости. Риск: -. Ограничения: Дает обширный доступ к возможным уязвимостям, без совершения проверки.