Автор оригинала: George Konstantopoulos.
Прошлым летом я начал учиться о информационной безопасности и взломе. За в прошлом году я играл в различных варках, захватите симуляцию флага и проникновения тестирования, постоянно совершенствуя свои навыки взлома и изучения новых вещей о «Как сделать компьютеры отклоняться от ожидаемого поведения».
Короче говоря, мой опыт всегда был ограничен смоделированными средами, и с тех пор, как я считаю себя хакером White-Hat (ака один из хороших парней) Я никогда не принудил нос в другие предприятия других народов — довольно буквально.
До настоящего времени. Это будет подробная история о том, как я взломал на сервер, который принимал 40 (это точное число) веб-сайтов и мои выводы.
Примечание: Некоторые предпозитные знания CS необходимы для последующих технических частей статьи.
Друг отправился мне, что XSS уязвимость был найден на его сайте и что он хочет, чтобы я сделал дальнейший взгляд. Это важный этап, так как я склонен просить его формально выразить, что у меня есть разрешение на выполнение полного теста на его веб-приложении и на сервере, который он. Ответ был положительный
В остальной части поста я буду ссылаться на сайт моего друга, как http://example.com.
Первый шаг всегда перечисляет и находит столько информации, сколько вы можете о своем враге — при попытке тревожить их как можно меньше.
На этом этапе мы запускаем наш таймер и начните сканирование.
$ nmap --top-ports 1000 -T4 -sC http://example.com Nmap scan report for example.com {redacted} Host is up (0.077s latency). rDNS record for {redacted}: {redacted} Not shown: 972 filtered ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh | ssh-hostkey: | {redacted} 80/tcp open http | http-methods: |_ Potentially risky methods: TRACE |_http-title: Victim Site 139/tcp open netbios-ssn 443/tcp open https | http-methods: |_ Potentially risky methods: TRACE |_http-title: Site doesn't have a title (text/html; charset=UTF-8). |_{redacted} 445/tcp open microsoft-ds 5901/tcp open vnc-1 | vnc-info: | Protocol version: 3.8 | Security types: |_ VNC Authentication (2) 8080/tcp open http-proxy |_http-title: 400 Bad Request 8081/tcp open blackice-icecap
Сканирование завершено примерно за 2 минуты.
Это много открытых портов! Наблюдая за тем, что FTP (Порт 21) и SMB (порты 139/445) открыты, мы можем догадаться, что сервер используется для хостинга файлов, а для совместного использования файлов, наряду с этим, являющимся веб-сервером (порты 80/443 и прокси в 8080/8081).
От искусства войны. Перечисление является ключом.
Выполнение сканирования порта UDP и сканирование более верхних 1000 портов будет рассмотрена, если информация вышесказанного сканирования была недостаточной. Единственный порт, который нам разрешено взаимодействовать с (без учетных данных), является портом 80/443.
Не тратя вступление в нее время, я запускаю Gobuster
Чтобы перечислить для любых интересных файлов на веб-сервере, пока я буду копать для информации вручную.
$ gobuster -u http://example.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 /admin /login
Получается путь/admin Path был «инструментом администратора», который позволил аутентифицированным пользователям модифицировать вещи на веб-сервере. Требуется учетные данные, и поскольку у нас нет ни имени пользователя, ни пароля, на которой мы двигаемся. (спойлер: Gobuster не нашел ничего ценного)
Пока что мы находимся около 3 минут. Ничего полезного, все же.
Просмотр на веб-сайте мы видим, что он просит нас войти. Нет проблем, мы создаем учетную запись с помощью Манекен e-mail щелкните по электронной почте подтверждения и войдите в систему через несколько секунд.
Веб-сайт приветствует нас и предложит нам перейти к нашему профилю и обновлять нашу фотографию профиля. Как добры.
Увидев, что сайт выглядит построен на заказ, я склонен к тестированию для Неограниченный файл Загрузить Уязвимость. На моем терминале я выполняю:
echo "" > exploit.php
Я пытаюсь загрузить «изображение», а бинго! Загрузчик позволяет Exploit.php файл, чтобы загрузить. Конечно, он не имеет миниатюр, но это означает, что мой файл где-то загрузил.
Получить местоположение эксплуатации
Здесь мы ожидаем, что загрузчик делает некоторую обработку в загруженном файле, проверяет расширение его файла и заменяет с принятым расширением файла, такими как .jpeg, .jpg, чтобы избежать удаленного выполнения кода атакующим, загружающим вредоносный код, как и ваш действительно.
Люди заботятся о безопасности в конце концов.
Правильно? Верно? …ПРАВИЛЬНО?
`Copy image address` results in the following url being copied to our clipboard: http://www.example.com/admin/ftp/objects/XXXXXXXXXXXX.php
Так что, похоже, у нас есть готовый и функционирующий наш?
Видеть, что веб-сервер работает Perl Сценарии (действительно, Perl?) Мы захватываем обратную оболочку Perl из нашего любимого Chechsheet , установите IP/порт, и мы возлагаемся с низкой привилегией скорлупы — извините, без скриншота.
~ 5 минут в оценке, и у нас уже есть коробка с низкой привилегией.
На мой огромный сюрприз, сервер не проходил только 1 сайт, но 40 разных Отказ К сожалению, я не сохранил скриншоты всех деталей, но выход был вдоль линий:
$ ls /var/www access.log site1/ site2/ site3/ {... the list goes on}
Вы получаете точку зрения. Удивительно, что прочитайте доступ к Все Было доступно размещенные веб-сайты, что означало, что я мог бы прочитать все объекты Backend Code. Я ограничен кодом example.com.
Примечательно, внутри CGI-admin/страницы
Справочник, все сценарии PERL подключались к базе данных MySQL как корень Отказ Учетные данные для базы данных были там в ClearText. Пусть это будет корень: pwned42.
Конечно, сервер был запущен Mariadb И мне пришлось прибегать к этому проблема перед возможностью получить доступ к базе данных. После этого мы выполняем:
mysql -u root -p -h localhost victimdbname Password: pwned42
И мы в базе данных с корневыми привилегиями.
«Используйте баз данных;» Позволяет получить доступ к любую из 35 баз данных и просмотреть и изменять их содержимое
Через 7 минут мы имеем полный доступ к читанию/записи к содержимому 35 (!) базы данных
Здесь я морально обязан остановиться и раскрывать свои выводы до сих пор. Потенциальный ущерб уже огромно.
Что может сделать злоумышленник:
- Сбросьте содержимое всех баз данных, как описано здесь В результате данных всех 35 компаний будут просочиваться в общественном домене.
- Снимите все базы данных, эффективно удаляя данные 35 компаний
- Оставьте бэкдор для постоянного доступа как Apache с Cronjob, как описано здесь В случае, если они хотят обратную поездку.
Здесь следует отметить, что процесс MySQL работает как root Поэтому я подумал, что попробую исполнять \! WHOAMI
В надежде получить root. К сожалению, я все еще был Apache.
Время сделать перерыв. Остановить таймер.
Что еще может пойти не так?
После раскрытия моих выводов я получаю дальнейшее разрешение на копаться глубже.
Перед поиском способах обострить свои привилегии в root и иметь возможность вызвать огромное потенциальное повреждение, я смотрел, какие другие интересные файлы я смогу прочитать с моим ограниченным пользователем.
В этот момент я вспомнил о открытых портах SMB. Это означало, что должна быть какая-то папка где-то, которая разделяется в системе среди пользователей. После небольшого перечисления в каталоге появляется следующее /Главная/Самба/Обеспеченный
(Пожалуйста, извините за массовую цензуру):
Внутри всех этих каталогов были файлы каждого пользователя Хостинг компании. Это включало все виды чувствительных данных, среди прочего:
- .psd/.ai. Файлы (дизайнеры знают, насколько важно сохранить эти частные, это их работа и их методы в конце концов)
- Файлы cookie sqlite.
- Счеты
- Пиратые электронные книги (усмехнулись, когда я увидел это)
- Учетные данные для их WiFi SSID
Что может сделать злоумышленник:
- Лагерь за пределами офисов компании, войдите в свою интранет и выполняйте все виды забавных атак, которые вы можете сделать на местных сетях
- Сбрасывать все конфиденциальные данные, перечисленные выше в общедоступную достояние
Потребовалось некоторое время, чтобы пройти через папки и понять, насколько серьезно этот вопрос. Еще один перерыв.
Последний удар
Посмотрев немного дольше, как apache. Я решаю, пришло время пойти на большую рыбу, увы получают root. Я ссылаюсь на популярную Chechsheet И начать перечислять систему интересных файлов.
Благодаря моим копанию до сих пор я уже прошел большую часть этих методов, и, казалось, не смог найти что-то, что увеличит мою опору.
Вот когда это ударило меня. В захвате флаг вызовы, которые я привык играть, операционная система обычно исчезнет, и это какая-то намеренно неправильно заверена служба, которая в конечном итоге дает вам востребованную корневую привилегию. Однако в реальном мире Люди не исправляют.
Я имею в виду, посмотрите на Equifax (не мог сопротивляться).
Какой тип Linux работает сервер?
$ cat /etc/issue CentOS Linux release 7.2.1511 (Core)
Какая версия ядро?
Это похоже на старую версию ядра.
Это напоминает вам о чем-то? Если нет, прочитайте здесь (Подсказка: это очень серьезно)
Я нашел это Blogpost, который указал на меня, чтобы проверить, было ли ядро уязвимо со сценарием, найденным здесь.
Timestamps & Firefox восстановлены сайты отредактировал
С последующим:
Игра закончена.
Я мгновенно написал электронную почту, полностью раскрывающий детали и потенциальное воздействие каждого шага, как описано выше, и завернутая ночью. Whow.
Что может сделать злоумышленник:
- Прочитайте/изменить все файлы на сервере
- Оставьте постоянный бэкдор (как сделано с Apache)
- Установите и потенциально распространять вредоносное ПО в интранет сервера
- Установите Ransomware (принимая базы данных из 35 компаний и все данные Hosting Company, не маленькая вещь)
- Используйте сервер как криптовалютный шахтер
- Используйте сервер как прокси
- Используйте сервер в качестве сервера C2C
- Используйте сервер как часть ботнета
- … (использовать свое воображение)
- RM -RF/ (даже не шутить)
На следующий день я связался с моим другом (который вступил в контакт с компанией, работающей на сервере) и был проинформирован, что ошибка в файловом загрузке была исправлена.
TL; доктор
Суммируя, мы нашли:
- Веб-приложение с неограниченной уязвимостью для загрузки файлов, которая привела к низкой привилегированной оболочке.
- Учетные данные в базу данных MySQL, которые привели к чтению/записи доступа к 35 базам данных
- Много читаемых чувствительных файлов
Наконец, мы злоупотребляли некрасимое ядро для получения корневого доступа.
Смягчения — предложения
Давайте начнем с помощью загрузчика, который дал нам нашу навязчивую опору. Поскольку бэкэнда всей веб-приложения была написана в Perl — и, поскольку я не говорю Perl — я не могу действительно предложить исправления на этом.
Один исправление, я бы предложил бы не использовать Perl в 2017 году, но это просто мое мнение, не стесняйтесь доказывать меня неправильно.
Что касается файловой системы, я рекомендую уделять большое внимание присвоению правильных разрешений файлов для пользователей, согласно Принцип наименее привилегии Отказ Таким образом, даже если привилегированный пользователь, как Apache, получает доступ, они не могут читать какие-либо конфиденциальные файлы.
Запуск всех веб-сайтов на одном сервере является плохой идеей, я не уверен, будет ли документальный подход решить проблему.
Имея те же учетные данные для всех баз данных, наверняка плохая идея.
Одиночные точки провала, как правило, не приятно иметь.
Наконец, Исправить все Отказ Это буквально 1 команда: SU -C 'Yum Update'
(Centos Conipe)
Спасибо за чтение и для того, чтобы сделать его до здесь, извините за длинный пост. Я хотел быть тщательным, это была одна серьезная ситуация 😄
Разбивайте, что нравится кнопка в 50 раз, если вам понравилось!
Бесстыдный штекер
Я 5-й курс электрического и компьютерного инженерного ученика из Греции. Я заинтересован в Infosec, Blockchain Research & Applications в современных предприятиях и автономных автомобилях. Узнайте больше о том, что я делаю в gakonst.com.
Если вам понравилось содержание этого поста и хочу быть обновленным о моей работе, следуйте за мной Средний и на Твиттер
Оригинал: «https://www.codementor.io/@gakonst/how-i-hacked-40-websites-in-7-minutes-gdwzlspr2»