информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаSpanning Tree Protocol: недокументированное применениеПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32 hack] Ну, да конечно!!! 18.08.02 21:52  Число просмотров: 3846
Автор: 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
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach