книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_shell_код_Фостер_Дж_
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
Часто задаваемые вопросы 737 |
|
to |
|
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
-x cha |
|
|
|
||||||
|
|
|
|
-xchþòñÿa |
«дыры» в любых приложениях, работающих на базе Web-сервера. На- |
|
|
e |
|
||||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
пример, мы относим к этой категории ошибку, связанную с несанкционированным раскрытием информации в сценарии Gabriel.cgi.
Â: Не будет ли утилита, описанная в этой главе, давать огромное число ложных срабатываний?
Î: Да, рассмотренная утилита хороша ровно настолько, насколько хороши данные в используемой ей базе. Почти во всех случаях, анализируется лишь, получен ли ответ 200 OK по протоколу HTTP.
Â: Как можно свести к минимуму число ложных срабатываний сканера? Î: Есть два пути. Во-первых, увеличить число полей в сигнатуре, чтобы можно было более точно анализировать ответ. Во-вторых, повысить достоверность результатов работы программы можно, добавив модуль «предварительной проверки», который соберет информацию обо всех ответах целевой системы (HTTP-коды), в том числе об ошибочных запросах, перенесенных страницах и ограничении доступа. Затем нужно соотнести полученные результаты с ответами, содержащими код успеха. Такой прием позволит, например, исключить из рассмотрения серверы, которые на любой запрос возвращают ответ с кодом 200 OK. Мы планируем реализовать эту возможность во второй версии утилиты, ко-
торая будет также включать механизм искусственного интеллекта.
Â: Похоже, в большинстве сигнатур атак используется протокол HTTP 1.0. А почему не HTTP 1.1?
Î: В протокол HTTP 1.1 включено множество усовершенствований по сравнению с HTTP 1.0. Самое существенное состоит в том, что можно не закрывать HTTP-сессию, то есть посылать запросы и получать ответы, не устанавливая каждый раз новое соединение. В некоторых случаях это позволяет добиться повышения производительности. Однако в ситуации, когда полезная нагрузка может помешать работе целевой системы, протокол версии 1.0 подходит лучше.
Â: Чем SP-Rebel лучше Nikto?
Î: На данный момент только быстродействием. SP-Rebel написана на языке C++ и откомпилирована в Microsoft Visual Studio. В следующих версиях мы за счет этого планируем работать с пакетами на низком уровне и тем самым повысить общую скорость сканирования и выполнения.
Â: В этой главе практически ничего не сказано о технике хакерских атак через Web. Где можно получить информацию по этому поводу, чтобы усовершенствовать сканер или саму базу данных?
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
F |
|
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
P |
D |
|
|
|
|
|
|
|
|
o |
||
|
|
|
|
NOW! |
r |
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
738 Глава 14. Создание инструмента для проверки уязвимости Web приложения |
|
|
|
|
to |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
m |
|
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|
w Click |
|
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
. |
|
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
p |
df |
|
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
Î: Цель этой книги – не научить вас всему, что можно знать о безопасно--x cha |
|
|
|
|
|
сти и хакерстве, а дать достаточно информации для того, чтобы вы поняли, как и почему пишутся те или иные инструменты, и как они работают. О хакерстве в Web написано множество книг, в частности «Web Hacking, Web Applications (Hacking Exposed)», этой теме посвящено немало ресурсов, например сайт проектаOpen Web Application Security Project (OWASP).
Â: Можно ли использовать приведенный код в моем собственном сканере? Î: Разумеется, но с упоминанием исходных авторских прав и самих авторов: Джеймса Фостера (James C. Foster) и Майка Прайса (Mike Price). Используйте этот код, учитесь на нем, модифицируйте, при условии, что любые модификации будут открыты, общедоступны и отправлены нам, чтобы мы
могли включить их в следующие версии и упомянуть ваше имя.
Â: Почему сканер написан на C++, а не на C# или C?
Î: Вообще-то нет основательных причин, по которым его нельзя было бы написать на C#. Но мы только-только начали осваивать этот новый язык, так что на звание экспертов пока не претендуем... Что же касается C, то, как вы могли заметить, на этом языке написана значительная часть программы. Мы пользовались C++, потому что он позволяет, с одной стороны, писать на C, а, с другой, обладает достоинствами объектно-ориентированного языка (которые мы очень высоко ценим). Мы полагаем, что за счет реализации правильно выбранных классов наш код получился гораздо чище, и его легче использовать повторно.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
F |
|
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
P |
D |
|
|
|
|
|
|
|
|
o |
||
|
|
|
|
NOW! |
r |
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
740 Защита от взлома: сокеты, эксплойты и shell#код |
|
|
|
|
to |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
m |
|
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|
w Click |
|
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
. |
|
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
p |
df |
|
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
API (Aplication Program Interface – интерфейс прикладного программиро--x cha |
|
|
|
|
|
вания). Набор программных компонентов, которые разработчики могут использовать в своем коде.
Big endian. Один из двух способов упорядочивания байтов в слове, когда первым хранится старший байт. Примером системы с такой архитектурой является процессор SPARC.
DLL (Dynamic Link Library). Динамически связываемая и загружаемая библиотека, находящаяся обычно в файле с расширением .dll. В системах на платформе Win32 DLL – это программный компонент, содержащий функциональность, полезную другим программам. Применение DLL позволяет разбить код на более мелкие части, которые проще сопровождать, модифицировать и повторно использовать.
GDB. Отладчик GNU – это стандарт де факто в системах UNIX. Скачать его можно с сайта http://sources.redhat.com/gdb.
Java. Современный язык программирования, разработанный компанией Sun Microsystems в начале 1990-х годов. Сочетает синтаксис, аналогичный C и C++, с независимостью от платформы и автоматической сборкой мусора. Java-аплет – это небольшая программа на языке Java, которая работает в контексте Web-браузера и выполняет действия, которые невозможно реализовать с помощью статической HTML-разметки.
Little endian. Один из двух способов упорядочивания байтов в слове, когда первым хранится младший байт. Примерами систем с такой архитектурой являются все процессоры семейства x86.
malloc. Функция malloc выделяет указанное число байтов из кучи. Со способом ее реализации связано немало уязвимостей.
memset/memcpy. Функция memset заполняет переданный ей буфер указанного размера некоторым символом. Функция memcpy копирует заданное число байтов из одного буфера в другой. С неправильным применением этих функций связаны те же опасности, что и при употреблении strcpy.
NULL. Этим термином описывается переменная, которой еще не присвоено значение. В разных языках NULL определен по-разному, вовсе необязательно, что у него будет такое же значение, как у пустой строки или числа 0.
printf. Наиболее широко употребляемая функция из стандартной библиотеки LIBC. Предназначена для вывода данных в командных утилитах. Неправильное использование этой функции может представлять угрозу для безопасности – если не передать ей форматную строку, то не исключено возникновение уязвимости.