The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимость в OpenOffice, позволяющая выполнить код при открытии файла, opennews (??), 21-Сен-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


59. "Уязвимость в OpenOffice, позволяющая выполнить код при откры..."  +/
Сообщение от Аноним (59), 21-Сен-21, 16:52 
INTEGER в DBF ??? Они там ничего не напутали?

Поля в DBF без использования VARCHAR всегда фиксированного размера, там нет никаких разделителей между полями, сказано INTEGER размерности 6, значит считываем 6ть байт и все... как ??? как они читают DBF ???

Ответить | Правка | Наверх | Cообщить модератору

69. "Уязвимость в OpenOffice, позволяющая выполнить код при откры..."  +2 +/
Сообщение от userd (ok), 21-Сен-21, 17:30 
У DBF куча умеренно совместимых диалектов.
Есть dBASE-овский NUMERIC для которого как раз указывается длина и точность, и хранящийся в файле в виде строки с правым выравниванием и заполнением пробелами, а есть FoxPro-шный INTEGER - всегда 4 байта little endian.

Ответить | Правка | Наверх | Cообщить модератору

86. "Уязвимость в OpenOffice, позволяющая выполнить код при откры..."  +/
Сообщение от Ztp (?), 22-Сен-21, 10:24 
В первом случае читается ровно длина поля, во втором 4 байта. То есть в обоих случаях ровно столько сколько выделено памяти.

Как? Как они умудрились считать больше?

Ответить | Правка | Наверх | Cообщить модератору

88. "Уязвимость в OpenOffice, позволяющая выполнить код при откры..."  +/
Сообщение от userd (ok), 22-Сен-21, 12:44 
Мне лень читать код;
можно предположить что скопировали код для работы с NUMERIC и немного улучшили, поэтому в функции обработки INTEGER в стеке выделяется буфер 4 байта. а потом в этот буфер заносятся данные в соответствии с длиной указанной для поля в заголовке таблицы.

типа так - только тапками не кидайтесь, я уже 20 лет на C++ не писал -

variant dbf_integer::load(istream& dbfstream)
{
    // char buff[dbf_numeric::MAXLENGTH];
    char buff[4];
    dbfstream.get(buff, length);
    // buff[length] = 0;
    // return variant(atof(buff));
    return variant(from_little_endian(*reinterpret_cast<int32_t*>buff));
}

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру