Защита от хакеров корпоративных сетей - страница 103

Шрифт
Интервал


>getpid() = 9271

>brk(0) = 0x804b160

>brk(0x804b198) = 0x804b198

>brk(0x804c000) = 0x804c000

>open(“/usr/share/locale/locale.alias”, O_RDONLY) = 4

>fstat64(0x4, 0xbfffb79c) = -1 ENOSYS (Function not

>implemented)

>fstat(4, {st_mode=S_IFREG|0644, st_size=2265, ...}) = 0

>old_mmap(NULL, 4096, PROT_READ|PROT_WRITE,

>MAP_PRIVATE|MAP_ANONYMOUS, – 1, 0) = 0x40015000

>read(4, “# Locale name alias data base.\n#”..., 4096) = 2265

>read(4, “”, 4096) = 0

>close(4) = 0

>munmap(0x40015000, 4096) = 0


Если в программе встречается вызов функции setlocale, то libc читает локализованную информацию (информацию о местной специфике) для определения формата отображения чисел, даты, времени и т. д. Напомним, что хотя стандартные разрешения не позволяют модифицировать файлы локализации непривилегированным пользователям, но их достаточно для чтения этих файлов. Добавим, что разрешения файлов обычно печатаются при выводе информации о каждом вызове fstat (например, в приведенном примере 0644). Это позволяет легко визуально отследить неверные разрешения. Если ищется файл локализации, в который предполагается записать информацию, будьте осторожны, чтобы при записи не получить ошибки переполнения буфера. Третий (косвенный) параметр в списке входных параметров – файлы локализации.


>open(“/usr/share/i18n/locale.alias”, O_RDONLY) = -1 ENOENT

>(No such file or directory)

>open(“/usr/share/locale/en_US/LC_MESSAGES”, O_RDONLY) = 4

>fstat(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

>close(4) = 0

>open(“/usr/share/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES”,

>O_RDONLY) = 4

>fstat(4, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0

>old_mmap(NULL, 44, PROT_READ, MAP_PRIVATE, 4, 0)

>= 0x40015000

>close(4) = 0

>open(“/usr/share/locale/en_US/LC_MONETARY”, O_RDONLY) = 4

>fstat(4, {st_mode=S_IFREG|0644, st_size=93, ...}) = 0

>old_mmap(NULL, 93, PROT_READ, MAP_PRIVATE, 4, 0)

>= 0x40016000

>close(4) = 0

>open(“/usr/share/locale/en_US/LC_COLLATE”, O_RDONLY) = 4

>fstat(4, {st_mode=S_IFREG|0644, st_size=29970, ...}) = 0

>old_mmap(NULL, 29970, PROT_READ, MAP_PRIVATE, 4, 0)

>= 0x4010e000

>close(4) = 0

>brk(0x804d000) = 0x804d000

>open(“/usr/share/locale/en_US/LC_TIME”, O_RDONLY) = 4

>fstat(4, {st_mode=S_IFREG|0644, st_size=508, ...}) = 0

>old_mmap(NULL, 508, PROT_READ, MAP_PRIVATE, 4, 0)

>= 0x40017000

>close(4) = 0

>open(“/usr/share/locale/en_US/LC_NUMERIC”, O_RDONLY) = 4