Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Грабим формы!

Ms-Rem (Ms-Rem@yandex.ru)

Хакер, номер #082, стр. 082-110-2


Каждый элемент имеет строку, идентифицирующую его назначение (Content-Disposition) и одну или несколько строк собственно с данными. Так выглядит запрос, отправленный методом POST. Но содержимое форм может еще передаваться методом GET, при этом параметры передаются прямо в URL запроса. Подобный URL может выглядеть так: http://www.yandex.ru/yandsearch?rpt=rad&text=FormData. Я думаю, ты и сам сможешь понять, что этот запрос значит.

Рассмотрим теперь, что происходит при посылке запроса весьма популярным браузером Internel Explorer. Сначала данные вводятся в поля ввода браузера, при нажатии кнопки Submit происходит отправка этих данных в COM-объект Internet Explorer’а, который является движком браузера. Дальше в COM-объекте происходит формирование запроса и передача его в функциям HttpOpenRequest и HttpSendRequest (WinInet API). Эти функции собирают запрос окончательно и отправляют его через сокеты (send и recv в ws2_32.dll). Далее данные направленные на сокеты отправляются в ядро системы, где после обработки в стеке протоколов TCP/IP они отсылаются через сеть. С другими браузерами дело может обстоять несколько иначе, например они могут не пользоваться функциями WinInet API, а формировать запрос вручную. В любом случае они отправляют данные через сокеты.

Вернемся теперь к нашим баранам (точнее, к формграбберам). Для перехвата данных формы нам нужно вклиниться в описанный выше процесс на любой его стадии. Например, можно получить хэндл окна Internet Explorer, перечислить все дочерние окна, отобрать среди них те, которые нам нужны, и с помощью GetWindowText снять с каждого из них введенный текст. Этот метод применяется в некоторых троянах.

Можно вклиниться и на уровне COM-объекта, через его интерфейсы можно не только снифать посылаемые данные, но даже посылать свои. Этот метод используется в трояне Pinch для обхода файрволов. Недостаток тут только в громоздкости и неудобстве программирования COM-объектов.

Гораздо более перспективным мне кажется метод перехвата функций HttpOpenRequest и HttpSendRequest, так как он позволяет легко получать данные форф. Причем не просто получать, но и сразу же отправлять их, куда надо в обход файрволов. Функция HttpOpenRequest осуществляет открытие соединения, а HttpSendRequest - отсылку самого запроса. Рассмотрим их прототипы:

HINTERNET HttpOpenRequest(

HINTERNET hConnect,

LPCTSTR lpszVerb,

LPCTSTR lpszObjectName,

LPCTSTR lpszVersion,

LPCTSTR lpszReferer,

LPCTSTR* lpszAcceptTypes,

DWORD dwFlags,

DWORD_PTR dwContext

);

hConnect - хэндл открытого соединения.

lpszVerb - строка метода запроса (GET, POST, HEAD etc).

lpszObjectName – URL, к которому направляется запрос. В нем могут передаваться данные формы. Я думаю, ты уже разобрался с форматом этих данных из предыдущего описания.

Назад на стр. 082-110-1  Содержание  Вперед на стр. 082-110-3