Веб-приложения широко распространены в современном онлайн-мире, и умение атаковать их становится все более ценным навыком. Но ключом к успешной атаке является хорошая разведка, поскольку чем больше информации у вас есть, тем легче быть сосредоточенным и эффективным. Существует множество доступных инструментов снятия отпечатков пальцев, таких как httpprint и WebTech, но есть еще больше, которые могут помочь нам в разведке. Сегодня рассмотрим веб-приложения и серверы для успешных взломов.
Общие рамки и технологии
Прошли времена простых веб-сайтов с использованием HTML, CSS и ванильного JavaScript. Сегодня на рынке доминируют фреймворки, обеспечивающие надежный и модульный подход к современной веб-разработке. А с более сложными веб-приложениями приходит больше данных, поэтому сейчас существует больше типов баз данных, чем когда-либо. MySQL, SQL Server и Oracle все еще существуют, но набирают популярность новые игроки, такие как Redis, PostgreSQL и MongoDB.
Что касается фреймворков, то, возможно, они на основе JavaScript являются самыми популярными. React, Angular и Node продолжают широко использоваться, а также Meteor, Ember и Backbone. На арене PHP у вас есть Symfony, Cake и Laravel. Django и Flask — проверенные временем фреймворки, построенные на Python, и, конечно же, Microsoft ASP.NET и Ruby on Rails.
Netcat
Netcat — это популярный сетевой инструмент, используемый для устранения неполадок и связи через TCP/IP. Большинству хакеров сразу приходит на ум использование его для обратных оболочек, но его также можно использовать для отпечатков пальцев веб-серверов. Чтобы инициировать соединение, просто укажите хост и порт, к которому вы хотите подключиться:
~# nc google.com 80
█
GET / HTTP/1.1
Host: google.com
Теперь будет казаться, что ничего не произошло; мы должны выполнить команду, в данном случае запрос GET. Нажмите Enter и укажите хост.
GET / HTTP/1.1
Host: google.com
Дважды нажмите Enter, и мы должны увидеть ответ:
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 May 2021 15:57:50 GMT
Expires: Wed, 03 Jun 2021 15:57:50 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
...
Мы видим, что это перенаправление 301 (поскольку Google использует HTTPS), но мы также можем видеть тип сервера и некоторую информацию заголовка
.WhatWeb
Следующим инструментом, который мы будем использовать для снятия отпечатков пальцев, является WhatWeb, сканер, специально разработанный для сбора информации о веб-приложении или сервере. Введите whatweb в терминале, чтобы вызвать справку:
~# whatweb
.$$$ $. .$$$ $.
$$$$ $$. .$$$ $$$ .$$$$$$. .$$$$$$$$$$. $$$$ $$. .$$$$$$$. .$$$$$$.
$ $$ $$$ $ $$ $$$ $ $$$$$$. $$$$$ $$$$$$ $ $$ $$$ $ $$ $$ $ $$$$$$.
$ `$ $$$ $ `$ $$$ $ `$ $$$ $$' $ `$ `$$ $ `$ $$$ $ `$ $ `$ $$$'
$. $ $$$ $. $$$$$$ $. $$$$$$ `$ $. $ :' $. $ $$$ $. $$$$ $. $$$$$.
$::$ . $$$ $::$ $$$ $::$ $$$ $::$ $::$ . $$$ $::$ $::$ $$$$
$;;$ $$$ $$$ $;;$ $$$ $;;$ $$$ $;;$ $;;$ $$$ $$$ $;;$ $;;$ $$$$
$$$$$$ $$$$$ $$$$ $$$ $$$$ $$$ $$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$'
WhatWeb - Next generation web scanner version 0.5.1.
Developed by Andrew Horton (urbanadventurer) and Brendan Coles (bcoles)
Homepage: https://www.morningstarsecurity.com/research/whatweb
Usage: whatweb [options] <URLs>
<TARGETs> Enter URLs, hostnames, IP addresses, filenames or
IP ranges in CIDR, x.x.x-x, or x.x.x.x-x.x.x.x
format.
--input-file=FILE, -i Read targets from a file.
--aggression, -a=LEVEL Set the aggression level. Default: 1.
1. Stealthy Makes one HTTP request per target and also
follows redirects.
3. Aggressive If a level 1 plugin is matched, additional
requests will be made.
--list-plugins, -l List all plugins.
--info-plugins, -I=[SEARCH] List all plugins with detailed information.
Optionally search with a keyword.
--verbose, -v Verbose output includes plugin descriptions.
Note: This is the short usage help. For the complete usage help use -h or --help.
Это дает нам базовое использование и несколько опций, достаточных для успешного использования инструмента. Более подробную справочную информацию можно просмотреть с помощью флага -h:
~# whatweb -h
.$$$ $. .$$$ $.
$$$$ $$. .$$$ $$$ .$$$$$$. .$$$$$$$$$$. $$$$ $$. .$$$$$$$. .$$$$$$.
$ $$ $$$ $ $$ $$$ $ $$$$$$. $$$$$ $$$$$$ $ $$ $$$ $ $$ $$ $ $$$$$$.
$ `$ $$$ $ `$ $$$ $ `$ $$$ $$' $ `$ `$$ $ `$ $$$ $ `$ $ `$ $$$'
$. $ $$$ $. $$$$$$ $. $$$$$$ `$ $. $ :' $. $ $$$ $. $$$$ $. $$$$$.
$::$ . $$$ $::$ $$$ $::$ $$$ $::$ $::$ . $$$ $::$ $::$ $$$$
$;;$ $$$ $$$ $;;$ $$$ $;;$ $$$ $;;$ $;;$ $$$ $$$ $;;$ $;;$ $$$$
$$$$$$ $$$$$ $$$$ $$$ $$$$ $$$ $$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$'
WhatWeb - Next generation web scanner version 0.5.1.
Developed by Andrew Horton (urbanadventurer) and Brendan Coles (bcoles).
Homepage: https://www.morningstarsecurity.com/research/whatweb
Usage: whatweb [options] <URLs>
TARGET SELECTION:
<TARGETs> Enter URLs, hostnames, IP addresses, filenames or
IP ranges in CIDR, x.x.x-x, or x.x.x.x-x.x.x.x
format.
--input-file=FILE, -i Read targets from a file. You can pipe
hostnames or URLs directly with -i /dev/stdin.
TARGET MODIFICATION:
--url-prefix Add a prefix to target URLs.
--url-suffix Add a suffix to target URLs.
--url-pattern Insert the targets into a URL.
e.g. example.com/%insert%/robots.txt
AGGRESSION:
The aggression level controls the trade-off between speed/stealth and
reliability.
--aggression, -a=LEVEL Set the aggression level. Default: 1.
1. Stealthy Makes one HTTP request per target and also
follows redirects.
3. Aggressive If a level 1 plugin is matched, additional
requests will be made.
4. Heavy Makes a lot of HTTP requests per target. URLs
from all plugins are attempted.
HTTP OPTIONS:
--user-agent, -U=AGENT Identify as AGENT instead of WhatWeb/0.5.1.
--header, -H Add an HTTP header. eg "Foo:Bar". Specifying a
default header will replace it. Specifying an
empty value, e.g. "User-Agent:" will remove it.
--follow-redirect=WHEN Control when to follow redirects. WHEN may be
`never', `http-only', `meta-only', `same-site',
or `always'. Default: always.
--max-redirects=NUM Maximum number of redirects. Default: 10.
...
EXAMPLE USAGE:
* Scan example.com.
./whatweb example.com
* Scan reddit.com slashdot.org with verbose plugin descriptions.
./whatweb -v reddit.com slashdot.org
* An aggressive scan of wired.com detects the exact version of WordPress.
./whatweb -a 3 www.wired.com
* Scan the local network quickly and suppress errors.
whatweb --no-errors 192.168.0.0/24
* Scan the local network for https websites.
whatweb --no-errors --url-prefix https:// 192.168.0.0/24
* Scan for crossdomain policies in the Alexa Top 1000.
./whatweb -i plugin-development/alexa-top-100.txt \
--url-suffix /crossdomain.xml -p crossdomain_xml
Теперь мы можем увидеть более подробные параметры и еще несколько примеров использования. Самый простой способ запустить WhatWeb — предоставить хост для сканирования:
~# whatweb google.com
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
http://google.com [301 Moved Permanently] Country[UNITED STATES][US], HTTPServer[gws], IP[172.217.6.14], RedirectLocation[http://www.google.com/], Title[301 Moved], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
http://www.google.com/ [200 OK] Cookies[1P_JAR,NID], Country[UNITED STATES][US], HTML5, HTTPServer[gws], HttpOnly[NID], IP[172.217.4.36], Script, Title[Google], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
Он выдает пару ошибок (которые можно игнорировать) и выдает некоторую информацию о веб-сервере, включая коды состояния HTTP, информацию о файлах cookie и IP-адрес. Это, безусловно, полезно, но вывод немного сложно читать — мы можем использовать опцию -v, чтобы получить подробный вывод в формате, который намного приятнее для глаз:
~# whatweb google.com -v
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
WhatWeb report for http://google.com
Status : 301 Moved Permanently
Title : 301 Moved
IP : 172.217.6.14
Country : UNITED STATES, US
Summary : X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0], RedirectLocation[http://www.google.com/], HTTPServer[gws]
Detected Plugins:
[ HTTPServer ]
HTTP server header string. This plugin also attempts to
identify the operating system from the server header.
String : gws (from server string)
[ RedirectLocation ]
HTTP Server string location. used with http-status 301 and
302
String : http://www.google.com/ (from location)
[ X-Frame-Options ]
This plugin retrieves the X-Frame-Options value from the
HTTP header. - More Info:
http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29.
aspx
String : SAMEORIGIN
[ X-XSS-Protection ]
This plugin retrieves the X-XSS-Protection value from the
HTTP header. - More Info:
http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29.
aspx
String : 0
HTTP Headers:
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 04 May 2021 16:09:45 GMT
Expires: Wed, 03 Jun 2021 16:09:45 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Connection: close
WhatWeb report for http://www.google.com/
Status : 200 OK
Title : Google
IP : 172.217.4.36
Country : UNITED STATES, US
Summary : X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0], Cookies[1P_JAR,NID], HttpOnly[NID], Script, HTML5, HTTPServer[gws]
Detected Plugins:
[ Cookies ]
Display the names of cookies in the HTTP headers. The
values are not returned to save on space.
String : 1P_JAR
String : NID
[ HTML5 ]
HTML version 5, detected by the doctype declaration
[ HTTPServer ]
HTTP server header string. This plugin also attempts to
identify the operating system from the server header.
String : gws (from server string)
[ HttpOnly ]
If the HttpOnly flag is included in the HTTP set-cookie
response header and the browser supports it then the cookie
cannot be accessed through client side script - More Info:
http://en.wikipedia.org/wiki/HTTP_cookie
String : NID
[ Script ]
This plugin detects instances of script HTML elements and
returns the script language/type.
[ X-Frame-Options ]
This plugin retrieves the X-Frame-Options value from the
HTTP header. - More Info:
http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29.
aspx
String : SAMEORIGIN
[ X-XSS-Protection ]
This plugin retrieves the X-XSS-Protection value from the
HTTP header. - More Info:
http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29.
aspx
String : 0
HTTP Headers:
HTTP/1.1 200 OK
Date: Mon, 04 May 2021 16:09:47 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Content-Encoding: gzip
Server: gws
Content-Length: 5762
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2021-05-04-16; expires=Wed, 03-Jun-2021 16:09:47 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=203=fEPs6hoaoVclld1HAxHMHF2N4gT5yNy6kBVL-abAzpg1fqqB4Yk4PJGOgdveogjY_ThytkYwmmLc4oVHA95jaQRujiByZ96QiPkheajk5hkPzL1LZyCF5kX_L3uHnLi9H9JpbEYk6FrjPNWMIOZjANYd7fpPaAj1emJPDwc-Clk; expires=Tue, 03-Nov-2021 16:09:47 GMT; path=/; domain=.google.com; HttpOnly
Connection: close
Этот вывод не только более подробен и удобен для чтения, но и более полезен при использовании в скрипте. Мы также можем сохранить вывод в файл. Чтобы записать более короткий вывод, используйте параметр —log-brief, за которым следует имя файла для записи:
~# whatweb google.com --log-brief brief.txt
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
http://google.com [301 Moved Permanently] Country[UNITED STATES][US], HTTPServer[gws], IP[172.217.8.174], RedirectLocation[http://www.google.com/], Title[301 Moved], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
http://www.google.com/ [200 OK] Cookies[1P_JAR,NID], Country[UNITED STATES][US], HTML5, HTTPServer[gws], HttpOnly[NID], IP[172.217.4.36], Script, Title[Google], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
И чтобы записать подробный вывод, используйте параметр —log-verbose:
~# whatweb google.com --log-verbose verbose.txt
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
http://google.com [301 Moved Permanently] Country[UNITED STATES][US], HTTPServer[gws], IP[172.217.6.14], RedirectLocation[http://www.google.com/], Title[301 Moved], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
http://www.google.com/ [200 OK] Cookies[1P_JAR,NID], Country[UNITED STATES][US], HTML5, HTTPServer[gws], HttpOnly[NID], IP[172.217.4.36], Script, Title[Google], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[0]
Wappalyzer
Следующий метод снятия отпечатков пальцев, который мы будем использовать, — это Wappalyzer, расширение для браузера, которое определяет технологии, используемые веб-сайтом, когда вы посещаете страницу. Это чрезвычайно простой способ собрать информацию о цели при ручном перечислении веб-страниц.
Чтобы получить Wappalyzer, перейдите к диспетчеру расширений в Firefox и найдите его в строке поиска:
Далее нажмите кнопку «Добавить в Firefox»:
И примите требования разрешения:
Появится всплывающее уведомление, подтверждающее, что Wappalyzer был добавлен в Firefox — обязательно установите флажок «Разрешить запуск этого расширения в приватных окнах»:
Теперь, когда он успешно установлен, он перенаправляет нас на домашнюю страницу Wappalyzer. Теперь вы заметите новый значок в правой части строки URL:
Когда мы просматриваем веб-сайт, мы можем щелкнуть этот значок, чтобы отобразить информацию о веб-странице и сервере:
В сети
Последний метод, который мы будем использовать для отпечаток пальца веб-приложений и серверов, пожалуй, самый простой — мы можем сделать это полностью онлайн. Все, что нам нужно сделать на этих сайтах, это предоставить веб-сайт или хост, и все используемые технологии и фреймворки будут определены.
Первый сайт, который мы будем использовать, — это BuiltWith:
Просто введите цель, и она создаст для нас технологический профиль:
Прокрутив вниз, мы можем увидеть некоторые из используемых технологий:
Следующим сайтом для снятия отпечатков пальцев, который мы рассмотрим, является W3Techs:
Опять же, просто введите URL-адрес, и он даст нам обзор используемых веб-технологий:
W3Techs даже включает некоторую статистику местоположения посетителей, и если мы прокрутим вниз, мы увидим более подробную информацию:
Заключение
Сегодня мы узнали о некоторых популярных веб-технологиях и фреймворках, а также о том, как снять с них отпечатки пальцев, чтобы помочь в разведке. Сначала мы использовали Netcat для подключения по HTTP и получения информации о сервере. Затем мы изучили WhatWeb, инструмент, специально разработанный для снятия отпечатков пальцев. После этого мы рассмотрели некоторые онлайн-варианты, в том числе расширение для браузера Wappalyzer и пару сайтов, автоматически идентифицирующих веб-технологии.