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

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

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

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


Пишем простой формграббер

Что такое формграббер? Это программа, которая перехватывает и сохраняет данные, вводимые в формах в браузере. Используются такие программы в основном для перехвата паролей/номеров кредитных карт (или любых других данных) вводимых на сайтах. Конечно, для этой цели можно использовать кейлогер, но разбирать его километровые логи может быть неудобно, поэтому нужна узкоспециализированная система для перехвата исключительно форм. Как такую штуку написать ты можешь узнать в этой статье.

Что такое вводимая в браузере форма? В каком виде она отправляется по сети? Какие функции при этом вызываются? Прежде чем писать формграббер мы должны ответить на все эти вопросы.

Обмен данными между браузером и веб-сервером происходит по протоколу HTTP. HTTP запрос в общем виде состоит из метода запроса, его заголовков и тела запроса. Например, простейший запрос на получение странички может выглядеть так:

GET /index.htm HTTP/1.1

Host: www.nifiga.net

Connection: close

В данном случае методом запроса является GET, после которого идет краткий URL запроса и протокол (HTTP 1.1). URL может быть представлен как в кратком (/index.htm), так и в полном (www.nifiga.net/index.htm) виде. Все что ниже является заголовками запроса. Например, заголовок Host содержит адрес сервера, к которому будет направлен запрос. Имя и параметры заголовка запроса всегда разделены двоеточием. Заголовок запроса отделен от тела запроса двумя переводами строки (0D0A).

Рассмотрим теперь передачу по сети данных введенных в форму. В этом случае запрос будет подобен этому:

POST http://192.168.0.58/dragon/?.goods.save_goods HTTP/1.1

Referer: http://192.168.0.58/dragon/?.goods.form_edit_goods&category_id=121

Content-Type: multipart/form-data; boundary=---------------------------7d534bae9d6

Connection: Close

Host: 192.168.0.58

Content-Length: 1024

Cookie: dragon_cookie_index=yes; dragon_cookie_goods=yes

Authorization: Basic Z29sZDp4YXZhRkQz

-----------------------------7d534bae09d6

Content-Disposition: form-data; name="goods[goodsId]"'

Data

-----------------------------7d534bae09d6

Content-Disposition: form-data; name="goods[goodsName]"'

Name

Content-Disposition: form-data; name="goods[goodsDescription]"'

Description

Этот запрос достаточно сложен, хотя из него выброшены все необязательные для понимания принципа работы заголовки, попробуем разобраться в назначении каждой его части. От предыдущего запроса он отличается в первую очередь методом: POST вместо GET. Это означает, что идет запрос не на получение, а на отправку данных. В заголовке запроса присутствует поле Referer, оно определяет страницу, с которой был отправлен запрос. Это очень важная информация, и в формграббере ее нужно обязательно сохранять. Присутствует также поле Content-Type которое определяет тип содержимого запроса. Тип form-data означает, что передаются данные формы, а boundary - строка разделитель полей формы. Поле Cookie содержит посылаемые браузером куки. В них могут храниться авторизационные данные, поэтому содержимое этого поля нас может интересовать. Поле Authorization содержит строку http-авторизации, эти данные также могут представлять для нас интерес. На этом заголовок запроса заканчивается, идет два перевода строки, и начинается тело запроса. Элементы тела запроса разделены между собой строкой, которая передавалась в boundary заголовка запроса.

Содержание  Вперед на стр. 082-110-2