Авторизация  
TEXHO

ВЕБ-ХАКИНГ.

В теме 1 сообщение

1t_jtZVDSLmjwxfmitihyw.png

 

На повестке дня три вопроса.

[*]Чем мы будем заниматься?

[*]Что мы получим в итоге?

[*]Какие начальные требования?

1. Мы будем учиться находить и эксплуатировать уязвимости в веб-приложениях.

 

2. В итоге вы будете уметь самостоятельно находить уязвимости, будете понимать как они устроены и сможете успешно их эксплуатировать на реальных площадках. Мы будем стремится к тому, чтобы вы не тратили впустую время на многократное перечитывание многократно переписанных статей, а сходу приступали к делу.

 

Проще говоря, вы врубитесь что к чему и в конце курса получите мощный пинок в нужное место и в нужном направлении.

 

3. Начальные требования.

Что нужно для прохождения курса? Браузер, denwer (или аналог).

Все остальное будет идти в комплекте либо будут даны ссылки на соответствующие ресурсы.

 

Предполагаю, что вы хотя бы шапочно знаете:

  • html, css, javascript
  • SQL
  • php
  • regexp
  • nix-системы
  • Tcp/Ip
  • http-протокол
  • Apache (базовая настройка, модуль mod_rewrite)

Если вам нужно освежить знания, я рекомендую следующие материалы:

 

html, css - Самоучители на htmlbook.ru (да и вообще, недостатка в материалах по html/css нет).

javascript - Самоучитель на learn.javascript.ru, Курсы Специалиста (specialist.ru) по javascript.

SQL - базовые знания даст книжка "SQL - 10 минут на урок".

RegExp - базовые знания даст книжка "Регулярные выражения - 10 минут на урок"

nix - базовые знания даст книжка "UNIX - 10 минут на урок"

php - Курсы Специалиста по php, уровень 1/2.

http, Apache - Курсы Специалиста "Веб-мастеринг", RFC 2616

 

Это теоретический минимум, необходимый для понимания уроков курса. Все перечисленные выше материалы легко усваиваются и их легко найти в инторнетах (торрентах и т.д.).

В связи с тем, что я не обещал 1000 шеллов в день и дохода в 10к $$$ в неделю, тот факт что вы дочитали до данного места, говорит о том, что у вас действительно есть шансы, чтобы чему-то научиться.

 

© r00t

 

Добавлено через 44 секунды

ВЕБ-ХАКИНГ.Сбор информации [1].

 

 

ap2LGGgMQkiTi15pKsx1JA.png

 

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

 

 

Пассивный сбор информации:

  • Узнаем IP
  • Whois
  • DNS
  • Сканируем порты
  • Хостинг
  • Reverse-IP
  • SEO-параметры
  • Разработчики
  • Контакты
  • Сотрудники
  • Вакансии
  • Конкурентная разведка
  • Веб-архив
  • Поисковые системы
  • Блек-листы

Пассивный сбор информации.

 

1. Узнаем IP. Тут все относительно просто. Запускаем консольку (Win+R, печатаем 'cmd', жмем Enter) и пишем всем знакомое:

 

zAem6htGQNOo1o0JVlP9Bg.png

 

(Пожалуйста, продолжайте читать, дальше все не настолько плохо))

Удобнее установить в браузер плагин, который будет сразу показывать IP сайта.

Подобные плагины можно найти практически под любой браузер.

 

elhLNx9wRFKHhGzNua8Q5w.png

 

В некоторых (крайне запущенных) случаях можно воспользоваться онлайн-сервисами:

Вполне может быть, что у ресурса IP не один, а сразу несколько:

 

24ll2UpyS8qWDt1EqjLDVw.png

 

Попробуйте, возможно это не будет лишним.

 

2. Whois. После того, как мы узнали IP адрес домена, воспользуемся сервисом whois, чтобы узнать немного дополнительной информации.

 

Ua-XP88_TZqiRyEpdJ7tLA.png

 

В данном случае мы воспользовались сервисом whoer.net. Мы увидели страну и провайдера, которому принадлежит IP адрес. Помимо этого, мы можем увидеть некоторые дополнительные данные:

 

xKoEa9knTTujRH__8ZYZrw.png

 

Очевидно, что IP принадлежит сервису CloudFlare, что в свою очередь значит, что реальный IP сайта от нас скрыт (можно воспользоваться сервисом http://exonapps.nl/cfresolver/).

Проделываем те же самые операции только для домена (данные везде от балды, не удивляйтесь, что ip cloudflare, a ns-сервера - хостер.ру).

 

JxlqMqy-RdqPmTDXCURrRQ.png

 

Мы можем увидеть ns-записи. Чаще всего они прямо указывают на хостинг сайта. Иногда - на проксирующий сервис. Иногда на сам домен, что позволяет заключить, что сайт находиться на выделенном сервере.

Легко найти сервисы для проверки whois:

Стоит добавить, что есть такой замечательный сервис - http://www.whoishistory.ru/. Благодаря ему, мы можем узнать, как изменялись данные whois (сейчас, например, почта вообще не показывается).

 

j3vaiO8_TVGcD1sE4WYQOg.png

 

У этого сервиса есть один минус - работает он только с доменами .ru, .su и .рф. Для буржуйских сайтов существует сервис http://www.domaintools.com/research/whois-history/, но он к сожалению платный. А для триала нужен картон...

 

3. Проверяем dns-записи. Существует большое количество самых разных видов DNS-записей (A, MX, NS, CNAME, SOA, SRV, PTR, RP, HINFO). Нам нужно узнать поддомены сайта - увеличить количество целей для атаки, и следовательно увеличить шансы взлома.

 

Чтобы узнать поддомены, можно воспользоваться запросом в гугл вида:

site:*.target.com

Все ссылки в выдаче будут вести на поддомены, не закрытые от индексации.

 

Но, чтобы получить все dns-записи, мы спросим все что нам надо у DNS-серверов. Есть такая штука, под названием передача зоны DNS (AXRF). Нужно это для того, чтобы DNS сервера поддерживали в актуальном состоянии свои базы (если вам нужны детали - википедия вас ждет с распростертыми объятьями). Т.е. отправили AXRF-запрос, получили все DNS-записи. В нормальном режиме это полезная штука, но когда DNS-сервер отвечает всем подряд без разбора, это уже несекьюрно.

Я не в курсе, что касается windows, но на *nix команда выглядит так:

dig -t AXFR target.com @ns.target.com

Разумеется есть и онлайн-сервисы:

В случае успеха, мы получаем все DNS-записи:

 

uGnc_sASTwOAka-p2L5rUA.png

 

Разумеется, это не всегда получится (не все dns-сервера отдают инфу кому попало), да и не у всех сайтов вообще есть поддомены. Если не получилось узнать с помощью AXRF, стоит воспользоваться брутфорсером поддоменов.

 

https://code.google.com/p/dns-discovery/

 

Аналогов не нашел, но при желании можно самому накодить подобный скрипт.

 

4. Сканируем порты. Получив большой список поддоменов, IP, мы натравливаем сканер портов, например nmap:

 

QPN1-ZezTo2o8jrKgVG-uA.png

 

И разумеется не только в дефолтном режиме (об этом напишем в других статьях).

Мы должны определить все открытые порты, сервисы, ОС.

Если нет желания палить собственный IP, или лень разбираться с nmap то можно воспользоваться сервисами:

Возможно найдется рабочий эксплоит под какой-то из сервисов/демонов, может быть сможем сбрутить ftp, ssh, rdp, и тогда даже не нужно будет возиться с веб-приложением. В любом случае — чем больше информации о цели, тем проще найти лазейку.

 

5. Хостинг.

 

Способы определения хостинга:

5.1. Домен третьего уровня (к примеру - target.freehosting.com, кто является хостером, очевидно).

5.2. Реклама на сайте. Частенько, фрихостинги пихают свою рекламу во все возможные места - popup, iframe, шапка, футер. В таком случае, определить хостинг не составляет труда.

5.3. 403/404. Пробуем открыть заведомо несуществующую страницу (вызвать ошибку 404). Или попытаемся вызвать ошибку 403 - пробуем зайти в папки /admin/, /images/ и т.д. Очень часто мы увидим заглушку от хостера.

5.4. index.html. При создании нового сайта в этом файле может находиться заглушка от хостера.

5.5. NS-записи. Изучая ns-записи, мы можем столкнуться с тремя ситуациями:

  • Сайт: target.com
    ns-записи: ns1.hosting.com, ns2.hosting.com
    Наиболее распространенный случай на shared хостингах. Хостингом является hosting.com.
  • Сайт: target.com
    ns-записи: ns1.target.com, ns2.target.com
    Владелец сайта использует свои собственные dns-сервера. Вероятно это VDS/DS.
  • Сайт: target.com
    ns-записи: ns1.freedns.com, ns2.freedns.com
    Владелец сайта использует сторонние dns-сервера. Вместо freedns.com может быть любой другой подобный сервис.

5.6. Проверяем данные по IP адресу. Смотрим на e-mail для контакта. Выглядят они как admin@superhost.com. Очевидно, что стоит смотреть на сайт superhost.com. Это может быть мыло как хостера, так и датацентра, где хостер арендует/держит серваки. В любом случае, хоть какая-то информация.

5.7. Заходим по IP адресу. Т.е. если Ip сайта - 123.123.23.23, мы вбиваем в браузере http://123.123.23.23/ и смотрим, что нам выдаст веб-сервер. У крупных хостеров стоит заглушка (по которой мы хостера резко и чотка опознаем). У мелких хостеров мы увидим либо вход в панель управления (ISP и подобные), либо один из сайтов, которые находятся на данном сервере.

5.8. Reverse DNS lookup. На линухе достаточно пингануть IP, на винде - использовать nslookup. Хостинг получается определить благодаря тому, что в PTR записях обычно используется название хостинга:

 

TlBu0VOiQc_SlmgE-L1AJA.png

 

Например тут видно, что хостер - webhost1.ru. Для получения тех же результатов можно воспользоваться одним из сервисов:

5.9. Traceroute. Воспользуемся штатной утилитой traceroute (в винде - tracert).

 

kpYTnsm4R5mbWJAIQJLdRg.png

 

Благодаря трассировке, мы узнаем не только хостера, но и дата-центр (в данном случае это hetzner.de) Ежели лень наша не знает границ, мы опять таки, воспользуемся онлайн-сервисами:

5.10. SMTP. Делаем коннект на 25 порт. Если там висит почтовый сервис, он нам сходу выдаст имя хоста (способ похож на предыдущие 2 - определяем хостинг по имени хоста).

Набираем:

telnet

o firststeps.ru 25

 

Видим:

 

MAbdma9oSx6Zi0ZCzqIWUw.png

 

Но, как и всегда, мы можем не напрягать свой мозг и использовать сервисы:

5.11. Спрашиваем у владельца. Это скорее уже активный сбор информации, но все же - можно просто спросить у владельца, что за хостинг он использует.

 

Проделав вышеописанные операции мы с вероятностью в 90% определим хостинг сайта. Исключение составят те случаи, когда IP сайта скрыт сервисами типа cloudflare или чем-то подобным.

 

Итак, что мы можем узнать, зная хостинг:

 

Виртуальный хостинг. Топаем на сайт хостера, изучаем сайт, изучаем форум, если он есть. Читаем FAQ. Можно даже оплатить аккаунт или взять тестовый, чтобы изучить хостинг вдоль и поперек. Смотрим, как происходит восстановление пароля, как происходит взаимодействие с техподдержкой. Работает ли ftp, ssh, что возможно сделать через панель хостера. Есть ли WAF. Какие настройки php (можно попросить показать вывод функции phpinfo()).

Узнаем, были ли взломы сайтов данного хостера. Если были, то как это происходило, есть ли дыры сейчас.

Если сайт находится на платформе типа ucoz, blogspot или подобных, то поиск уязвимостей на сайте равносилен поиску уязвимостей на самой платформе (что существенно усложняет задачу). Однако, есть плюс в том, что мы можем использовать методы социальной инженерии не только к владельцу сайта, но и к техподдержке хостинга.

VPS/VDS/DS. Если хостер так и не определен, то скорее всего мы имеем дело с выделенным сервером. В некоторых случаях это может быть арендованный сервер в дата-центре, может и домашний комп со белым IP, который не выключают сутками. Есть шанс, что админ выделенного сервера не настолько опытен, как админы крупных хостингов, и совершил ошибки при настройке сервера.

 

Данные phpinfo() на некоторых хостингах

 

Данные phpinfo() на некоторых хостингах:

Эта инфа выдрана с сайта hosting-ninja.ru (там чуть больше хостингов).

 

Наиболее интересны для нас следующие директивы php:

  • allow_url_fopen - поддержка оберток URL (URL wrappers), которые позволяют работать с объектами URL как с обычными файлами.
  • allow_url_include - возможность использования URL в функциях include, include_once, require, require_once (одно из основных условий для уязвимости RFI).
  • display_errors - опция отвечающая за отображение ошибок в выводе страницы, если отключена, то вы не увидите ничего вроде "Warning:....", "Deprecated:....", "Fatal error:....", "Parse error:....", либо пустой экран, либо вывод без ошибок (основное условие для уязвимости FPD).
  • expose_php - если включена, то в заголовках ответа можно узнать версию php
  • file_uploads - опция, разрешает/запрещает загрузку файлов на сервер, с помощью php (могут возникнуть сложности при заливке шелла).
  • magic_quotes_gpc - автоматическое экранирование кавычек, двойных кавычек, нулл-байта, обратного слеша обратным слешем в данных полученных из Get/Post/Cookie (могут возникнуть сложности при эксплуатации SQL-инъекций)
  • register_globals - уже редкость, чаще всего отключена. Если включена, то есть возможность передавать значения переменных через get, post, cookie.
  • safe_mode - безопасный режим. Много ограничений, включается запрет функций использования команд.
  • safe_mode_exec_dir - если включено, то можно запускать команды в пределах указанной директории (у недалеких админов бывает равно "/", что сводит на нет эту директиву).
  • disable_functions - Отключенные функции (чаще всего отключают функции выполнения команд).

6. Reverse-IP. На одном IP и на одном сервере может находится множество сайтов:

 

REqw5_ZlTv2uqqXGQWX5Jg.png

 

Не существует 100% способа узнать все сайты на одном IP. Онлайн сервисы позволяют находить сайты на одном IP только благодаря большим базам (парсят денно и нощно). Поэтому необходимо использовать максимальное кол-во сервисов reverse-ip:

Сайты меняют хостинг, домены дропаются, поэтому полученные данные надо обязательно перепроверять. Если IP-адреса сайтов совпадают, можно утверждать, что они находятся на одном сервере. В некоторых случаях сайты могут находится на одном сервере, даже если у них различается последний октет IP адреса - 121.1.1.1, 121.1.1.2, 121.1.1.3.

 

7. SEO-параметры.

Узнаем основные seo-параметры сайта:

1. Тиц. PR. Яндекс-каталог. DMOZ.

2. Беклинки

3. Внешние ссылки.

Получив все эти данные мы можем сделать несколько выводов.

Во-первых, мы узнаем, на какую примерную сумму можно рассчитывать, если продавать доступ к данному сайту(50 шекелей? 30? 10?).

Во-вторых, мы можем проверить совпадают ли IP беклинков и внешних ссылок с IP цели. Если есть совпадения, то мы можем предположить, что эти сайты находятся не только на одном сервере, но и на одном аккаунте хостинга. Это означает, что достаточно взломать всего 1 сайт и мы автоматом получим доступ к остальным (которые совпали).

Объясню прошлый абзац. Представьте, что есть фрилансер Феофан Крохоборов. Феофан делает сайты. И берет за них деньги. А чтобы заработать больше денег, Феофан размещает сайты своих клиентов на одном аккаунте хостинга (в итоге Феофану платят 10 человек по 100р в месяц за хостинг, а сам Феофан платит за хостинг 50р в месяц, выгода!) Только Феофан не осознает, что взломав даже 1 сайт из 10, подлый хацкер получит доступ и ко всем остальным 9. А вычислят Феофана легко - он везде ставит линк на основной сайт ("Сделано в студии Феофана КРохоборова"), а если он прочитал пару статей по SEO, то еще и перелинкует все ресурсы.

 

Если на сайте target.com используется счетчик liveinternet, то получить статистику можно по следующим ссылкам:

Если счетчиков нет, то можно попробовать определить кол-во трафика через AlexaRank. Это актуально для бурж сайтов.

 

8. Разработчики. Для успешного взлома, будет нелишним узнать кто создавал сайт. Методы относительно простые:

8.1. Смотрим футер сайта, ищем надпись, кровоточащую эгоизмом и завышенной самооценкой, что-то вроде "Элитарная студея разрабатывания сайтингов". Переходим на сайт, если линк активный, либо гуглим название.

8.2. Проверяем собранные беклинки. Есть ненулевой шанс, что изучаемый нами сайт находится в портфолио у какой-нибудь студии/фрилансера.

8.3. Проверяем мета-теги, комментарии. Ищем что-то в духе:

<meta name="author" content="Petroff Studio">

или:

<!-- super-site by artemka-diz.ru -->

8.4. Если прошлые способы не помогли, пробуем определить CMS сайта. Если нам повезло и на сайте явно используется что-то редкое и самописное, мы гуглим название CMS и пытаемся выйти на разработчика. Если сайт сделан на распространенном движке, то переходим к последнему способу.

8.5. Спросить владельца сайта. Ссым в уши, дескать, дизайн вашего сайта настолько великолепен, что мы не можем не спросить вас, кто же создал такое дивное чудо, достойное вершин поисковой выдачи и сотен тысяч WMZ. Нередки ситуации, когда создатель сайта == владелец сайта.

Когда нам становится известно, кто являлся разработчиком сайта, у нас появляется несколько лазеек:

  • Мы можем сделать заказ на разработку сайта (разумеется если CMS самописная) и получить исходники. Изучить их вдоль и поперек и найти все возможные дыры. Велик шанс, что в сайт вшит дефолтный пароль или бекдор.
  • В процессе общения, разработчику легко пихнуть троян и получить доступ к сохраненным логинам/паролям и исходникам.
  • Если общение с разработчиком неуместно или не дало результатов, мы будем ломать все сайты в портфолио (если это реально, разумеется). В случае успеха - скачиваем исходники и ищем уязвимости. И потом пробуем пароли со взломанного сайта к другим ресурсам в портфолио. Крайне эффективная методика.
  • Если совсем ничего не получилось, информацию о разработчике можно использовать для атаки с использованием социальной инженерии. Рассылаем по клиентам "свежее обновление", "патч", "заплатку", просим предоставить логин/пасс. Я уверен вы придумаете что-нибудь поинтересней.

9. Контакты. Достаточно мельком взглянуть на сайт, чтобы найти контакты:

 

2LOfVz03TX62NJ9V24-A7g.png

 

Нас интересует все. Телефоны, e-mail, skype, icq, jabber, facebook, linkedin, формы обратной связи, фактический адрес (снимок Google Earth со спутника добавит нотку экзотики). Каждый из контактов - возможная зацепка, возможный способ взлома.

 

10. Сотрудники. Если на сайте есть список сотрудников, то все становится еще веселее - атака с применением социальной инженерии будет особенно эффективной. Собирайте всю информацию по сотрудникам - адреса, контакты, дни рождения, аккаунты соцсетей, фотографии с работы (можно найти очень интересные данные). Если работаете по буржу, можете воспользоваться сервисами поиска:

  • pipl.com
  • people-search сервисы
  • people.yahoo.com
  • address.com
  • www.123people.com
  • zabasearch.com
  • wink.com
  • publicpeoplefinder.com
  • peoplefinders.com
  • peoplelookup.com

Обязательно ознакомьтесь с утилитой maltego - великолепная штука для сбора информации (хорошее описание есть тут - http://habrahabr.ru/post/73306/).

 

Фактически, чем больше в конторе сотрудников, тем больше шансов, что найдется долбоеб, готовый запустить crober_priv8_bootkit.exe, предварительно отключив антивирус и файрволл (и взлом сайта будет лишь приятным дополнением).

 

Хорошая иллюстрация вышесказанного:

 

IiF4jTovT0On0LxjKO7Cbw.png

 

11. Вакансии. Если фирма крупная, имеет смысл просматривать сайты с вакансиями.

 

Рунет:

Бурж:

Будет повод вступить в переписку, отправить троян или в конце концов устроиться на нормальную работу ("...и вынести все под ноль" (с) Не грози южному централу). Если вам повезло и вакансия IT-шного характера, можно выудить массу информации о настройках сервера, используемых фреймворках, получить тестовый доступ и т.д.

 

12 Конкурентная разведка. Она же бизнес-разведка или деловая разведка.

Если очень вкратце, то конкурентная разведка - это сбор всей доступной о цели информации из открытых источников (то бишь этично и благородно).

 

Если мы ломаем топовую фирму, работающую в высококонкурентной сфере, или крупную организацию (коммерческую, некоммерческую, государственную) то даже крупицы информации могут сыграть ключевую роль. Вместо тысячи слов - http://www.slideshare.net/SkillFactory/10-27807036

 

Разумеется, если цель - сайт вашей школы, то смело пропускайте этот пункт. Да и вообще, как вы до сюда дочитали? Тут нет ни читов, ни ддос-ботов, ни локеров...

 

13. Смотрим веб-архив. Заходим на интернет-архив(http://archive.org

/web/):

 

7tV2jPSCQDSVGjX4VUykiw.png

 

И смотрим, что было раньше с сайтом:

 

LBk5j5dmRBCqyNe79y0TGQ.png

 

Мы можем найти контакты, которые уже убрали с сайта, можем найти информацию об ошибках, узнать насколько давно меняли сайт. Если сайт не менялся очень давно, есть шанс, что система давно не патчилась, и у нас больше шансов найти уязвимости.

 

Вообще очень полезный инструмент во всех отношениях.

 

14. Поисковые системы. Если вам нужно изучить контент сайта, но не хочется следить в логах, можно изучить сохраненной копией страницы (к примеру в Google, но это фича доступна и для других поисковиков).

 

1-9GrpFVSL_8GmFDJpDg_w.png

 

Мы также можем найти ошибки и многое-многое другое. Если вам не знаком термин Google-hacking, то вот вам блиц курс:

 

1. Читаем ман https://support.google.com/websearch/

2. Используя полученные знания ищем инфу по всем операторам поиска Google.

3. Бонус. Гуглим про гугль-хакинг.

 

Используем Google-хакинг супротив нашей цели:

  • Поиск папок открытых на просмотр:
    site:target.com intitle:index.of
  • Поиск файлов с настройками:
    site:target.com ext:xml | ext:conf | ext:cnf | ext:reg | ext:inf | ext:rdp | ext:cfg | ext:txt | ext:ora | ext:ini
  • Поиск файлов с бекапами БД:
    site:target.com ext:sql | ext:dbf | ext:mdb
  • Поиск файлов с логами:
    site:target.com ext:log
  • Поиск бекапов:
  • site:target.com ext:bkf | ext:bkp | ext:bak | ext:old | ext:backup
  • Поиск админки:
    site:target.com inurl:login
  • Поиск ошибок, говорящих о SQL-инъекциях:
    site:target.com intext:"sql syntax near" | intext:"syntax error has occurred" | intext:"incorrect syntax near" | intext:"unexpected end of SQL command" | intext:"Warning: mysql_connect()" | intext:"Warning: mysql_query()" | intext:"Warning: pg_connect()"
  • Поиск документов:
    site:target.com ext:doc | ext:docx | ext:odt | ext:pdf | ext:rtf | ext:sxw | ext:psw | ext:ppt | ext:pptx | ext:pps | ext:csv
  • Поиск файла с phpinfo():
    site:target.com ext:php intitle:phpinfo "published by the PHP Group"

Еще больше дорков (дорк - это хитрый запрос для получения информации) тут - http://www.exploit-db.com/google-dorks/. Вообще в сссрнете по разному трактуют слово "dork", учитывая что простой перевод с английского дает черти-что ("мужлан", "придурок"), а судя из контекста, очень сложно дать единственно верную, точную формулировку.

 

Также ищем упоминания о сайте/фирме/проекте в сети. Не забываем гуглить найденные ранее контакты - возможно получится узнать что-то новое о ресурсе, подготовить почву для атаки методами соц.инженерии.

И не зацикливайтесь только на гугле, используйте все поисковики:

  • Google
  • Yandex
  • Bing
  • Yahoo
  • Shodan (!!!)
  • DuckDuckGo

Shodan - весьма непривычный поисковик. Всю мощь его можно оценить, вбив в поиск "default password" или "nuclear". Ищет не по контенту сайтов, а по http-заголовкам, IP, баннерам сервисов на разных портах и т.д. К сожалению без регистрации можно делать не более 10 запросов (прокси никто не отменял) и выдача серьезно ограничена. С регистрацией - 50.

 

q_BwjgXoRGuMNWStdLCC3w.png

 

15. Проверка на virustotal/blacklist's. Вполне может быть, что раньше сайт/сервер ломали. И можно найти что-то интересное. Заходим на вирустотал:

 

O7SELMMARB_gBqYzs6H70w.png

 

Выбираем "Найти". И вуаля:

 

JHPS9pf-Q5WmZtOTKyiSmg.png

 

Все уже поломано до нас. Если кто-то смог, то и мы сможем) А может и шелл до сих пор не удалили и пароль стоит по умолчанию...

Разумеется не стоит ограничиваться исключительно virustotal'ом.

 

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

 

В следующей части мы уже вплотную займемся веб-приложением.

 

© r00t

 

Добавлено через 1 минуту 4 секунды

ВЕБ-ХАКИНГ.Сбор информации [2].

 

a7JDhqFJTQW6_C-BeBC6jw.png

 

Информации на прошлом этапе было собрано достаточно. Теперь мы будем активно работать с сайтом. Много следить в логах, использовать кул-хацкерские программы, сканерочки, парсерки и прочие веселые программки.

 

Общая схема того, что мы будем делать на данном этапе такая:

 

7wsp_y70Tu20cimdpkDSpw.png

 

Ничего страшного, все довольно просто. Мы пойдем по списку:

  • Определение CMS
  • Определение тем, плагинов, модулей, компонентов
  • Поиск уязвимостей в CMS и плагинах
  • Сканирование директорий
  • Краулер
  • Обход mod_rewrite (и аналогов этого модуля)
  • Сбор параметров (Get, Post, Cookie, Headers)
  • Поиск и эксплуатацию уязвимостей оставим для следущих уроков, а пока мы занимаемся исключительно сбором информации.

Активный сбор информации.

 

1. Определение CMS. Пробуем определить используемую CMS (или CMSки, ведь никто не запрещает использовать несколько CMS на одном домене). Если используется распространенный движок, то определить это можно с вероятностью в 99%.

 

Если вам в лом самим определять CMS, можете воспользоваться сервисами:

Можно использовать плагин для браузера - wappalyzer.

Очень удобно, сразу видно движок, язык, js-фреймворки и т.д.:

 

9HuRZHw8SautojMJMFDBRA.png

 

Определяет больше двух сотен движков. Плагин не всегда работает точно. Например, попробуйте зайти с включенным плагином wappalayzer на эту страничку - /misc/crazywappalayzer.php Если вас интересует, как этот плагин определяет движки, посмотрите исходник:

https://github.com/ElbertF/Wappalyze...let/js/apps.js

Вы поймете, что анализируются:

  • http-заголовки (в том числе cookie)
  • meta-теги
  • подключаемые скрипты (<script src='blabla'>)
  • пути к файлам (картинкам, таблицам стилей и т.д.)
  • комментарии в html-коде
  • прочее (по регуляркам) в html-коде ("Powered by ...", "MegaSuperCMS")
  • URL (/index.php?showtopic=666 - явно сатанинский форум, /?p=1488 - нс-бложик)

Для точного определения CMS нужно также проверять:

 

robots.txt - в данном текстовике указаны папки и файлы которые нужно/не нужно индексировать. Файл либо лежит в корне сайта, либо его вообще нет. Выглядит примерно так:

 

OG-AS9NNTsiUdaTd0KcbgA.png

 

Наметанный глаз мигом определит WordPress. Ненаметанный метнется по адресу /wp-login.php и опять таки определит WordPress.

 

Админ-панель - Определить адрес админки можно внимательно изучив файл robots.txt или проверив все распространенные пути к админкам (руками или софтом - об этом чуть далее). К примеру, вход в админку Joomla!:

 

Rq-UUGb9RQGVDIwMOTcXZQ.png

Файлы и Папки. CMS можно определить по наличию/отсутствию некоторых файлов и папок. Например, в большинстве CMS есть файлы с названиями типа Changelog.htm, readme.txt, config.example и подобными. Скачиваем распространенные движки, изучаем структуру файлов и папок, пробуем найти интересные файлы/папки на изучаемом сайте.

Таким способом можно очень точно определить используемый движок и его версию.

 

Просто потренируйтесь - устанавливайте разные движки, ставьте разные шаблоны, плагины. После небольшой практики, вы сможете определять движок взглянув одним (прищуренным) глазом на главную страницу.

 

В результате, после выполнения всех вышеописанных проверок, возможны 3 варианта:

  • CMS определена, исходники можно изучить.
  • CMS определена, но нет возможности изучить исходники.
  • CMS не определена.

2. Определение тем/плагинов/модулей/компонентов. Если мы работаем с одной из распространненых CMS, то мы можем проверить еще и модули/плаигны. Для этого можно быстренько набыдлокодить свой убер-скрипт либо воспользоваться существующим софтом (к примеру для скана плагинов WP):

 

Ukcoy6o1QbGR4PLkOHDnRg.png

 

Разумеется, этот пункт относится только к популярным движкам (wp, joomla, drupal и подобным), а не студийным поделкам сумрачных гениев.

 

3. Ищем уязвимости в CMS. Первым делом идем на bug-трекеры. Чекаем CMS на сайтах:

Стоит особенно отметить 1337day (наследник милворма):

 

IHXncI0bS1e9RIO8xaMReA.png

 

И exploit-db:

 

GQrzDR06S-i-JUsnVafGzA.png

 

Если сплойт не пашет, то внимательно изучите исходник, есть шанс, что в сплойте допущена ошибка (по старой хэккерной традиции). Также очень часто бывает, что исходники движка нельзя найти, а сплойт под движок - легко.

 

Если ничего в паблике не нашлось, идем на страницы разработчиков и внимательно читаем changelog. Какие ошибки были исправлены, когда, обязательно обращаем внимание на патчи связанные с безопасностью.

 

4. Сканер директорий. После того как мы узнали CMS (или не узнали), мы натравливаем на сайт сканер директорий - DirBuster.

 

QFue5iPrQH2f2o4b2BywHw.png

 

DirBuster многопоточен, кроссплатформенен, красив и умен. Скачать можно по ссылке - http://sourceforge.net/projects/dirbuster/. Благодаря сканеру директорий, мы можем найти:

  • WYSIWIG-редакторы
  • файловые менеджеры
  • phpmyadmin (и аналоги)
  • скрипты статистики
  • старые версии скриптов (index.php.old и т.д.)
  • бекапы
  • многое другое

Обыкновенно, сторонние скрипты подключают "as is", не беспокоясь о возможных уязвимостях. В общем никогда не забывайте пользоваться сканером директорий, даже если CMS определена и плагины успешно найдены. Может быть в забытой кодерами папке "/upload_old/new1/new11/new1111/old/upload.php" вас ждет форма заливки файлов без проверки на расширения и прочие условности.

 

5. Сбор параметров. После того как мы просканировали директории и файлы, необходимо узнать все точки входа.

 

Образно говоря, если бы мы грабили квартиру, то сначала проверили бы все двери, окна, замки, затем выбрали самую уязвимую цель (открытая форточка, фанерная дверь, китайский замок), затем мы бы начали использовать отмычки(или другой инструмент), чтобы попасть внутрь.

 

В хаке сайтов все то же самое - находим все точки входа в приложение (Get, post, cookie, заголовки приложения), затем ищем уязвимые параметры и пытаемся их экплуатировать (только если домушник пихает отмычки в замок, мы пихаем кавычки и скобки в формочки или строку браузера).

 

Для автоматизированного сбора страниц прекрасно подойдет Burp Suite (шикарная утилита, с которой вы скоро не будете расставаться).

В обязательном порядке установите и ознакомьтесь со справкой. Это настоящий швейцарский нож для веб-приложений. И одна из его возможностей как раз позволяет собрать все страницы и все формы с сайта:

 

sbozkWrDTI2Z2_27G8bBnw.png

 

Запускаем спайдер, и он парсит все страницы со скоростью бешеной курицы, с горящими перьями.

 

Но не стоит скидывать со счетов и ручной анализ.

 

6. Обход mod_rewrite. Сейчас все повернулись на всяких seo-фишках. И многие юзают mod_rewrite (и подобные вещи), что сделать из некрасивой ссылки вида:

http://www.target.com/index.php?id=8...id=87&order=11

Получать такие ссылки:

http://www.target.com/content/8787/

К счастью, у нас не будет возникать проблем со сбором Post и Сookie параметров. Итак, чтобы обойти ЧПУ (человеко-подобный урл) нам нужно:

1. Узнать имя скрипта.

2. Узнать параметры скрипта.

3. Узнать принимаемые параметром значения.

 

Я бы конечно с радостью расписал все что нужно делать, но лучше всего написали тут - http://www.securitylab.ru/analytics/399778.php. Правда скрипт, упоминаемый в статье, уже удалили или перенесли. Но мы его заботливо сохранили для будущих поколений:

 

Code:
<?php// defines    ini_set('max_execution_time', 0);   $charset = Array(  'a','b','c','d','e',  'f','g','h','i','j',  'k','l','m','n','o',  'p','q','r','s','t',  'u','v','w','x','y',  'z','-','_');  $wordlist = Array();  $param_file = './params.txt';  $separator = '_';  $words = Array();  $maxlen = $_GET['length'];  $def_length=0;  $site = $_GET['url'];  $count = 0;  $type = $_GET['type'];  $symbol = $_GET['sym'];  $arr = $_GET['arr'];  $max_len_of_url=2048; function getlen($site_check){    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL,$site_check);    curl_setopt($ch, CURLOPT_FAILonerror, 1);    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);    $length = strlen(curl_exec($ch));    curl_close($ch);    return $length;} function check($site_check,$from,$to){    global $def_length,$words,$site,$symbol;     $curr_len = getlen($site_check);    if ($curr_len<>$def_length)    {        // пытаемся определить нужный нам символ        echo '<b>[+] Find <a href='.$site_check.'>smth</a> Try to detect.</b><br>';        flush();        $site_1 = $site;        $site_2 = $site;         if ($to-1-$from > 0)        {            for ($i=$from;$i<=$to-1;$i++)            {                if ($i<=$from+(($to-$from)/2) - 1)                    {$site_1 .= $words[$i].(($arr==1)?'[]':'').'='.$symbol.'&';}                else                    {$site_2 .= $words[$i].(($arr==1)?'[]':'').'='.$symbol.'&';}            }        check($site_1 ,$from,(int)($from+(($to-$from)/2)));        check($site_2 ,(int)($from+(($to-$from)/2)),$to);        flush();        }        else        {            echo '<b>[+] Find! <a href='.$site_check.'>'.$site_check.'</a></b><br>';        }    }} function recurse($width, $position, $base_string){    global $charset,$site_new,$site,$words,$count, $values,$type,$separator,$wordlist,$symbol,$max_len_of_url;         for ($i = 0; $i < count($charset); ++$i)        {            // если длина сообщения меньше требуемой - берем символ и рекурсивно вызываем сами себя            if ($position  < $width - 1)            {                recurse($width, $position + 1, $base_string . $charset[$i]);            }                // когда рекурсивные вызовы заканчиваются, возвращаемся на шаг назад по числу символов и выводим                if (!in_array($base_string.$charset[$i],$values))                {                $words[$count] = $base_string.$charset[$i].(($arr==1)?'[]':'');                $count++;                $site_new .= $base_string . $charset[$i].(($arr==1)?'[]':'').'='.$symbol.'&';                }             if ((strlen($site_new)+strlen($base_string)+4)>$max_len_of_url)            {                check($site_new,0,$count);$site_new = $site;$count = 0;            }        }    if (($position == 0) && ($site_new != $site))    {check($site_new,0,$count);}}     if (empty($_GET['url']) || empty($_GET['length']) || empty($_GET['type']) || empty($_GET['sym']))    {        echo '<b>[+] Use http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?url=<url>&type=<type of attack>&length=<max len>&sym=<parameter value><br> </b>            <b>    url examples:</b> <br/> http://site.com/index.php <br/> http://site.com/index.php?param=123 <br/> http://site.com/index.php?param=123%26param2=q <br/>            <b>    types of attack:<br/>  </b>                1 - only bruteforce<br/>                2 - only wordlist<br/>                3 - word+separator+brute values<br/>                &arr=1 - try [] postfix values<br/>                </b>';        exit;    }     if (strpos($site,'?')>0)        {$site=$site.'&';}    else        {$site=$site.'?';}    $site_new = $site;    // найдем все параметры    preg_match_all("/[?&]?([^&?=]+)=([a-zA-Z0-9-_.%]+)&/",    $site,    $out, PREG_PATTERN_ORDER);    $values = $out[1];     echo '<b>[+] Analyze <a href='.$site.'>'.$site.'</a></b><br>';    flush();     if ($type >=2)    {        $file = fopen($param_file,"r");        if(!file)        {          echo("<b>[+] Error: wordlist not exists - ".$param_file.'</b></br>');        }        else        {          while ($wordlist[] = trim(fgets($file)))          {}          unset  ($wordlist[count($wordlist)-1]);          echo "<b>[+] Wordlist loaded...".count($wordlist)." words.</b><br/>";        }     }    // определим дефолтные значения    $def_length = getlen($site);     switch ($type) {    case 1:        recurse($maxlen, 0, '');        break;    case 2:        unset($charset);        $charset[] = '';        for ($j = 0; $j < count($wordlist);$j++)            {                if (!in_array($wordlist[$j],$values))                {                $words[$count] = $wordlist[$j].(($arr==1)?'[]':'');                $count++;                $site_new .= $wordlist[$j].(($arr==1)?'[]':'').'='.$symbol.'&';                }             if ((strlen($site_new)+strlen($base_string)+4)>2048)            {                check($site_new,0,$count);$site_new = $site;$count = 0; //unset ($words); $words = array();// $words = array();            }        }        if ($site_new != $site)        {check($site_new,0,$count);}         break;    case 3:        if (!in_array('',$charset))            {$charset[count($charset)]='';}        for ($j = 0; $j < count($wordlist);$j++)            {recurse($maxlen, 0, $wordlist[$j].$separator);}        break;    }     echo '<b>[+] Done</b><br>'; ?>
Возможно, что сейчас информация про обход mod_rewrite кажется для вас лишней. Если будет нужно - вернетесь к данному материалу позже. А пока просто отметьте для себя, что можно успешно ломать сайты и с ЧПУ.

 

В принципе со сбором информации мы закончили. Если на прошлом этапи мы собирали общую информацию, то тут мы занимались исключительно веб-приложением. Узнали CMS, модули, искали сплоиты, просканировали директории и файлы, собрали все точки входа.

 

© r00t

 

Добавлено через 40 секунд

ВЕБ-ХАКИНГ.SQL-инъекции.

 

Om-W45PyQ5WkED5th3CU4Q.png

 

Здравствуйте. Мы приступаем к изучению одной из самых распространенных веб-атак - SQL-инъекции.

  • Введение.
  • Что такое SQL-инъекция?
  • Виды SQL-инъекций.
  • Материалы по уязвимостям.
  • Как можно использовать SQL-инъекции?
  • Практика.
  • Автоматизация.

Введение.

 

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

 

Если вы до сих пор не разобрались с языком SQL, то дальнейшее чтение для вас бессмысленно.

 

Поэтому как минимум прочтите эту книжку (Бен Форта - SQL. 10 минут на урок):Если вы до сих пор не разобрались с языком SQL, то дальнейшее чтение для вас бессмысленно.

 

-OFOz1KEROKDCv4SrPbh7w.png

 

Это будет для вас полезнее в десятки раз, чем все сотню раз переписанные статьи со школо-хэко-форумов где учат копипастить URLы в Havij. Я думаю будет уместно дополнить, что чтение более серьезных книг по SQL и технической документации по конкретным СУБД будет еще полезнее, чем "10 минут на урок".

 

Ну а теперь, когда меньшиство посетителей уже закрыло вкладку (большинство и не открывало), мы с вами перейдем к делу.

 

Что такое SQL-инъекция?

 

Существует два вида приложений. Первый вид - приложение, которое ведет себя именно так, как задумал программист. Второй - приложение, которое ведет себя не совсем так, как задумал программист.

 

И вся суть SQL-инъекции (а также php-инъекций, xml-инъекций и т.д.) состоит в том, чтобы найти приложение второго вида и заставить его выполнить некоторое полезное нам действие, возможность которого не планировалась программистом.

 

К примеру, есть некий скрипт articles.php. И туда методом Get передается значение параметра id. Кодер когда писал свое приложение думал примерно так:

 

"Кроче, берем id из адресной строки. Пихаем иво в скуль-запрос. Если в базе есть такой id, то выводим страницу, которая к энтому Id прикручена, а ежеле нету, то тохда ибись оно в рот и ничово не выводем."

 

Code:
<?php//articles.php include("db_config");$id = $_GET['id'];$sql = "SELECT * FROM articles WHERE id = '$id' ";$result = mysql_query($query) or die(mysql_error());$row = mysql_fetch_array($result) or die("НИЧОВО НЕТУ!!!"); //...
В зависимости от того, что мы будем передавать в параметр id, приложение будет возвращать разный результат. Но любой результат можно свести к одному из трех вариантов:

  • Пустой ответ
  • Нормальный ответ
  • Ошибка

Теперь давайте посмотрим, что получится, если мы будем пихать разные значения в параметр id:

 

tjxY9bAES0_Q-y1RLT7i2Q.png

 

Очевидно, что в суровой действительности веб-приложение ведет себя не совсем так, как это представлялось кодеру в его влажных мечтах. И по сути, в последнем варианте параметр/значение мы уже провели небольшую SQL-инъекцию.

 

Остается дело за малым - раскрутить эту самую инъекцию (попробовать вывести данные из бд, прочитать файлы, залить шелл и т.д.)

 

Стоит сразу отметить 2 нюанса:

[*]Если ошибки не выводятся, это совсем не значит, что в приложении нет SQL-инъекции.

[*]Помните, что есть существенная разница между выводом ошибок от интерпретатора и выводом ошибок от СУБД.

Если вы ни черта не поняли из того что было написано в этой части статьи - либо я очень херово все описал (и это ведь только начало!), либо вам надо учить матчасть.

 

Виды SQL-инъекций.

 

SQL-инъекции разделяют на множество видов

 

1) По типу переменной:

 

Integer (целочисленная). Параметр не обрамлен кавычками:

 

Code:
SQL-инъекции разделяют на множество видов1) По типу переменной:Integer (целочисленная). Параметр не обрамлен кавычками:
String (строковая). Параметр обрамлен кавычками:

 

Code:
SELECT * FROM articles WHERE id = ' $id ';SELECT * FROM `$articles` WHERE id = 123 ;SELECT * FROM articles WHERE id = " $id ";
2) По типу SQL-запроса и месту инъекции в запросе. В теории, инъекция может быть в абсолютно любом месте абсолютно любого SQL-запроса, если туда попадают недостаточно фильтруемые данные. Чаще всего инъекции находят в SELECT (отдельно выделяют инъекции после order by, потому как их реализация чуть сложнее), реже в UPDATE, INSERT, DELETE. Поэтому можно встретить разделение - Update based, Insert based и т.д.

 

3) Данные в SQL-запрос могут попадать через Get, Post, Cookie, HTTP заголовки (реферрер, юзерагент, или еще что-то, на что хватит фантазии у программиста).

 

Также стоит отметить такой класс инъекций как Second order injection. Это когда данные попадают в SQL-запрос не напрямую от пользователя (get, post, cookie, http headers), а из БД, из файла, от самого Аллаха или еще из какого места куда мы могли ранее ввести данные.

 

