Генерация PDF для скачивания конфигов сервера

в 19:31, , рубрики: hack, Блог компании Модульбанк, взлом, информационная безопасность

Есть замечательный проект www.hiqpdf.com/demo/ConvertHtmlToPdf.aspx

Умеет html качественно в pdf или картинки превращать

Но по дефолту не учитывает тот факт, что в html можно вставлять js/iframe, которые могут быть использованы не по назначению

Ну и я не долго думая попробовал это на их же сайте

Вот так нагенерил в консоли браузера ифреймы

var str = "";

for (var i = 8000; i <= 9000; i++) {
 str += "#" + i;
 str += "<iframe src='https://localhost:" + i + "' height='60' width='300'></iframe><br/>";
}

str;

Получилось что-то вроде этого

Генерация PDF для скачивания конфигов сервера - 1

Вот такой самоскан портов ))

Нашёл плеск (конечно nmap таже спокойно находит и даже больше -p [8000-9000] -T4 -A -v hiqpdf.com, но вот так интереснее же)

Генерация PDF для скачивания конфигов сервера - 2

Но быстро с ними разобраться не вышло, потому в конце продемонстрирую на примере других ребят уязвимость, а для понимания механики процесса сделал своё небольшое демо
Есть апи на .net, которое отдаёт просто строку и всё
+ есть код, который умеет на этом сервере генерировать pdf
Код взят прямо с hiqpdf.com, без лишних телодвижений

Генерация PDF для скачивания конфигов сервера - 3

Теперь 4 iframe localhost/api/def/get
Генерация PDF для скачивания конфигов сервера - 4

Ок, проверим, что это точно .net на винде

localhost/api/con.aspx — если не в курсе, файлы с именем con/aux и ещё какие-то для винды запрещены. Ноги растут из древностей доса, когда это были конкретные устройства
Например — очень мне нравится сайт dotnetfiddle.net, особенно если под рукой лишь телефон, а так хочется какой нить код набрать
dotnetfiddle.net/con1.asmx — обработанная ошибка и соответствующая 404-страница
dotnetfiddle.net/con.asmx — вот уже не судьба до управляемого кода в пуле добраться
dotnetfiddle.net/con.txt — а вот так можно и путь получить к директории (Physical Path E:sitesrootcon.txt)

Генерация PDF для скачивания конфигов сервера - 5

На самом деле без понятия зачем мне версия, в теории может помочь, если там старая и ты знаешь уязвимости нулевого дня для них )
Лан, теперь самое интересное — узнать директорию, по локалхосту у меня ошибки 404 не закрыты и получаю их, как есть

Генерация PDF для скачивания конфигов сервера - 6

В виду того, что это сайт на .net — конфиг файл web.config лежит в корне

Генерация PDF для скачивания конфигов сервера - 7

Собственно это было легковесное демо

А теперь на реальных данных (чей-то прод, они уже прикрыли лавочку ;)

Генерация PDF для скачивания конфигов сервера - 8

О, там секция включается из файла connections.config, удобно, нестандартно, отлично скачивается )

Генерация PDF для скачивания конфигов сервера - 9

И ещё немного данных

Генерация PDF для скачивания конфигов сервера - 10

Думаю, тут уже всё понятно и продолжать сыпать скринами нет смысла
Жаль вся БД снаружи закрыта
А из JS я такого пока не умею (да, там можно не только iframe, но и js юзать)

Сразу оговорюсь — именно hiqpdf тут не при чём, проблема конфигурации приложения, кода отправки на печать в pdf данных (если знаешь, что чётко будет html, то нужно делать htmlencode), а также любых других либ, например стандартный компонент WebBrowser умеет также

Собственно продолжение — оказывается некоторые любят не PDF, даже не HTML, а именно изображение, допустим png
И юзают для получения картинки компоненту WebBrowser (со мной любезно поделились куском кода, но попросили не раскрывать название продукта, где он юзается)

Суть — можно написать js, который исполнялся в дефолтной System.Windows.Forms.WebBrowser компоненте

Генерация PDF для скачивания конфигов сервера - 11

Вот сам исходник

using (WebBrowser br = new WebBrowser())
{
  AutoResetEvent loadingWaiter = new AutoResetEvent(false);
  br.AllowNavigation = true;
  br.ScrollBarsEnabled = false;
  br.ScriptErrorsSuppressed = true;
  br.DocumentText = "0";
  br.Width = 1024;
  br.Document.OpenNew(true);
  br.Document.Write(htmlCode);
  br.Refresh();

  br.DocumentCompleted += (a, b) => loadingWaiter.Set();

  loadingWaiter.WaitOne(590);

  br.Height = (int)(br.Document.Body.ScrollRectangle.Height * scale + 1);

  using (Bitmap bmp = new Bitmap(br.Width, br.Height))
  {
    br.DrawToBitmap(bmp, new Rectangle(0, 0, br.Width, br.Height));
    bmp.Save(stream, ImageFormat.Png);
  }
}

Про его безумность ничего сказать не могу, ибо не интересовался проблемой создания произвольного изображения из html

На момент обнаружения достаточно было 1к запросов отправить в API (да, дело происходило на IIS и алерты, я так понимаю, если и были, то на том же сервере, если, конечно, войти под учёткой, от которой запущен пул)

Как это править — WebBrowser это IE и необходимо для него запрещать на windows-сервере JS. По моему опыту это и так по дефолту, и мне дико повезло, что оказалось иначе.

Но это отстой и по-хорошему — конечно нельзя в такие компоненты вставлять данные, как есть. Если знаешь, что юзаешь подобную компоненту, а клиент может содержать управляющие символы — их нужно экранировать

Для HTML/JS достаточно сделать HtmlEncode

Но если что, то HiqPdf через htmlToPdfConverter.RunJavaScript = false отлично умеет запрещать JS

Всё это не так эффектно, как в прошлый раз, но, как видите, тоже может помочь в добытии конфигов сервера

Вакансии

Раз начал хабриться, поступило предложение наши вакансии разместить
hh.ru/employer/99993 — вот тут актуальные, но не читай лишнюю воду, смотри вакансии

Автор: SanSYS

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js