Ядовитый нулевой байт




96
Ядовитый нулевой байт
Рейтинг 10 из 10. Голосов: 1352
Ваша оценка:

 Отравленного NUL Байты первоначально был дублирован как таковой Олафа Кирха в должности в fa.linux.security группы новостей. Встраивая NULL-байты / символы в приложения, которые не обрабатывают должным образом постфиксные терминаторы NULL, злоумышленник может использовать систему, используя такие методы, как включение локальных файлов .

Эксплойт Poison Null Byte использует преимущества строк известной длины, которые могут содержать нулевые байты, и независимо от того, использует ли атакованный API-интерфейс строки с нулевым завершением. Помещая байт NULL в строку в определенный байт, строка заканчивается в этой точке, обнуляя оставшуюся часть строки, например расширение файла.

 

Строгость

Относительно высокий

Эксплойт Вероятность

умеренный

эксплуатация

Существует несколько способов использования эксплойта Poison Null Byte, включая следующие:

  • Завершение имени файла в строке, например, расширение файла.
  • Завершение или комментирование оператора SQL при динамическом выполнении, например, Oracle EXECUTE IMMEDIATE.

Perl PHP Null Byte Injection

rain.forest.puppy в выпуске Phrack 55 рассказал об использовании NUL Byte Injection в Perl и о том, как их можно использовать. Результаты были очень похожи в PHP.

Ниже приведен пример уязвимого PHP-скрипта с нулевым байтом:

$ file  =  $ _GET [ 'file' ] ; 
require_once ( "/ var / www / $ file .php" ) ;

Хотя приведенный выше сценарий защищен путем принудительного расширения файла «.php», его можно использовать следующим образом: 

http://www.example.com/index.php?file=../../etc/passwd%00

Вышеуказанное внедрение байтов NULL приведет к удалению обязательного расширения добавляемого файла (.php) и загрузке файла / etc / passwd.

Adobe PDF ActiveX Null Byte Attack

Использование уязвимости переполнения буфера в компоненте ActiveX, поставляемом с Acrobat / Acrobat Reader от Adobe Systems Inc., позволяет удаленным злоумышленникам выполнять произвольный код.

Проблема, в частности, возникает при получении ссылки в следующей форме:

GET /any_existing_dir/any_existing_pdf.pdf%00[long string] HTTP/1.1

Где [длинная строка] - это длинная строка, созданная вредоносным ПО, содержащая допустимые символы URI. Запрос должен быть отправлен на веб-сервер, который усекает запрос до нулевого байта (% 00), в противном случае указывается недопустимое имя файла и возвращается страница «файл не найден». Примеры веб-серверов, которые усекают запрошенный URI, включают Microsoft IIS и Netscape Enterprise. Хотя запрашиваемый URI усекается для целей поиска файла, длинная строка по-прежнему передается в компонент Adobe ActiveX, отвечающий за отображение страницы. Это, в свою очередь, вызывает переполнение буфера в RTLHeapFree (), позволяя злоумышленнику перезаписать произвольное слово в памяти. Ответственные инструкции от RTLHeapFree () показаны здесь:

0x44F83AE5  MOV  EAX , [ EDI + 8 ]     
0x44F83AE8  MOV  ECX , [ EDI + C ]     
...     
0x44F83AED  MOV  [ ECX ] , EAX

EDI регистра содержит указатель на предоставленную пользователем строку. Таким образом, злоумышленник контролирует регистры ECX и EAX, используемые в показанной инструкции MOV.

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

Злоумышленнику не нужно создавать вредоносный веб-сайт, так как его использование может происходить путем добавления вредоносного содержимого в конец любой встроенной ссылки и ссылки на любой веб-сервер Microsoft IIS или Netscape Enterprise. Нажатие на прямую вредоносную ссылку также не требуется, поскольку она может быть встроена в тег IMAGE, IFRAME или скрипт автозагрузки.

Успешная эксплуатация требует, чтобы полезная нагрузка была написана так, чтобы определенные области ввода были приемлемыми для URI. Это включает в себя начальные введенные инструкции, а также некоторые перезаписанные адреса. Это увеличивает сложность успешной эксплуатации. Хотя это не тривиально, эксплуатация определенно правдоподобна.

Java Null Byte Injection

В конце 2007 года Аршан Дабирсиаги провел ограниченное исследование, в котором описал инъекции нулевого байта в Java. Аршан обнаружил два метода, которые Java неправильно обрабатывает NULL-байт.

Следующий код был выделен на веб-сайте Arshan как уязвимый:

Строка path_to_file = запрос. getParameter ( "target" )  +  ".xls" ; 
Файл f =  новый  файл ( path_to_file ) ;  delivery_to_user ( contentsOf ( f ) ) ;

В аналогичном коде PHP / C / C ++ можно было бы быстро использовать печально известный нулевой байтовый ядр для просмотра любого произвольного файла в системе. Но это также работает в Java, потому что File (file_path) передает пользовательский ввод в open (1) или его эквивалент Windows, который написан на C.

См. Контрольный пример Аршана для получения дополнительной информации.

.NET Null Byte Injection

В нескольких разделах пространства имен .NET есть несколько функций .NET, которые уязвимы для атак Poison Null Byte. Когда .NET CLR не обрабатывает предоставленные пользователем нулевые байты должным образом, могут произойти успешные инъекции.

Нулевые байты рассматриваются как данные в .NET CLR, поэтому нулевые байты не заканчиваются в строках .NET. Однако строки в первом найденном нулевом байте завершаются в вызовах функций, которые являются собственными POSIX-совместимыми. Проблемы, связанные с совместимостью, возникают, когда данные, содержащиеся в нулевом байте, используются для непосредственного вызова собственной функции C через .NET.

Может быть сформирована удаленная атака, которая произвольно завершает параметр, который используется в уязвимом методе (методах), путем завершения вызовов нативных функций с введением нулевого байта.

Существует ряд известных функций .NET, которые уязвимы для нулевых байт-инъекций: 

Server.MapPath Server.Execute Server.Transfer String.Compare System.Net.Mail.SmtpMail.Send

Server.MapPath завершит любую возвращаемую строку, когда байт Null введен в параметре имени файла, таким образом обнуляя любые данные, добавленные к пользовательскому вводу.

Ниже приведен пример внедрения нулевого байта Server.MapPath, использованного Полом Крейгом в его оценке внедрения нулевого байта .NET :

Sub Page_Load ( ) 
       тусклое имя в качестве  строки 
       тусклого REALNAME как  строки имя =  запрос ( "имя" )  и  ".uploaded" RealName =  MapPath ( "" )  &  "\"  & имя ответ . написать ( "Mappath значение переменной name:"  &  MapPath ( name )  &  "<br>" ) 
       ответ ."Реальное значение:"  & realname &  "<br>" ) 
End  Sub

Если к переменной name добавляется нулевой байт (name = c: \ boot.ini% 00), строка завершается до объединения .uploaded.

 

Решения

PHP

Есть несколько способов предотвратить инъекции Poison Null Byte в PHP. К ним относится экранирование байта NULL с обратной косой чертой, однако наиболее рекомендуемый способ сделать это - полностью удалить байт с помощью кода, подобного следующему:

$ file  =  str_replace ( chr ( 0 ) ,  '' ,  $ string ) ;

Perl

Как и в PHP, в Perl есть несколько вариантов работы с NUL-инъекциями. Также как и в PHP, рекомендуется не экранировать байт, а полностью удалить его, используя код, подобный следующему:

$ data = ~ s / \ 0 // g ;

Adobe

Обновите Adobe до последней версии. Или измените настройки Adobe Acrobat / Acrobat Reader, чтобы файлы PDF не открывались автоматически при доступе через веб-браузер. При появлении запроса сначала сохраните файл на диск, прежде чем открывать, тем самым закрывая описанный вектор эксплуатации.

Это можно сделать, используя следующие шаги:

1. Open Adobe Acrobat/Acrobat Reader 2. Go to Edit --> Preferences 3. Uncheck the "Display PDF in browser" setting 4. Click OK

.NET

Проблемы .NET были исправлены следующими исправлениями:

KB928365 (Обновление безопасности для Microsoft .NET Framework 2.0)

KB928366 (Обновление безопасности для Microsoft .NET Framework 1.1)

Обратите внимание, что они не исправляют проблемы с нулевым байтом в каждом случае.


Вопросы и ответы


Оставить комментарий

ответить