К примеру, есть форма регистрации (все очень условно):

 

Code:
<?php//Форма регистрации$username = mysql_real_escape_string($_POST['username']);$pass = mysql_real_escape_string($_POST['pass']);$sql = "INSERT INTO users (username, pass) VALUES ('$username','$pass') ";mysql_query($query) or die('Хакир, игрой в доту!');
Данные экранируются, SQL-инъекции нет. Далее, форма авторизации:

 

Code:
<?php//Форма аутентификации. Логин попадает в сессию$username = mysql_real_escape_string($_POST['username']);$pass = mysql_real_escape_string($_POST['pass']);$sql = "SELECT * FROM users WHERE username='$username' AND pass='$pass'";$result = mysql_query($query) or die('Хакир, учи уроке!');$row = mysql_fetch_row($result);$_SESSION['username'] = $row['username'];
И наконец форма для смены пароля:

 

Code:
<?php//Форма смены пароля. $username=$_SESSION['username'];$password = mysql_real_escape_string($_POST['pass']);$new_pass = mysql_real_escape_string($_POST['new_pass']);$sql = "UPDATE users SET PASSWORD='$new_pass' where username='$username' and password='$password' ";$result = mysql_query($query) or die('Пативэн выехал...');
Тут тоже нет SQL-инъекции. Но! Если зарегистрировать пользователя с логином "admin' #", то можно сменить пароль для пользователя "admin", не зная его действующий пароль (проверьте на досуге). Это и будет Second order SQL-injection.

 

4) По типу SQL-инъекции:

 

4.1) Union-based. Инъекция в SELECT запросе, вывод данных из БД производится с помощью оператора UNION. Этот метод работает, когда веб-приложение напрямую возвращает результат вывода команды SELECT на страницу (поэтому без разницы, включен вывод ошибок или нет).

В начале стоит 9999.9 (хотя могло быть и 0, -1 и т.д.) для того, чтобы первый запрос вернул пустой результат, а второй (уже внедренный нами), вернул то, что нам нужно.

 

4.2) Error-based (double query). Если использовать UNION не получается (нет колонки для вывода или инъекция в UPDATE, INSERT или DELETE), то можно вывести данные из базы искусственно вызывая ошибки.

 

Например такой запрос:

 

SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY MID(user(), FLOOR(RAND(0)*2), 64)

Вызовет ошибку, в отчете о которой мы увидим данные, которые нам были нужны:

Duplicate entry 'root@localhost' for key 1

 

y4HaHM6VTtqVZk1FrOO9YA.png

 

4.3) Blind-based (boolean based). Если данные нельзя вывести через union, а ошибки никак не выводятся, то скорее всего мы имеем дело со слепой инъекцией.

 

Как вы помните, приложение может вернуть либо нормальный результат, либо пустой, либо ошибку. Ошибки в данном случае подавляются. Поэтому мы можем использовать только, что пустой ответ это false, а нормальный ответ - true.

 

IBs2iIQmSUS49CCHv7iMwQ.png

 

И это только чтобы узнать, что первый символ в имени пользователя базы данных это "r" (114 это ascii-код этого символа).

 

BG1_ThM5SC_-S0059SCNwg.png

 

4.4) Time-based (double blind). А теперь представьте, что SQL-инъекция есть, но результат отдаваемый веб-приложением, не меняется вообще никак. Нельзя как-то выделить, что будет false, а что будет true? Что делать тогда? Использовать временные задержки.

 

fzWUw3omQTCkLCiJULY84g.png

 

Там где будет True, сервак будет тупить 10 секунд, прежде чем вернуть страницу. В остальном все идентично обычным слепым (boolean based) инъекциям.

 

yaCGED4GTZaWPJUkdpohig.png

 

Чтобы как-то уложилось в голове (вывод ошибок - от СУБД!):

 

X98c27WvQm2dytZnQ_WT0g.png

 

Теперь, по мере изучения дальнейших материалов, вы, надеюсь, не будете путаться в классификации инъекций. Если что-то было непонятно, вы с легкостью восполните пробелы в знаниях, изучив соответствующие материалы.

 

Материалы:

 

SQL.

SQL-инъекции

Как можно использовать SQL-инъекции?

 

Манипуляции с базой данных. В базе данных может быть что угодно. Если у нас есть возможность читать данные из бд, мы можем узнать много интересного:

  • Логины/пароли
  • Почтовые ящики
  • Кредитки и личные данные
  • Токены (например для восстановления пароля)
  • Переписки
  • Скрытый контент
  • Информация о заказах
  • Цифровые товары
  • Коды запуска ядерных боеголовок
  • (вставьте свой вариант)

А инъекция в INSERT, UPDATE или возможность конкатенации запросов позволит нам произвольно менять данные в БД. Сменить пароль, назначить нового администратора, отредактировать или удалить новость, изменить статус заказа или его сумму, изменить баланс на счете...

 

Запись в файл/чтение файлов. Если звезды сложились удачно и у нас есть достаточно прав, известен абсолютный путь к файлам и не фильтруются кавычки, мы можем с легкостью залить шелл. Читать файлы можно даже при ограниченных правах. Например, можно прочесть из конфига логин/пароль от соединения с базой данных, и если повезет, подключиться напрямую. Если очень повезет - узнать пароль от фтп (в конфигах jooml'ы иногда хранится).

 

SiXSS. Union based и Error based инъекции позволяют провести XSS атаку. Для этого, вместо вывода данных из таблицы, мы пишем необходимый нам js-код:

 

?id=-1' union select 1,2,3,4,5,<script>alert('xss');</script>,6,7,8 --+
По сути - это тоже самое, что и пассивная XSS (она же отраженная), т.к. вся нагрузка уже в самом запросе. Но в отличиии от обычной пассивки, она способна обойти защиту большинства браузеров (которые хавают обычные пассивки на раз-два):

 

?id=-1' union select 1,2,3,4,5,unhex('3c7363726970743e616c657274285c277 873735c27293b3c2f7363726970743e'),6,7,8 --+
Обход авторизации. Если уязвимость спряталась в форме авторизации, то вам не нужно будет знать пароль (а иногда и логин) для входа под учеткой другого пользователя/администратора.

 

SQLi + Denial of Service. С помощью одного нехитрого запроса можно повалить сайт к ебени-матери (например используя вложенный Benchmark).

 

Практика.

 

Чтобы действительно вьехать в тему, недостаточно просто изучить теорию. Нужно обязательно практиковаться:

[*]Ковырять заведомо уязвимые скрипты (DVWA, Mutillidae и подобные).

[*]Разбирать эксплоиты.

[*]Разбирать чужие взломы (отлично подойдут различные хак ресурсы).

[*]Участвовать в конкурсах и CTF.

Первые три я бы рекомендовал в первую очередь. 4 вариант для тех, кто уже уверен в своих силах. В ближайших статьях я планирую вернуться к теме тренировок в SQL-инъекциях и данный блок будет обновлен.

 

Автоматизация.

 

Частенько мелькают сообщения на андергрант-форумах, дескать илита не пользуется софтом, а раскручивает все ручками. Возможно где-то и есть уникумы, которые time based скулю раскручивает с секундомером в руках, в качестве браузера используют telnet на 80 порт, а md5 хеши брутфорсят с помощью калькулятора, карандаша и листа A4, но мы к такой илите не относимся (мы вообще к илите не относимся).

 

Как я уже советовал вам ранее, поставьте Burp Suite. Хотя вы можете использовать любые другие отладочные прокси (Fiddler, Charles и т.д.), это уже скорее дело привычки, но Burp Suite все-таки заточен именно под поиск и эксплуатацию уязвимостей. Берем http-запрос, отправляем в Intruder, сразу смотрим результат. Шик же.

 

Если говорить об автоматизации sql-инъекций, то тут две софтины впереди планеты всей.

 

hIH97x35Th_au0x8X4KhCg.png

 

havij - утилита must have для школо-хеккера (а также сценарной детки). Многие из тех кто используют эту программу, не знают, как провести атаку, если уязвимый параметр передается Post'ом или в куках. И это при том, что есть вполне сносная справка на сайте.

 

Любознательным товарищам будет полезно запустить havij через прокси (тот же burp suite или fiddler), чтобы увидеть и понять, как именно работает havij. Софт заточен под винду, имеет free и pro версию. "Крякнутые" версии практически всегда с чем-то склеены, и не обладают полным функционалом.

 

Определенно, есть много объективных причин (и все на поверхности), почему софт так популярен в массах. Есть масса аналогов, Pangolin, SQLi-helper и других, которые даже до havij не всегда дотягивают. Те же яйца, вид сбоку.

 

UgBn1iKISPG1ZHtJzcgC8w.png

 

sqlmap - на сегодняшний день, это лучший софт, для автоматизации SQL-инъекций. Любой пацык на районе подтвердит. Правда, нужно установить питон. И программа консольная (хотя и GUI обертку легко найти). Но это тока шобы отпугивать всякую шерсть, которая не сечет фишку.

 

Чтобы подтянуть знания по SQL-инъекциям, можно посмотреть исходники sqlmap (ну или поснифать запросы через веб-прокси).

 

Алгоритм для автоматизации простой:

[*]Burp Proxy. Сохраняем интересный запрос в файл request.txt (ПКМ -> Copy to file)

[*]Запускаем: sqlmap.py -r request.txt

Можно поставить плагин для burp (https://code.google.com/p/gason/) и отправлять запрос из Burp Proxy в sqlmap двумя кликами.

 

Это что касается автоматизации тестирования на sql-инъекции на одном сайте. Если вам нужно чекнуть на скули несколько десятков (сотен, тысяч) сайтов, то алгоритм, приведенный выше, вряд ли подойдет (если только вы не Дункан Маклауд).

 

О глобальной автоматизации (и создании убер-комбайна по взлому сайтов) мы поговорим в следующих статьях.

 

© r00t

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация