{ User-Agent... 007? }

 
 

 User-Agent – это больше чем просто название вашего броузера. Сегодня мы поговорим об этом замечательном поле протокола HTTP. На самом деле это поле несколько более полезно, чем вам может показаться на первый взгляд. Мы рассмотрим два интересных момента относительно этого поля.

Момент первый. Обход авторизации на сайтах.

Все на большем количестве сайтов требуется регистрация или даже плата, для получения полного доступа к их контенту. Но заметьте – поисковик Google знает об их контенте, без регистрации и платы! Да и не только Google. В чем секрет? Почему обычные пользователи должны регистрироваться, или платить за то, что поисковый гугл бот получает за так? Причина этого проста: каждый сайт хочет использовать поисковые системы для увеличения посещаемости, а для этого боты этих поисковых систем должны иметь доступ к информации, которая может заинтересовать пользователей.
Многие сайты при их посещении проверяют, какой браузер у клиента. Это делается довольно просто – при заходе на страницу браузер передает на сервер свое имя, в виде небольшой текстовой строки (см. примеры в конце абзаца). Получить эту строку довольно просто, вот пример из скрипта на perl:

my $browser=$ENV{'HTTP_USER_AGENT'};# - строка содержит название браузера
Так вот, если клиент идентифицируется сайтом как, к примеру, поисковый бот google, то его пропускают без регистрации и платы во все разделы (за исключением описанных в файле robots.txt – но это учитывает сам бот (или не учитывает :-)))). Ну или почти во все…
А если клиент идентифицируется как Мозила, IE, Opera или еще что-нибудь, то с него требуют регистрацию, плату, признание их лицензий и т.п
Что делать? И кто виноват? Известный русский вопрос… Кто виноват? Виновата жажда денег, и это не исправить, но так как жажда халявы также сильна в людях, то мы будем прикидываться google ботами, и все.
Для того чтобы это сделать можно использовать одну из этих программ:

1. Для IE - WinGuides Tweak Manager
2. Для Firefox/Mozilla User Agent Switcher

Для тестирования вам очень подойдут сайты http://www.winnetmag.com/ и http://www.nature.com/.
Также для доказательства правдивости моих слов попробуйте сделать следующее:
1) Отправляйтесь по линку: http://www.windowsitpro.com/
И вы не увидите полных статей, но…
2) Смените user-agent’а на Googlebot/2.1 и вернитесь на сайт…
3) Вы получите полный доступ к статьям
Резюме:
Естественно не все сайты подвержены данной уязвимости. Но если вы выбрали на своем сайте данную методу, то как, спросите вы защититься? Самый простой и лежащий на поверхности способ, это отследить IP-адреса с которых заходит google-bot, и в дальнейшем отслеживать принадлежность клиента к данному IP-адресу, либо к подсети адресов. Это значительно умерит пыл любителям халявы.

Ну и на последок – список user-agent строк браузеров и ботов:

Browsers:
Internet Explorer 5.5 on Windows 2000: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Internet Explorer 6.0 in MSN on Windows 98: Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)
Internet Explorer 6.0 on Windows XP: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Internet Explorer 7.0 beta running on Windows Longhorn: Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
Internet Explorer 5.2 on Mac OS X: Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)
Konqueror 3.1 (French): Mozilla/5.0 (compatible; Konqueror/3.1; Linux 2.4.22-10mdk; X11; i686; fr, fr_FR)
Mozilla 1.7.8 on Linux: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050511
Mozilla Firefox 1.0.4 on Windows XP: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Mozilla Firefox 1.0.4 on Ubuntu Linux, on AMD64: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.6) Gecko/20050512 Firefox
Mozilla Firefox 1.0.4 on FreeBSD 5.4 on i386: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.8) Gecko/20050609 Firefox/1.0.4
Netscape 4.8 on Windows 2000: Mozilla/4.8 [en] (Windows NT 5.0; U)
Netscape 7 on Sun Solaris 8: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.0.1) Gecko/20020920 Netscape/7.0
Netscape 8.0.1 on Windows XP using Gecko: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20050519
Netscape 8.0.1 on Windows XP using MSHTML (with .NET installed) : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1
Opera 6.03 on Windows 2000, cloaked as MSIE: Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.03 [en]
Opera 7.23 on Windows 98: Opera/7.23 (Windows 98; U) [en]
Opera 8.00 on Windows XP: Opera/8.00 (Windows NT 5.1; U; en)
Opera 8.00 on Gentoo Linux: Opera/8.0 (X11; Linux i686; U; cs)
Safari v125 on Mac OS X: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125
Safari v125 on Mac OS X, cloaked as MSIE: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)
ELinks 0.4pre5 on Linux: ELinks (0.4pre5; Linux 2.4.27 i686; 80x25)
Links 0.99pre14 under Cygwin on Windows 2000: Links (0.99pre14; CYGWIN_NT-5.0 1.5.16(0.128/4/2) i686; 80x25)
Links 2.1pre17 under Gentoo Linux: Links (2.1pre17; Linux 2.6.11-gentoo-r8 i686; 80x24)
Lynx 2.8.4rel.1 on Linux: Lynx/2.8.4rel.1 libwww-FM/2.14
Off By One 3.5a on Windows XP: Mozilla/4.7 (compatible; OffByOne; Windows 2000)
w3m on FreeBSD: w3m/0.5.1
Bots:
Crawler for Ask Jeeves/Teoma: Mozilla/2.0 (compatible; Ask Jeeves/Teoma) 
 cURL: curl/7.13.1 (powerpc-apple-darwin8.0) libcurl/7.13.1 OpenSSL/0.9.7b zlib/1.2.2
 Googlebot: Googlebot/2.1 (+http://www.google.com/bot.html)

Момент второй. XSS и SQL инъекции.

Да, через строку User-Agent можно попробовать исполнить XSS, или даже SQL-инъекцию. И это не теория. Хотя для начала и она не помешает.
Многие системы сбора статистики о посетителях, собирают информацию и о том какой клиент (браузер) использует посетитель. В некоторых из этих систем (зачастую они встроены во всевозможные движки) можно обнаружить уязвимости, типа XSS, Code или SQL-инъекцию, или раскрытие путей. Для подобного обнаружения вы можете использовать скрипты на Perl, Php, или специальные программы описанные мной выше (в том числе программу Achilles).
Вот здесь, к примеру, описывается уязвимость такого типа в движке YaBB.

К вашему вниманию (для advanced) прилагаю к статье скрипт на perl предоставленный мне said'ом. Скрипт является простейшим прокси-срвером, который контролирует поле User-Agent, и немного модифицировав его вы сможете подставлять в поле User-Agent нужные вам данные. На этом я раскланиваюсь. Думаю, тему для размышления я вам дал, что, в общем-то, и требовалось.


 
  PoizOn