• XSS.stack #1 – первый литературный журнал от юзеров форума

Поиск базы dll.

Chococream

Старожил форума
Легенда
Регистрация
31.10.2009
Сообщения
347
Реакции
42
Вчера на конференции damagelab@conference.dlab.org.in обсуждали способы получения базы библиотеки.

Перечисляем: peb, seh(поиск в двусвязном списке последнего обработчика), возврат из NtCreateProcess.
Подробно почитать можно тут http://xss.pro/index.php?topic=14363

При условиях: таблица импорта приложения в котором нах-ся шеллкод не доступна.

Зная, что дллки в win грузятся по 70000000h и выше, я решил сканить этот диапазон на доступность вплоть до 80000000h.

Сэмпл нах-ся в аттаче. Если по указанным выше диап-ам нах-ся валидный пе заголовок(а это обычно kernel32.dll, т.к она(библиотека) вместе с ntdll.dll по умолчанию маппится в любой процесс), то программа находит нужные api для своей работы и выводит msg.

Пароль на архив:
damagelab_gusdt71IDS*!dasas7d
 

Вложения

  • build.rar
    660 байт · Просмотры: 56
Способ получения базы зависит от кода. Чем меньшего он размера, тем менее стабильное и полноценное решение. Нормальный путь для определения базы модуля - вызов LdrGetDllHandle(). Это синхронный загрузочный вызов. Можно базу найти из базы данных загрузчика, просканив её(это смотря что известно про модуль, имя его, ссылка в нутри его, чексумма, референс на импорт етц). Можно просканить всё адресное пространство в поисках проекции(если модуль не описан в лдр). В общем задача более чем тривиальна и примитивна.
 
accelerator
Я подумал вы про #4.

Не удивительно что не работает, адрес хардкодом вбит(видимо начальный адрес для скана вниз), нужно пропускать исключение, чтоб его сех обрабатывал(добавить в олли фолт в игнор). Так и задумывалось. Только вот беда - вне модулей сех не работает(MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE) и включить это нельзя, так как MEM_EXECUTE_OPTION_PERMANENT. Да и чтоб обойти это(использовать системный сех, установить вех, записать сех в директорию конфигурации етц) нужно знать базу нтдлл.
 
Как вариант заранее поместить в import table нужные библиотеки, затем из программы уже найти требуемые api :)
В этом случае не приходится юзать обращение к fs и т.п трюкам, лоадер сам загрузит библиотеки в ап процесса, а нам остаётся найти адреса функций.
 
Chococream
нам остаётся найти адреса функций.
Заюзать GetProcAddress() или иную апи ?
Для начала её нужно найти в экспорте. А для этого нужно найти модуль. А для этого нужно прочитать пеб. А это можно тока определив TEB. А адресуется он через fs. Оминь.
 
Заюзать GetProcAddress() или иную апи ?
Для начала её нужно найти в экспорте. А для этого нужно найти модуль. А для этого нужно прочитать пеб. А это можно тока определив TEB. А адресуется он через fs. Оминь.
К примеру, в импорте у нас kernel32.dll -> lstrcat, в коде тоже где-то false вызов.
При запуске файла системный лодырь автоматически загрузит нужную библиотеку из импорта, а мне лишь останется найти базовый адрес kernel32.dll(из директории import у файла), а затем и требуемые функции :)
 
Кстати, в обычных приложениях можно использовать предложенный мною выше способ.
Т.о зная одну api (из библиотеки kernel32) можно вытащить и остальные.

Плюсы:
- Беспалевно (можете разбавить таблицу импорта любыми библиотеками, лишь бы была нужная).
- Экономит размер кода.

Минусы:
- Нельзя использовать в шеллкоде.
- В некоторых случаях способы: peb, сканирование диапазонов, выигрывают в размере.

Список всех способов:
- PEB(получаем через FS сегмент).
- SEH(поиск в двусвязном списке последнего обработчика).
- Адрес возврата из ZwCreateProcess(нестабильно).
- http://xss.pro/index.php?topic=2...ndpost&p=125523
- Сканирование таблицы импорта приложения.
- http://xss.pro/index.php?topic=2...ndpost&p=125337
 
мм, тут мысль в голову пришла. По сути нам даже не нужен первоначально kernel32.dll, хватит ntdll.dll. А там соответственно ядерные коллбеки. Получаем из UserSharedData адреса KiFastSystemCall или KiFastSystemCallRet. под xpsp3 эти адреса находятся в пределах 10000h байт и можно просто найти адрес базы ntdll. Остальные не проверял, но думаю same shit =), в конце концов можно не закладыватся на это и просто сканировать на MZ. Ессно будет работать на системах старше xpsp1 (насколько помню)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх