информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применениеЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32 hack] Ну, да конечно. 14.08.02 01:54  Число просмотров: 3573
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> > Единственное что мешает - не знаю, как бы встроить
> свой код
> > в адресное пространство процесса-жертвы.
>
> Делай как тот перец, который это раскопал:
> 1. Spy'ем узнаешь хэндл едита

Если бы все окна были эдитами, не было бы никаких проблем.
Или хотя бы, если бы у каждого процесса был поток с эдитом на моём десктопе.
Или если бы все окна были столь “вместительными” как эдит.

> 2. Посылаешь ему сообщение увеличить размер буфера

Ну, это даже не всегда нужно...

> 4. Генерируешь код, в начале кода вставляешь какую-нибудь
> последовательность символов, которую потом найти можно.

А это вовсе не нужно - я вставляю 16 мег нопов и всё.

> 3. Копируешь код в клипборд (не помню аппликацию, на сайте
> того перца глянь)

Что глянуть то? Беру да копирую.

> 4. Из клипборда вставляешь в едит
> 5. По ключевому слову находишь этот код в памяти.

Вот уж интересно как это я найду его в чужом процессе, не имея отладочных привилегий.

> 6. Запускаешь.

Запускаю, если знаю где этот код.
<programming>
[Win32 hack] Какие есть способы выделить память? 13.08.02 01:23  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
Вот недавно писали в site updates про ошибку в win32 (ссылка сверху ещё есть).

Под впечатлением посмотрел какие у меня на компе сервисы интерактивные.
И о ужас, их целая куча таких - интерактивных, с окнами. Жаль, правда, ни одного от МС среди них не было, но я не очень внимательно смотрел.

Вот и решил написать получатель админа из гостя.
Единственное что мешает - не знаю, как бы встроить свой код в адресное пространство процесса-жертвы.

Условия:
Есть окно приложения на моём десктопе - могу слать ему любые сообщения.
Не могу устанавливать hook.
Могу заставить приложение перейти по любому заданному адресу.
Приложение работает под LocalSystem я – под гостём или выше до админа не включая.
Для определенности всё под Win2K

Нужно:
Выделить и заполнить моими данными около 20 байт, и точно знать где.
Или около мегабайт 16 - тогда я попытаюсь угадать, где.

Единственное, что мне пришло в голову - установить этому окну заголовок. Но: я не знаю где же хранится этот заголовок, я не могу сделать его больше 12-64Кб. А при частом угадывании приложение-жертва в конце концов завершается.
[Win32 hack] Какие есть способы выделить память? 13.08.02 12:38  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> Единственное что мешает - не знаю, как бы встроить свой код
> в адресное пространство процесса-жертвы.

Делай как тот перец, который это раскопал:
1. Spy'ем узнаешь хэндл едита
2. Посылаешь ему сообщение увеличить размер буфера
4. Генерируешь код, в начале кода вставляешь какую-нибудь последовательность символов, которую потом найти можно.
3. Копируешь код в клипборд (не помню аппликацию, на сайте того перца глянь)
4. Из клипборда вставляешь в едит
5. По ключевому слову находишь этот код в памяти.
6. Запускаешь.

> Нужно:
> Выделить и заполнить моими данными около 20 байт, и точно
> знать где.
> Или около мегабайт 16 - тогда я попытаюсь угадать, где.
>
> Единственное, что мне пришло в голову - установить этому
> окну заголовок. Но: я не знаю где же хранится этот
> заголовок, я не могу сделать его больше 12-64Кб. А при
> частом угадывании приложение-жертва в конце концов
> завершается.
[Win32 hack] Ну, да конечно. 14.08.02 01:54  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> > Единственное что мешает - не знаю, как бы встроить
> свой код
> > в адресное пространство процесса-жертвы.
>
> Делай как тот перец, который это раскопал:
> 1. Spy'ем узнаешь хэндл едита

Если бы все окна были эдитами, не было бы никаких проблем.
Или хотя бы, если бы у каждого процесса был поток с эдитом на моём десктопе.
Или если бы все окна были столь “вместительными” как эдит.

> 2. Посылаешь ему сообщение увеличить размер буфера

Ну, это даже не всегда нужно...

> 4. Генерируешь код, в начале кода вставляешь какую-нибудь
> последовательность символов, которую потом найти можно.

А это вовсе не нужно - я вставляю 16 мег нопов и всё.

> 3. Копируешь код в клипборд (не помню аппликацию, на сайте
> того перца глянь)

Что глянуть то? Беру да копирую.

> 4. Из клипборда вставляешь в едит
> 5. По ключевому слову находишь этот код в памяти.

Вот уж интересно как это я найду его в чужом процессе, не имея отладочных привилегий.

> 6. Запускаешь.

Запускаю, если знаю где этот код.
[Win32 hack] Ну, да конечно!!! 18.08.02 21:52  
Автор: 90210 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Долго я голову ломал над этом багом, и вот что надумал. Не надо никаких интерактивных сервисов, наша цель - winlogon'овое окно "NetDDE Agent" (по крайней мере, в w2k), находящееся в десктопе default.

1. WM_COPYDATA копирует туда что хочешь. Эмпирически (айсом ;) узнавал, куда, и бомбил winlogon коллами на ту страницу с интервалами в 10б. Однако вылетает.
2. WM_GETTEXT на caption почему-то не пашет, хотя в качестве адреса я что только не ставил...
3. Я заметил, что по адресу, равному хэндлу окна (у моего winlogon'а - 1001c, у csrss или какого-то его друга - 20040 или что-то в этом роде) страница всегда проинициализирована. Это есть гут, так как куча функций первым параметром получает адрес, в который что-то пишет.
4. Есть кульная функция GetCursorPos, с одним параметром, в который она пишет 2 небольших числа (и трет, тем самым, 8 байт). Если я поставлю курсор у себя, скажем, так:
call SetCursorPos,'\',0
то GetCursorPos, будучи исполненным таким макаром:
call PostMessage,winlogon_wnd,WM_TIMER,0,getcurpos_addr
напишет по адресу winlogon_wnd '\',0,0,0,0,0,0,0
5. Есть кульная функция SetCurrentDirectoryA/W, коия, будучи исполненная точно таким же способом (в winlogon'е) после GetCursorPos, установит его куррент директори на корневуху %systemroot% диска. Это тоже есть гут.

Теперь кульминация: при релогоне winlogon любит грузить либыбез_указания_пути_к_ним!!
В частности, этим балуется msgina.dll.
То есть мы делаем так: пишем в корневуху нашу либу, обзываем ее так, как больше нравится msgina, переставляем текущий какталог у winlogon'а и делаем релогон. Телемаркет ;))) наша либа в винлогоне.

Все это конечно, хорошо, но пока я дизазмил\трейсил winlogon (w2k), я обнаружил преинтереснейшую вещь: msginaсамапри логоне ставит curdir winlogon'а на '\', и после делает LoadLibraryW на es.dll без указания пути. То есть просто пишем es.dll в корень системного диска и релогинимся...
Ух, как по ламерски, но ведь работает... Или это только у меня? В любом случае, с переброской каталога - это эксплоит еще тот. Но защититься просто - залочить писанину в корень системы и все ;)

wbr, 90210//HI-TECH
[Win32 hack] Ну, да конечно!!! 19.08.02 03:18  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
Сразу: у меня ХР про ру.

> Долго я голову ломал над этом багом, и вот что надумал. Не
> надо никаких интерактивных сервисов, наша цель -
> winlogon'овое окно "NetDDE Agent" (по крайней мере, в w2k),
> находящееся в десктопе default.

Хе. Действительно :)
Это гораздо веселее. Хотя и интерактивных сервисов хватает с головой.
У меня сейчас (не просто интерактивных, а с окнами, запущены - всё как надо): PGP, NU2002, AtGuard. Наверняка и антивирусы грешат, у меня онлайнового не стоит, так что не знаю. Могу прогу дать свою, которая выдаёт грешников, если кому интересно.

> 1. WM_COPYDATA копирует туда что хочешь.

Да, я никак не мог вспомнить название сообщения. Мне казалось WM_DATA..., я даже решил, что глючу.
Сообщение замечательное, но, к сожалению, память после его обработки очищается... :(
If the receiving application must access the data after SendMessage returns, it must copy the data into a local buffer.

> Эмпирически (айсом
> ;) узнавал, куда, и

У меня:
Если данных не много (1Кб ещё немного) - в стеке. Если много (16Кб - уже много) - специально отдельно выделяется регион, освобождается после обработки :(.

> бомбил winlogon коллами на ту страницу
> с интервалами в 10б.

10б?!!! Не Кб? Чё так мелко то?

> Однако вылетает.

Как натыкается на валидный код, который в конце приводит к ExitProcess - так и вылетает. Правда не ясно, где ты его в стеке нашёл... Наверное натыкался на jmp в код.

> 2. WM_GETTEXT на caption почему-то не пашет, хотя в
> качестве адреса я что только не ставил...

И не будет. У меня выдаёт "сообщение должно использоваться с функциями синхронизации". А ты ведь его PostMessage'ом туда ставишь, передавая адрес не в своём адресном пространстве. Это и правильно, иначе это был бы способ писать в чужой процесс :)

> 3. Я заметил, что по адресу, равному хэндлу окна (у моего
> winlogon'а - 1001c, у csrss или какого-то его друга - 20040
> или что-то в этом роде) страница всегда
> проинициализирована.

У них может и всегда, а вообще не всегда. Причём не ясно когда, иногда на ней R стоит только - ничего не попишешь, иногда вообще не выделена, как мне показалось.
Кстати, а кто-то знает, что по адресу хэндела окна?

> Это есть гут, так как куча функций

Да, хоть что-то приятное :)

> первым параметром получает адрес, в который что-то пишет.

Только вот редкая функция посчитает нормальным 113h вторым :(
Ох, как оно мешает. Ну нафига оно им было нужно - в TimerProc передавать WM_TIMER?.. :)

> 4. Есть кульная функция GetCursorPos, с одним параметром, в
> который она пишет 2 небольших числа

Я вот сейчас думаю, а реально ли увеличить допустимые положения мыши? Сейчас кажется, за экран нельзя вылазить :(
Или может кто знает ещё одну такую кульную функцию?

> (и трет, тем самым, 8
> байт). Если я поставлю курсор у себя, скажем, так:
> call SetCursorPos,'\',0
> то GetCursorPos, будучи исполненным таким макаром:
> call PostMessage,winlogon_wnd,WM_TIMER,0,getcurpos_addr
> напишет по адресу winlogon_wnd '\',0,0,0,0,0,0,0

Учти, что этим ты оставил в стеке 3 DWORD'а. И одной винде известно, что она там с ними сделает... Хорошо, если SEH нас спасёт всегда, но может же и не повезти, мало ли что там у них.

> 5. Есть кульная функция SetCurrentDirectoryA/W, коия,
> будучи исполненная точно таким же способом (в winlogon'е)
> после GetCursorPos, установит его куррент директори на
> корневуху %systemroot% диска. Это тоже есть гут.
>
> Теперь кульминация: при релогоне winlogon любит грузить
> либыбез_указания_пути_к_ним!!
> В частности, этим балуется msgina.dll.
> То есть мы делаем так: пишем в корневуху нашу либу,
> обзываем ее так, как больше нравится msgina, переставляем
> текущий какталог у winlogon'а и делаем релогон. Телемаркет
> ;))) наша либа в винлогоне.

Славно.

> Все это конечно, хорошо, но пока я дизазмил\трейсил
> winlogon (w2k), я обнаружил преинтереснейшую вещь: msgina
>самапри логоне ставит curdir winlogon'а на '\', и после
> делает LoadLibraryW на es.dll без указания пути. То есть
> просто пишем es.dll в корень системного диска и
> релогинимся...

Ещё лучше :) Не ошибка привела к обнаружению ошибки :)

> Ух, как по ламерски, но ведь работает... Или это только у
> меня? В любом случае, с переброской каталога - это эксплоит
> еще тот. Но защититься просто - залочить писанину в корень
> системы и все ;)

А так ведь обычно и есть :( Редко кто даст гостю писать в C:\

> wbr, 90210//HI-TECH

Что-то столько новых идей ты написал, а я ни одну применить не смог :( Всегда чуть-чуть не хватает.

Но уже лучше - есть куда писать (будем считать hWnd нормальным указателем:). Осталось найти способ писать.

Пойду искать кульную функцию...
пара идей 19.08.02 10:48  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
1) можно сделать PostThreadMessage
тогда в TimerProc первым параметром будет NULL
(вдруг пригодится :) )

2) можно в качестве TimerProc указать DefWindowProc :)
тогда она вызовет что то по адресу GetTickCount()
интересно можно ли менять число тиков :)
правда не знаю зачем это нужно, можно же сразу в WM_TIMER указать адрес :)

3) возможный путь поиска:
если какой то сервис обрабатывает WM_COPYDATA и во время обработки делает SendMessage или ещё что то, что может передать управление в другой процесс, то можно сделать так:
- посылаем WM_COPYDATA с большим размером (десятки мегабайт - так можно будет проще догадаться об адресе); в этот буфер периодически пишем выровненный на 4К свой код
(скорее всего и буфер будет выровнен на 4К, а значит нам легче угадать начало нашего кода)
- когда сервис делает SendMessage (например в explorer или дргуое приложение под нашим аккаунтом), мы (заранее например хукнув это приложение) делаем SendMessage(WM_TIMER) этому сервису с предполагаемым адресом тех мегабайт, которые послали в WM_COPYDATA

осталось только найти такой сервис ;)
правда он может делать это, сам не зная
например неявно из какой то виндовской функции
[Win32 hack] Заюзал сервисы. 20.08.02 07:51  
Автор: Biasha <Бяша> Статус: Member
Отредактировано 20.08.02 08:32  Количество правок: 5
<"чистая" ссылка>
> 1) можно сделать PostThreadMessage
> тогда в TimerProc первым параметром будет NULL
> (вдруг пригодится :) )

Знаю.

> 2) можно в качестве TimerProc указать DefWindowProc :)
> тогда она вызовет что то по адресу GetTickCount()
> интересно можно ли менять число тиков :)
> правда не знаю зачем это нужно, можно же сразу в WM_TIMER
> указать адрес :)

:)

> 3) возможный путь поиска:
> если какой то сервис обрабатывает WM_COPYDATA

Есть один такой, обрабатывающий WM_COPYDATA, и вы его знаете :)
Winlogon называется :)

> и во время
> обработки делает SendMessage или ещё что то, что может
> передать управление в другой процесс,

Вот это не знаю, но почти полностью уверен.

> то можно сделать так:
> - посылаем WM_COPYDATA с большим размером (десятки мегабайт
> - так можно будет проще догадаться об адресе); в этот буфер
> периодически пишем выровненный на 4К свой код
> (скорее всего и буфер будет выровнен на 4К, а значит нам
> легче угадать начало нашего кода)

А зачем так? Берутся 16 мег, в самом конце - код. Ну, или, скажем, в середине, и в конце. Всё остальное заполняется нопами (NOP, 90h). Всё – передавай, главное попади.
А 90210 чего-то там гадал по 10 байт... Зачем?

> - когда сервис делает SendMessage (например в explorer или
> дргуое приложение под нашим аккаунтом), мы (заранее
> например хукнув это приложение) делаем
> SendMessage(WM_TIMER) этому сервису с предполагаемым
> адресом тех мегабайт, которые послали в WM_COPYDATA

Да, я над этим думал. Нужно только найти, кого тормознуть.

> осталось только найти такой сервис ;)

Ну вот - чем Winlogon плох? Правда, не совсем сервис, но тоже ничего :)

> правда он может делать это, сам не зная
> например неявно из какой то виндовской функции

Почти наверняка :)

- - - - -

Все интерактивные сервисы заюзал.
Я нашёл эдит у каждого окна :) Ну почти у каждого.
У всех консольных окон есть свой эдит. Не замечали?

Прям как в фильмах про хакеров:
Жмём на левый верхний угол, в меню выбираем "Свойства". Как вы думает кому принадлежит появившееся окно? Я вот всегда думал Explorer'у, но MS пошёл другим путём :) А здесь уж чего только нету, эдитов целая куча, кнопочки, листбоксы, короче, выбирай, что душе угодно.

Осталось всего то заиметь консоль в каждом интерактивном сервисе. А здесь нам поможет кульная функция AlocConsole. Она покульней GetCursorPos будет - вообще параметров не требует :) Ещё и в kernel32 находится.

Ну вот и всё. Эдит есть, дальше 16 мег и пытаемся угадать. лучшего не придумал, но и так совсем неплохо.

А вот что делать с этим Winlogon - не знаю. Может я торможу, но консоль не выходит никак создать. Видимо она создаётся на его родном десктопе, не глядя на поток. А другого способа не придумал...

P.S.
Такое горе:
Поставил “NuMega SoftICE Driver Suite 2.6”.
В настройках “Universal Video Driver (SoftICE appears in a "window")”.
У меня интегрированный видеоадаптер “Intel(R) 82845G/GL Graphics Controller”.
Жму Test: “SoftICE Universal Video Driver test completed successfully.”
Жму ctrl-d: изображение @#$ится немного, как будто в 16 цветов и нифига.
Жму ещё раз – всё нормально. Но я то не этого хотел.
В списочке их моего адаптера нету. Что делать – не знаю.
Может где-то есть более новый, или можно нагрузить драйверов к моему адаптеру?

P.P.S.
Интерактивные сервисы, это конечно хорошо, но хотелось бы от'иметь Winlogon. Он чаще на компах стоит. Есть у кого какие идеи?
По крайней мере DoS из под гостя, подключённого к Terminal Server есть :)

P.P.P.S.
Вот, выкладываю программу, выводящую список интерактивных сервисов. И их окна верхнего уровня, с потоками их породившими, если таковые имеются.
http://www.biasha.al.ru/files/IntSrvTest.exe
(здесь Rar3sfx, с исходником на VC++7.0 и готовым exe внутри)
Пользоваться так: IntSrvTest.exe > 1.txt
Если в файле будет строка типа “Wnds: 000100B0, 00020128” – значит сервис уязвим. Буду вам благодарен, если вы его мне назовёте :)
Программа несколько по идиотски работает – ищет не окна, у которых владелец LocalSystem, а интерактивные сервисы, у которых есть окна. Нужно будут переделать – скорее всего появятся новые жертвы.
Да, ещё:
Работает программа только под 2K, XP причём под XP нужно быть ауторизированым пользователем (не гостём значит).
[Win32 hack] Заюзал твою прогу, результаты внутри... 20.08.02 10:41  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
У меня 2к про русская СП2.
Вот результат (только те сервисы, у которых есть окна):

--------------------------------------------------------------------------
ServiceName=Schedule
DisplayName=Планировщик заданий
ServiceType = 288 (SERVICE_WIN32_SHARE_PROCESS, SERVICE_INTERACTIVE_PROCESS)
CurrentState = 4 (SERVICE_RUNNING)
ControlsAccepted = 71 (SERVICE_ACCEPT_PAUSE_CONTINUE, SERVICE_ACCEPT_SHUTDOWN, SERVICE_ACCEPT_STOP, SERVICE_ACCEPT_POWEREVENT)
Win32ExitCode = 0
CheckPoint = 0
WaitHint = 0
ProcessId = 600
ServiceFlags = 0 (is not a system process, or it is not running)
Thread = 648
Wnds: 0001002E

--------------------------------------------------------------------------
ServiceName=spidernt
DisplayName=SpIDer Guard for Windows NT
ServiceType = 272 (SERVICE_WIN32_OWN_PROCESS, SERVICE_INTERACTIVE_PROCESS)
CurrentState = 4 (SERVICE_RUNNING)
ControlsAccepted = 1 (SERVICE_ACCEPT_STOP)
Win32ExitCode = 0
CheckPoint = 0
WaitHint = 0
ProcessId = 612
ServiceFlags = 0 (is not a system process, or it is not running)
Thread = 636
Wnds: 00010032
Thread = 684
Wnds: 0001004C

--------------------------------------------------------------------------
Так что - увы! На моей машине фокус не пройдет - оба сервиса, имеющие окна, НЕ системные процессы! :((
[Win32 hack] Отлично! Радуйся :) 21.08.02 02:01  
Автор: Biasha <Бяша> Статус: Member
Отредактировано 21.08.02 03:53  Количество правок: 1
<"чистая" ссылка>
> У меня 2к про русская СП2.
> Вот результат (только те сервисы, у которых есть окна):
>
> ServiceName=Schedule
> DisplayName=Планировщик заданий

Блин. Кайф. Ты им пользуешься или он сам?
У меня он отключён, так что окон у него нету. Но когда я его запускал специально, окон у него не было (XP про ру).
Вот бы ты ещё сказал, как это окно заиметь.

> ServiceName=spidernt
> DisplayName=SpIDer Guard for Windows NT

Ну я же говорил :)
И он провинился :)

> Так что - увы! На моей машине фокус не пройдет - оба
> сервиса, имеющие окна, НЕ системные процессы! :((

Строка
ServiceFlags = 0 (is not a system process, or it is not running)
означает, что они запущены не в системном процессе. Это вовсе не означает, что они не запущены с правами системы.
Мало того. Интерактивный сервис вообще не может быть с отличным от LocalSystem акаунтом. Так что её следует игнорировать. Там вообще всё кроме ProcessId, Thread, Wnds – лишнее; просто это я для себя делал, чтоб виднее было, о ком речь.
Я же написал: если есть строка Wnds - значит уязвим.

Так что не расстраивайся, а радуйся, что у тебя дырявая винда :)

И чё меня потянуло такой комментарий вставить в скобки туда. Это, кстати, дословно из мсдн пояснение.

P.S.
Кстати, To90210: HWND не есть валидный указатель. У меня они обычно в стек попадают.
И ещё: я погорячился насчёт DoS против Terminal Server. Не знаю как в .NET и т.д. (кажется там всё улучшили - может и работать), но в 2K Server у каждой сессии свой Winlogon и csrss.
Блин, нужно Winlogon заюзать, тогда уж совсем здорово будет.
[Win32 hack] Отлично! Радуйся :) 21.08.02 23:12  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> > ServiceName=Schedule
> > DisplayName=Планировщик заданий
>
> Блин. Кайф. Ты им пользуешься или он сам?
> У меня он отключён, так что окон у него нету. Но когда я
> его запускал специально, окон у него не было (XP про ру).
> Вот бы ты ещё сказал, как это окно заиметь.

Специально запустил для твоей проги! :))
Посмотреть на результат...

> > ServiceName=spidernt
> > DisplayName=SpIDer Guard for Windows NT
>
> Ну я же говорил :)
> И он провинился :)

От НЕГО я этого не ожидал! Честно!

> Так что не расстраивайся, а радуйся, что у тебя дырявая
> винда :)

Чему тут радоваться!? Лишняя головная боль... :((
Хотя, если юзверям на уровне полиси ограничить круг аппликаций, разрешенных к запуску - может поможет?...


> Кстати, To90210: HWND не есть валидный указатель. У меня
> они обычно в стек попадают.

Дык, ИМХО, хэндл - это смещение в таблице указателей на структуры, содержащие информацию?
[Win32 hack] Отлично! Радуйся :) 23.08.02 11:11  
Автор: 90210 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Идея с AllocConsole рулит. Я думаю, можно ее немного развить:
1. Находим сервис с окном в нашем десктопе.
2. Делаем у него консоль (если ВДРУГ есть, то сначала, для профилактики, FreeConsole).
3. Узнаем hwnd окна консоли и шлем ему WM_SETTEXT с заголовком - нашим эксплоитом (нулей быть не должно).
4. Делаем какому-либо окну сервиса GetConsoleTitle (WM_TIMER'ом) - два параметра, первый - адрес буфера, второй - длина (как раз WM_TIMER=113h)
5. На хэндл окна, которому делали этот WM_TIMER опять делаем WM_TIMER (штоб код исполнился).

Минусы очевидны:
- не всегда по адресу = хэндлу есть хорошая память ;)
- иногда процесс снимается после писания в эту память (или из-за дисбаланса стека, кто его знает).

Плюсы тоже ничего - бомбить никого не надо.

> > Кстати, To90210: HWND не есть валидный указатель. У
> меня
> > они обычно в стек попадают.
Чей?

>
> Дык, ИМХО, хэндл - это смещение в таблице указателей на
> структуры, содержащие информацию?
hwnd - это песня другая. Это же не объект ядра и т.п. вещь.
Те структуры, о которых ты говоришь, живут в твоем контексте (поэтому не валидны в других).
Да и hwnd бывают довольно большие (числа то есть) - что ж это за индексы? ;)


wbr, 90210//HI-TECH
[Win32 hack] Отлично! Радуйся :) 24.08.02 00:27  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> Идея с AllocConsole рулит. Я думаю, можно ее немного
> развить:
> 1. Находим сервис с окном в нашем десктопе.
> 2. Делаем у него консоль (если ВДРУГ есть, то сначала, для
> профилактики, FreeConsole).

Да, я так сначала и дела, но, что интересно, всё работает и без FreeConsole. Странно, ведь консоль у сервиса обычно бывает (мало того, я тестировал на своём сервисе, который точно является консольным приложением), только не ясно, где же она...
Но это и не так уж важно.

> 3. Узнаем hwnd окна консоли и шлем ему WM_SETTEXT с
> заголовком - нашим эксплоитом (нулей быть не должно).

Я так пробовал, очень возможно я в чём-то ошибся (почти точно), но не получилось.
Наверное, нужно было ещё в oem перевести.

> 4. Делаем какому-либо окну сервиса GetConsoleTitle
> (WM_TIMER'ом) - два параметра, первый - адрес буфера,
> второй - длина (как раз WM_TIMER=113h)
> 5. На хэндл окна, которому делали этот WM_TIMER опять
> делаем WM_TIMER (штоб код исполнился).
>
> Минусы очевидны:
> - не всегда по адресу = хэндлу есть хорошая память ;)

Мне сейчас кажется, даже, что это скорее исключение, когда она там есть.

> - иногда процесс снимается после писания в эту память (или
> из-за дисбаланса стека, кто его знает).
>
> Плюсы тоже ничего - бомбить никого не надо.
>
> > > Кстати, To90210: HWND не есть валидный указатель.
> > > У
> > > меня
> > > они обычно в стек попадают.
> Чей?

Не знаю чей. Для Winlogon: зарезервирован интервал, посередине Guard Page, и что меня удивило, по обе стороны от него память выделена (а не просто зарезервирована снизу). hWnd попадал в нижние (меньшие) адреса – туда, куда стек ещё не дошёл.

> >
> > Дык, ИМХО, хэндл - это смещение в таблице указателей
> > на
> > структуры, содержащие информацию?
> hwnd - это песня другая. Это же не объект ядра и т.п. вещь.
> Те структуры, о которых ты говоришь, живут в твоем
> контексте (поэтому не валидны в других).
> Да и hwnd бывают довольно большие (числа то есть) - что ж
> это за индексы? ;)

Да, я тоже думаю, что это не смещение в таблице.
Впрочем, это тоже не важно. Главное что они не указывают на структуру. А значит, память под ними не пригодна для использования. А значит, нет никакого смысла передавать их первым параметром в какие либо функции.


А я у csrss окно нашёл :)
Правда, не ясно, что с его и Winlogon'овским окнами делать. Какие-то они не такие. Наверное, таки напишу прогу, которая нормально выдаёт инфу про владельцев окон, может виднее станет...
[Win32 hack] Ну, да конечно!!! 19.08.02 10:42  
Автор: 90210 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Где же тело сообщения? :) 20.08.02 07:50  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach