Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
[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
|
|
|
|