Разное

Fprintf с: Функция fprintf

Содержание

Неожиданный вывод printf…WEBphoenix

Поведение printf не определено, потому fprintf что оно не может обрабатывать c ID как строку, также известную c-strings как массив символов с нулевым c-strings завершением, функция printf, учитывая cstring спецификатор формата %s, полагается vswprintf на этот нулевой терминатор, чтобы snprintf знать где остановить печать. Поскольку undefined-behavior нулевой байт не найден, он fprintf переполнит массив в соседней printf памяти, ища его, и напечатает undefined-behaviour все, что там есть. Так уж printf случилось, что в этой области undefined-behavior находится другой массив символов vsprintf Buffer, и это то, что печатается, это snprintf может быть что-то совершенно c-strings другое, включая ожидаемый output результат, если случайно vsprintf в первом байте этой непрерывной undefined-behavior памяти был обнаружен нулевой output байт, обратите внимание на undefined-behaviour определение undefined behavior:

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

Возможное неопределенное поведение варьируется от полного игнорирования ситуации с непредсказуемыми результатами до документированного поведения во время трансляции или выполнения программы, характерного для среды […]


Большинство c-string компиляторов и соответствующих c-strings версий, которые я тестировал, действительно vswprintf ведут себя так, как вы описываете, и c-string печатают оба массива последовательно, хотя output и не все из них. Это не шаблон, на c который вы можете положиться, как vswprintf вы можете видеть здесь:

https://godbolt.org/z/1E396Y3KG (gcc snprintf с оптимизацией)

Или здесь:

https://godbolt.org/z/roa6GxWvr (msvc)

Результат vsprintf не всегда abcde0123456789.


Что касается причины, по snprintf которой он не имеет нулевого output терминатора ('\0'), это потому, что snprintf для него недостаточно места, если snprintf вы объявите размер как имеющий c лишний элемент, он будет snprintf автоматически добавлен компилятором:

char ID[6] = "abcde"; //will automatically append \0 to the char array
        ^

На snprintf самом деле лучше не указывать c размер, компилятор выведет output необходимый размер без необходимости vsprintf подсчитывать символы, и поэтому cstring он менее подвержен ошибкам:

char ID[] = "abcde";

c

output

printf

c-strings

undefined-behavior

2022-11-25T09:44:33+00:00 2022-11-26T09:54:41+00:00 Wyoming

Вопросы с похожей тематикой, как у вопроса:

Неожиданный вывод printf

Re Устаревший код: формат «% d» ожидает аргумент типа «int», но аргумент 3 имеет тип «long unsigned int» [-Wformat]

Безопасен ли sprintf (buffer, «% s […]», buffer, […])?

Можно ли распечатать только определенный участок C-строки, не создавая отдельной подстроки?

Как добавить строку перед строкой в ​​C

‘\ 0’ и printf() в C

Printf небезопасно использовать в C

В чем разница между printf() и put() в C?

Что предпочтительнее — printf или fprintf

C / C++ printf() перед проблемой scanf()

Добавить вывод команды в файл без новой строки

Как записать в файл с помощью open() и printf()?

Форматирование вывода с помощью printf: усечение или заполнение

Важна ли проверка возвращаемого значения printf?

Каково обычное поведение undefined/unspecified для C, с которым вы сталкиваетесь?

Переполнение буфера на основе стека в fprintf в musl до 0.

8.8 и более ранних версиях позволяет контекстно-зависимым злоумышленникам вызывать де CVE-2012-2114 : Переполнение буфера на основе стека в fprintf в musl до 0.8.8 и более ранних версиях позволяет зависимые злоумышленники, чтобы вызвать де

(например: CVE-2009-1234 или 2010-1234 или 20101234)

Переключиться на https:// Дом Просмотр :
Поставщики Продукты Уязвимости по дате Уязвимости по типу Отчеты:
Отчет о результатах CVSS Распределение баллов CVSS Поиск :
Поиск продавца Поиск продукта Поиск версии Поиск уязвимостей По ссылкам Microsoft Топ 50 :
Поставщики Оценки поставщика Cvss Продукты Оценка Cvss продукта Версии Другое :
Бюллетени Майкрософт Записи об ошибках Определения CWE О нас и контакты Обратная связь CVE-справка Часто задаваемые вопросы Статьи Внешние ссылки:
Сайт НВД Веб-сайт CWE

Переполнение буфера на основе стека в fprintf в musl до 0. 8.8 и более ранних версиях позволяет злоумышленникам, зависящим от контекста, вызывать отказ в обслуживании (сбой) или, возможно, выполнять произвольный код с помощью длинной строки в небуферизованном потоке, таком как stderr.
Дата публикации: 31 августа 2012 г. Дата последнего обновления: 19 декабря 2012 г.

Прокрутить до

Заявления поставщиков(0) Дополнительные данные о поставщике(0) Определения ОВАЛ(0) Уязвимые продукты(0) # Vulns по продуктам Ссылки(0) Модули Metasploit(0)

Комментарии Внешние ссылки

Советы Secunia Рекомендации XForce Подробности об уязвимости в NVD Подробная информация об уязвимости в Mitre Плагины Nessus Первое руководство CVSS

Поиск в Твиттере Поиск на YouTube Искать в Google

— Оценки CVSS и типы уязвимостей

Оценка CVSS

7,5

Влияние на конфиденциальность Частично (Имеется значительное раскрытие информации. )
Влияние на целостность Частично (Возможна модификация некоторых системных файлов или информации, но злоумышленник не имеет контроля над тем, что может быть изменено, или объем того, на что может повлиять злоумышленник, ограничен.)
Влияние доступности Частично (Снижение производительности или перебои в доступности ресурсов.)
Сложность доступа Низкий (Специальных условий доступа или смягчающих обстоятельств не существует. Для использования требуется очень мало знаний или навыков.)
Аутентификация Не требуется (Аутентификация не требуется для использования уязвимости.)
Доступ получен Нет
Тип(ы) уязвимости Отказ в обслуживанииExecute CodeOverflow
CWE ID 119

— Продукты, затронутые CVE-2012-2114

# Тип продукта Поставщик Продукт Версия Обновление Издание Язык
1 Заявка Эталабс Мусл * * * * Сведения о версии&nbspУязвимости

— Количество затронутых версий по продукту

Продавец Продукт Уязвимые версии
Эталабс Мусл 1

— Ссылки для CVE-2012-2114

http://www. securityfocus.com/bid/53144
BID 53144 Уязвимость musl libc, связанная с переполнением буфера удаленного стека Дата выпуска: 05.09.2012
http://www.etalabs.net/musl/download.html ПОДТВЕРДИТЬ
http://www.openwall.com/lists/musl/2012/04/17/1
MLIST [musl] 20120417 Совет по безопасности musl #001: переполнение буфера стека в vfprintf с длинным выводом
http://www.openwall.com/lists/oss-security/2012/04/18/6
MLIST [oss-security] 20120418 Re: Переполнение буфера на основе стека в musl libc 0.8.7 и более ранних версиях
http://www.openwall.com/lists/oss-security/2012/04/18/5
MLIST [oss-security] 20120418 Переполнение буфера на основе стека в musl libc 0.8.7 и более ранних версиях

— Модули Metasploit, связанные с CVE-2012-2114

Нет никаких модулей metasploit, связанных с этой записью CVE (пожалуйста, посетите www. metasploit.com для получения дополнительной информации)

CVE является зарегистрированным товарным знаком корпорации MITRE, а официальным источником содержания CVE является CVE-сайт MITRE. CWE является зарегистрированным товарным знаком корпорации MITRE, а официальным источником контента CWE является Веб-сайт CWE MITRE. OVAL является зарегистрированным товарным знаком The MITRE Corporation, а официальным источником контента OVAL является Веб-сайт MITRE OVAL.

Использование этой информации означает согласие на использование в состоянии КАК ЕСТЬ. НИКАКИХ гарантий, подразумеваемых или иных, в отношении этой информации или ее использования. Любое использование этой информации осуществляется на риск пользователя. Пользователь несет ответственность за оценку точности, полноты или полезности любой информации, мнения, совета или другого контента. КАЖДЫЙ ПОЛЬЗОВАТЕЛЬ НЕСЕТ ЕДИНСТВЕННУЮ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБЫЕ последствия его или ее прямого или косвенного использования данного веб-сайта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *