Шукаємо уразливості за допомогою google

Будь-пошук уразливостей на веб-ресурсах починається з розвідки та збору інформації.
Розвідка може бути як активною — брутфорс файлів і директорій сайту, запуск сканерів вразливостей, ручної перегляд сайту, так і пасивної — пошук інформації в різних пошукових системах. Іноді буває так, що уразливість стає відома ще до відкриття першої сторінки сайту.

Як таке можливо?
Пошукові роботи, безупинно бродять по просторах інтернету, крім інформації, корисної звичайному користувачеві, часто фіксують те, що може бути використана зловмисниками при атаці на веб-ресурс. Наприклад, помилки скриптів і файли з чутливою інформацією (починаючи від конфігураційних файлів і логів, закінчуючи файлами з аутентифікаційними даними і бэкапами баз даних).
З точки зору пошукового робота повідомлення про помилку виконання sql-запиту — це звичайний текст, невіддільний, наприклад, від опису товарів на сторінці. Якщо раптом пошуковий робот натрапив на файл з розширенням .sql, який чомусь опинився в робочій папці сайту, то він буде сприйнятий як частину вмісту сайту і так само буде проіндексований (включаючи, можливо, зазначені в ньому паролі).

Подібну інформацію можна знайти, знаючи стійкі, часто унікальні, ключові слова, які допомагають відокремити «вразливі сторінки» від сторінок, що не містять уразливості.
Величезна база спеціальних запитів з використанням ключових слів (так званих дорков) існує на exploit-db.com і відома під назвою Google Hack Database.

Чому google?
Дорки орієнтовані в першу чергу на google з двох причин:
− найбільш гнучкий синтаксис ключових слів (наведено в Таблиці 1) і спеціальних символів (наведено в Таблиці 2);
− індекс google все ж більш повний, ніж в інших пошукових систем;

Таблиця 1 – Основні ключові слова google












Ключове слово
Зміст
Приклад
site
Пошук тільки на зазначеному сайті. Враховує тільки url
site:somesite.ru – знайде всі сторінки з даного домену і піддоменів
inurl
Пошук за словами, присутніх в uri. На відміну від кл. слова «site», шукає збіги після імені сайту
inurl:news – знайде всі сторінки, де в uri зустрінеться дане слово
intext
Пошук в тілі сторінки
intext:«пробки» – повністю аналогічно звичайному запитом «пробки»
intitle
Пошук в заголовку сторінки. Текст, розміщений між тегами < title>
intitle:«index of»  — знайде всі сторінки з лістингом директорії
ext
Пошук сторінок зі вказаним розширенням
ext:pdf – знайде всі pdf-файли
filetype
В даний час повністю аналогічно кл. слова «ext»
filetype:pdf – аналогічно
related
Пошук сайтів зі схожою тематикою
related:google.ru – покаже свої аналоги
link
Пошук сайтів, які посилаються на даний
link:somesite:ru  — знайде всі сайти, на яких є посилання на
define
Показати визначення слова
define:0day  — визначення терміна
cache
Показати вміст сторінки в кеші (якщо є)
cache:google.com – відкриє сторінку з кешу


Таблиця 2 – Спеціальні символи запитів google








Символ
Зміст
Приклад

Точна фраза
intitle:«RouterOS router configuration page   — пошук роутерів
*
текст
inurl:«bitrix*mcart»   — пошук сайтів на bitrix з вразливим модулем mcart
.
Будь-який символ
Index.of  — аналогічно запитом index of
Виключити слово
error –warning    — показати всі сторінки, де є error, але немає warning

Діапазон
cve 2006..2016  — показати уразливості за роками починаючи з 2006
|
Логічне «або»
linux | windows  — показати сторінки, де зустрічається або перше або друге слово
Варто розуміти, що будь-який запит до пошукової системи — це пошук тільки по словами.
Марно шукати на сторінці мета-символи (лапки, дужки, знаки пунктуації тощо). Навіть пошук точної фрази, зазначеної в лапках, — це пошук за словами, з подальшим пошуком точного збігу вже в результатах.

Всі дорки Google Hack Database логічно розділені на 14 категорій і представлені в таблиці 3.
Таблиця 3 – Категорії Google Hack Database
















Категорія
Що дозволяє знайти
Приклад
Footholds
Веб-шеллі, публічні файлові менеджери
Знайти всі зламані сайти, де залиті перераховані вебшеллы:
(intitle:«phpshell» OR intitle:«c99shell» OR intitle:«r57shell» OR intitle:«PHP Shell » OR intitle:«phpRemoteView») `rwx` «uname»
Files containing usernames
Файли реєстру, конфігураційні файли, логи, файли, що містять історію введених команд
Знайти всі файли реєстру, які містять інформацію про аккаунти:
filetype:reg reg +intext:«internet account manager»
Sensitive Directories
Каталоги з різною інформацією (особисті документи, конфіги vpn, приховані репозиторії і т. д.)
Знайти всі листинги директорій містять файли, що відносяться до vpn:
«Config» intitle:«Index of» intext:vpn
Сайти, що містять git-репозиторії:
 (intext:«index of /.git») («parent directory»)
Web Server Detection
Версію та іншу інформацію про веб-сервері
Знайти адміністративні консолі сервера JBoss:
inurl:"/web-console/" intitle:«Administration Console»
Vulnerable Files
Сценарії, що містять відомі уразливості
Знайти сайти, що використовують скрипт, що дозволяє вивантажити довільний файл з сервера:
allinurl:forcedownload.php?file=
Vulnerable Servers
Інсталяційні скрипти, веб-шеллі, відкриті адміністративні консолі і т. д
Знайти відкриті PHPMyAdmin консолі, запущені від root:
intitle:phpMyAdmin «Welcome to phpMyAdmin ***» «running on * as root@*»
Error Messages
Різні помилки та попередження часто розкривають важливу інформацію – починаючи від версії CMS до паролів
Сайти, що мають помилки у виконанні sql-запитів до бази:
«Warning: mysql_query()» «invalid query»
Files containing juicy info
Сертифікати, бекапи, електронні письмы, логи, sql-скрипти і т.д
Знайти инициализационные sql-скрипти:
filetype:sql and «insert into» -site:github.com
Files containing passwords
Все що може містити паролі – логи, sql-скрипти і т. д
Логи, де згадується паролі:
filetype:log intext:password | pass | pw
sql-скрипти містять паролі:
ext:sql intext:username intext:password
Sensitive Online Shopping Info
Інформацію, пов'язану з покупками онлайн
Знайти пинкоды:
dcid= bn= pin code=
Network or vulnerability data
Інформацію, що не відноситься безпосередньо до веб-ресурсу, але зачіпає мережу або інші веб-сервіси
Знайти сценарій автоматичної настройки проксі, що містять інформацію про внутрішній мережі:
inurl:proxy | inurl:wpad ext:pac | ext:dat findproxyforurl
Pages containing login portals
Сторінки, що містять форми входу
Веб-сторінки saplogon:
intext:«2016 SAP AG. All rights reserved.» intitle:«Logon»
Various Online Devices
Принтери, роутери, системи моніторингу тощо
Знайти конфігураційну панель принтера:
intitle:"hp laserjet" inurl:SSI/Auth/set_config_deviceinfo.htm
Advisories and Vulnerabilities
Сайти на вразливих версії CMS
Знайти вразливі плагіни, через які можна завантажити довільний файл на сервер:
inurl:fckeditor -intext:«ConfigIsEnabled = False» intext:ConfigIsEnabled
Дорки частіше орієнтовані на пошук по всім сайтам мережі інтернет. Але ні що не заважає обмежити область пошуку на якому-небудь сайті або сайтах.
Кожен запит до google можна зосередити на певному сайті, додавши до запиту ключове слово «site:somesite.com». Дане ключове слово може бути дописано до будь-якого дорку.

Автоматизація пошуку вразливостей
Так народилася ідея написати простеньку утиліту, автоматизирующую пошук вразливостей за допомогою пошукової системи (google) і спирається на Google Hack Database.

Утиліта являє собою скрипт, написаний на nodejs з використанням phantomjs. Якщо бути точним, то скрипт інтерпретується самим phantomjs.
Phantomjs — це повноцінний веб-браузер без графічного інтерфейсу, керований за допомогою js-коду і володіє зручним API.
Утиліта отримала цілком зрозумілу назву – dorks. Запустивши її в командному рядку (без опцій) отримуємо коротку довідку з кількома прикладами використання:
image
Малюнок 1 — Список основних опцій dorks

Загальний синтаксис утиліти: dork «команда» «список опцій».
Детальний опис всіх опцій представлено в таблиці 4.

Таблиця 4 – Синтаксис dorks














Команда
Опція
Опис
ghdb
-l
Вивести нумерований список категорій дорков Google Hack Database
-c «номер або назва категорії»
Завантажити дорки зазначеної категорії за номером або назвою
q «фраза»
Завантажити дорки, знайдені за запитом
-o «файл»
Зберегти результат у файл (тільки разом з опціями  -c|-q)
google
-d «дорк»
Задати довільний дорк (опція може використовуватися багато разів, допускається поєднання з опцією –D)
-D «файл»
Використовувати дорки з файлу
-s «сайт»
Задати сайт (опція може використовуватися багато разів, допускається поєднання з опцією –S)
-S «файл»
Використовувати сайти з файлу (перебір дорков буде виконаний по кожному сайту незалежно)
-f «фільтр»
Задати додаткові ключові слова (буде додано до кожного дорку)
-t «кількість мс»
Інтервал між запитами до google
-T «кількість мс»
Таймаут, якщо зустрілася каптча
-o «файл»
Зберегти результат у файл будуть збережені тільки ті дорки, за яким щось знайшлося)
З допомогою команди ghdb можна отримати всі дорки з pws-db безпідставного запитом, або вказати цілком всю категорію. Якщо вказати категорію 0 — то буде вивантажено вся база (близько 4.5 тисяч дорков).

Список категорій доступних на даний момент представлений на малюнку 2.
image

Малюнок 2 — Список доступних категорій дорков GHDB

Командою google буде проведена підстановка кожного дорка в пошуковик google та проаналізовано результат на предмет збігів. Дорки за яким щось знайшлося будуть збережені у файл.
Утиліта підтримує різні режими пошуку:
• 1 дорк та 1 сайт;
• 1 дорк і багато сайтів;
• 1 сайт і багато дорков;
• багато сайтів і багато дорков;
Список дорков і сайтів можна задати як через аргумент, так і через файл.

Демонстрація роботи
Спробуємо пошукати якісь уразливості на прикладі пошуку повідомлень про помилки. По команді: dorks ghdb –c 7 –o errors.dorks будуть завантажені всі відомі дорки категорії «Error Messages» як показано на малюнку 3.
image
Малюнок 3 – Завантаження всіх відомих дорков категорії «Error Messages»

Дорки завантажені та зберігатися в файл. Тепер залишається «нацькувати» їх на який-небудь сайт (див. малюнок 4).
image
Малюнок 4 – Пошук вразливостей інтересуемого сайту в кеші google

Через якийсь час на досліджуваному сайті виявляється кілька сторінок, що містять помилки (див. малюнок 5).

image
Малюнок 5 – Знайдені повідомлення про помилки

Підсумок, у файлі result.txt отримуємо повний список дорков, що призводять до появи помилки.
На малюнку 6 представлений результат пошуку помилок сайту.
image
Малюнок 6 – Результат пошуку помилок

У кеші за даним дорку виводиться повний бэктрейс, що розкривають абсолютні шляхи скриптів, систему керування вмістом сайту і тип бази даних (див. малюнок 7).
image
Малюнок 7 – розкриття інформації про пристрої сайту

Однак варто враховувати, що не всі дорки з GHDB дають істинний результат. Так само google може не знайти точного збігу і показати схожий результат.

В такому випадку розумніше використовувати свій персональний список дорков. Наприклад, завжди варто пошукати файли з «незвичайними» розширеннями, приклади яких наведені на рисунку 8.
image
Малюнок 8 – Список розширень файлів, не характерних для звичайного веб-ресурсу

У підсумку, по команді dorks google –D extensions.txt –f банк, з самого першого запиту google починає віддавати сайти з «незвичайними» розширеннями файлів (див. малюнок 9).
image
Малюнок 9 – Пошук «нехороших» типів файлів на сайтах банківської тематики

Варто мати на увазі, що google не сприймає запити довше 32 слів.

З допомогою команди dorks google –d intext:«error|warning|notice|syntax» –f університет
можна пошукати помилки інтерпретатора PHP на сайтах навчальної тематики (див. малюнок 10).
image
Малюнок 10 – Пошук PHP-помилок часу виконання

Іноді користуватися якоюсь однією або двома категоріями докров не зручно.
Наприклад, якщо відомо, що сайт працює на движку wordpress, то потрібні дорки саме з wordpress. У такому випадку зручно скористатися пошуком Google Hack Database. Команда dorks ghdb –q wordpress –o wordpress_dorks.txt завантажить всі дорки за Wordpress, як показано на малюнку 11:
image
Малюнок 11 – Пошук дорков, що належать до Wordpress

Знову повернемося до банків і командою dorks google –D wordpress_dords.txt –f банк спробуємо знайти що-небудь цікаве, що пов'язане з wordpress (див. малюнок 12).
image
Малюнок 12 – Пошук вразливостей Wordpress

Варто зауважити, що пошук на Google Hack Database не сприймає слова коротше 4 символів. Наприклад, якщо CMS сайту не відома, але відомий мова — PHP. У такому випадку можна застосувати потрібне вручну з допомогою пайпа і системної утиліти пошуку dorks –c all | findstr /I php > php_dorks.txt (див. малюнок 13):
image
Малюнок 13 – Пошук по всіх доркам, де є згадка PHP

Пошук вразливостей або якийсь чутливої інформації в пошуковій системі слід шукати лише у випадку якщо з даного сайту є значний індекс. Наприклад, якщо у сайту проіндексовано 10-15 сторінок, то безглуздо що-небудь шукати подібним чином. Перевірити розмір індексу просто — достатньо ввести в рядок пошуку google «site:somesite.com». Приклад сайту з недостатнім індексом показаний на малюнку 14.
image
Малюнок 14 – Перевірка розміру індексу сайту

Тепер про неприємне… Періодично google може запросити каптчі — тут нічого не вдієш — доведеться ввести. Наприклад, у мене, при переборі категорії «Error Messages» (90 дорков) каптча випала тільки один раз.

Варто додати, що phantomjs підтримує роботу так само і через проксі, як через http, так і через socks інтерфейс. Для включення режиму проксі треба раскоментіровать відповідний рядок у dorks.bat або dorks.sh.

Інструмент доступний у вигляді вихідного коду github.com/USSCltd/dorks для своєї роботи вимагає тільки phantomjs.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.