Используем малоизвестные функции Google, чтобы найти сокрытое. Операторы поисковой системы Google Не забываем про очевидное
Поисковые операторы (специальные символы, которые добавляют к поисковому запросу) помогают получить огромное количество полезной информации о сайте. С их помощью можно существенно сузить диапазон поиска и найти нужную информацию. В основном, операторы в разных поисковых системах совпадают, но есть и различия. Поэтому рассмотрим операторы для Google и Яндекс по отдельности.
Операторы Google
Рассмотрим для начала простейшие операторы :
+ - оператор «плюс» используется для нахождения слов в одном предложении, просто вставьте данный символ между словами. Например, сделав запрос типа «зимние + шины + для + ниссана», вы получите в выдаче те сайты, в которых есть предложения с полным набором всех слов из запроса.
- - оператор «минус» поможет исключить из запроса нежелательные слова. Например, если сделать запрос «Крестный отец -онлайн», то вам выдадут сайты с информацией о фильме, обзором, рецензией и т.д., но исключат сайты с онлайн просмотром.
.. - поможет для поиска результатов, содержащих числа в указанном диапазоне.
@ и # - символы для поиска по тегам и хештегам социальных сетей.
OR - оператор «или», с его помощью можно найти страницы на которых встречается хотя бы одно из нескольких слов.
« » - кавычки сообщают поисковику, что вам необходимо найти сайты, где введенные слова находятся в указанном порядке - точное вхождение.
Сложные операторы :
site: поможет найти необходимую информацию на конкретном сайте.
cache: полезный оператор в случае если содержимое какой-либо страницы изменилось или было заблокировано. Покажет кешированную версию. Пример: cache:сайт
info: служит для показа всей информации об адресе.
related: отличный оператор для поиска сайтов с похожим контентом.
allintitle: выводятся страницы, у которых в теге title присутствуют указанные в запросе слова
allinurl: великолепный оператор, с помощью которого можно найти действительно нужные страницы. Показывает сайты, содержащие в адресе страницы указанные слова. К сожалению, всё еще мало сайтов в российском сегменте интернета используют кириллицу, поэтому придется использовать либо транслитерацию, например, allinurl:steklopakety, либо латиницу.
inurl: делает тоже самое что и оператор выше, но отбор происходит только для одного слова.
allintext: выборка страниц производится именно по содержимому страницы. Может быть полезно, если вы ищете какую-то информацию, но адрес сайта просто напросто забыли.
intext: тоже самое только для одного слова.
allinanchor: оператор показывает страницы, у которых в описании есть ключевые слова. Например: allinanchor: часы наручные.
inanchor: тоже самое только по одному ключевому слову.
Операторы Яндекс
Простые операторы :
! - ставится перед ключевым словом и в результатах поиска выдаются страницы, где указано точно такое же слово (без изменений словоформы).
+ - так же как и у Google, отображаются страницы со всеми словами, указанными между плюсом.
« » - показывает точное совпадение фразы.
() - используется для группировки слов в сложных запросах.
& - нужен для поиска страниц, в которых слова, объединенные данным оператором, встречаются в одном предложении.
* - служит для поиска пропущенных слов в цитатах. Например: Россия * душа. Один оператор * заменяет одно слово.
Следующие операторы уже встроены в расширенный поиск Яндекса, поэтому запоминать их нет смысла, но всё же мы объясним, что каждый из них делает.
title: поиск по заголовкам страниц сайтов
url: поиск по страницам, размещенным по заданному адресу, например url:сайт/blog/*
host: производит поиск по всему хосту.
site: здесь поиск производится уже по всем поддоменам и страницам сайта.
inurl: поиск по страницам только данного домена с применением ключевых слов. Например, inurl:сайт блог
mime: поиск документов заданного типа, например mime:xls.
cat: поиск по сайтам, которые присутствуют в Яндекс.Каталоге, а также регион и рубрика которых совпадает с заданным. Например: автомобиль cat:ID_категории
Вот как эти операторы выглядят в самом поисковике:
Таким образом, правильно подбирая и используя операторы поисковых систем Google и Яндекс, вы можете самостоятельно составить семантическое ядро для сайта, найти недочеты и ошибки в работе, сделать анализ конкурентов, а также узнать - откуда и какие внешние ссылки идут на ваш сайт.
Если вы используете в работе еще какие-то операторы, которые мы не учли, делитесь в комментариях. Обсудим =)
Наследование - это механизм объектно ориентированного программирования, который позволяет описать новый класс на основе уже существующего (родительского).
Класс, который получается в результате наследования от другого, называется подклассом. Эту связь обычно описывают с помощью терминов «родительский» и «дочерний». Дочерний класс происходит от родительского и наследует его характеристики: свойства и методы. Обычно в подклассе к функциональности родительского класса (который также называют суперклассом) добавляются новые функциональные возможности.
Чтобы создать подкласс, необходимо использовать в объявлении класса ключевое слово extends , и после него указать имя класса, от которого выполняется наследование:
age = $age;
}
function add_age () {
$this->age++;
}
}
// объявляем наследуемый класс
class my_Cat extends Cat {
// определяем собственный метод подкласса
function sleep() {
echo "
Zzzzz...";
}
}
$kitty = new my_Cat(10);
// вызываем наследуемый метод
$kitty->add_age();
// считываем значение наследуемого свойства
echo $kitty->age;
// вызываем собственный метод подкласса
$kitty->sleep();
?>
Подкласс наследует доступ ко всем методам и свойствам родительского класса, так как они имеют тип public . Это означает, что для экземпляров класса my_Cat мы можем вызывать метод add_age() и обращаться к свойству $age не смотря на то, что они определены в классе cat . Также в приведенном примере подкласс не имеет своего конструктора. Если в подклассе не объявлен свой конструктор, то при создании экземпляров подкласса будет автоматически вызываться конструктор суперкласса.
Обратите внимание на то, что в подклассах могут переопределяться свойства и методы. Определяя подкласс, мы гарантируем, что его экземпляр определяется характеристиками сначала дочернего, а затем родительского класса. Чтобы лучше это понять рассмотрим пример:
age"; } } class my_Cat extends Cat { public $age = 10; } $kitty = new my_Cat; $kitty->foo(); ?>
При вызове $kitty->foo() интерпретатор PHP не может найти такой метод в классе my_Cat , поэтому используется реализация этого метода заданная в классе Cat . Однако в подклассе определено собственное свойство $age , поэтому при обращении к нему в методе $kitty->foo() , интерпретатор PHP находит это свойство в классе my_Cat и использует его.
Так как мы уже рассмотрели тему про указание типа аргументов, осталось сказать о том, что если в качестве типа указан родительский класс, то все потомки для метода будут так же доступны для использования, посмотрите на следующий пример:
foo(new my_Cat); ?>
Мы можем обращаться с экземпляром класса my_Cat так, как будто это объект типа Cat , т.е. мы можем передать объект типа my_Cat методу foo() класса Cat , и все будет работать, как надо.
Оператор parent
На практике подклассам бывает необходимо расширить функциональность методов родительского класса. Расширяя функциональность за счет переопределения методов суперкласса, в подклассах вы сохраняете возможность сначала выполнить программный код родительского класса, а затем добавить код, который реализует дополнительную функциональность. Давайте разберем как это можно сделать.
Чтобы вызвать нужный метод из родительского класса, вам понадобится обратиться к самому этому классу через дескриптор. Для этой цели в PHP предусмотрено ключевое слово parent . Оператор parent позволяет подклассам обращаться к методам (и конструкторам) родительского класса и дополнять их существующую функциональность. Чтобы обратиться к методу в контексте класса, используются символы " :: " (два двоеточия). Синтаксис оператора parent:
Parent::метод_родительского_класа
Эта конструкция вызовет метод, определенный в суперклассе. Вслед за таким вызовом можно поместить свой программный код, который добавит новую функциональность:
title = $title;
$this->price = $price;
}
}
class new_book extends book {
public $pages;
function __construct($title, $price, $pages) {
// вызываем метод-конструктор родительского класса
parent::__construct($title, $price);
// инициализируем свойство определенное в подклассе
$this->pages = $pages;
}
}
$obj = new new_book("азбука", 35, 500);
echo "Книга: $obj->title
Цена: $obj->price
Страниц: $obj->pages";
?>
Когда в дочернем классе определяется свой конструктор, PHP не вызывает конструктор родительского класса автоматически. Это необходимо сделать вручную в конструкторе подкласса. Подкласс сначала в своем конструкторе вызывает конструктор своего родительского класса, передавая нужные аргументы для инициализации, исполняет его, а затем выполняется код, который реализует дополнительную функциональность, в данном случае инициализирует свойство подкласса.
Ключевое слово parent можно использовать не только в конструкторах, но и в любом другом методе, функциональность которого вы хотите расширить, достигнуть этого можно, вызвав метод родительского класса:
name}.";
return $str;
}
}
class my_Cat extends Cat {
public $age = 5;
function getstr() {
$str = parent::getstr();
$str .= "
Возраст: {$this->age} лет.";
return $str;
}
}
$obj = new my_Cat;
echo $obj->getstr();
?>
Здесь сначала вызывается метод getstr() из суперкласса, значение которого присваивается переменной, а после этого выполняется остальной код определенный в методе подкласса.
Теперь, когда мы познакомились с основами наследования, можно, наконец, рассмотреть вопрос видимости свойств и методов.
public, protected и private: управление доступом
До этого момента мы явно объявляли все свойства как public (общедоступные). И такой тип доступа задан по умолчанию для всех методов.
Элементы класса можно объявлять как public (общедоступные), protected (защищенные) и private (закрытые). Рассмотрим разницу между ними:
- К public (общедоступным) свойствам и методам, можно получить доступ из любого контекста.
- К protected (защищенным) свойствам и методам можно получить доступ либо из содержащего их класса, либо из его подкласса. Никакому внешнему коду доступ к ним не предоставляется.
- Вы можете сделать данные класса недоступными для вызывающей программы с помощью ключевого слова private (закрытые). К таким свойствам и методам можно получить доступ только из того класса, в котором они объявлены. Даже подклассы данного класса не имеют доступа к таким данным.
public - открытый доступ:
hello"; } } $obj = new human; // доступ из вызывающей программы echo "$obj->age"; // Допустимо $obj->say(); // Допустимо?>private - доступ только из методов класса:
age"; } } $obj = new human; // напрямую из вызывающей программы доступа к закрытым данным нет echo "$obj->age"; // Ошибка! доступ закрыт! // однако с помощью метода можно выводить закрытые данные $obj->say(); // Допустимо?>protected - защищенный доступ:
Модификатор protected с точки зрения вызывающей программы выглядит точно так же, как и private: он запрещает доступ к данным объекта извне. Однако в отличие от private он позволяет обращаться к данным не только из методов своего класса, но также и из методов подкласса.
Запустите скаченный файл двойным кликом (нужно иметь виртуальную машину ).
3. Анонимность при проверке сайта на SQL-инъекции
Настройка Tor и Privoxy в Kali Linux
[Раздел в разработке]
Настройка Tor и Privoxy в Windows
[Раздел в разработке]
Настройки работы через прокси в jSQL Injection
[Раздел в разработке]
4. Проверка сайта на SQL-инъекции с jSQL Injection
Работа с программой крайне проста. Достаточно ввести адрес сайта и нажать ENTER.
На следующем скриншоте видно, что сайт уязвим сразу к трём видам SQL-инъекций (информация о них указана в правом нижнем углу). Кликая на названия инъекций можно переключить используемый метод:
Также нам уже выведены имеющиеся базы данных.
Можно посмотреть содержимое каждой таблицы:
Обычно, самым интересным в таблицах являются учётные данные администратора.
Если вам повезло и вы нашли данные администратора — то радоваться рано. Нужно ещё найти админку, куда эти данные вводить.
5. Поиск админок с jSQL Injection
Для этого переходите на следующую вкладку. Здесь нас встречает список возможных адресов. Можете выбрать одну или несколько страниц для проверки:
Удобство заключается в том, что не нужно использовать другие программы.
К сожалению, нерадивых программистов, которые хранят пароли в открытом виде, не очень много. Довольно часто в строке пароля мы видим что-нибудь вроде
8743b52063cd84097a65d1633f5c74f5
Это хеш. Расшифровать его можно брутфорсом. И… jSQL Injection имеет встроенный брутфорсер.
6. Брутфорсинг хешей с помощью jSQL Injection
Несомненным удобство является то, что не нужно искать другие программы. Здесь имеется поддержка множества самых популярных хешей.
Это не самый оптимальный вариант. Для того, чтобы стать гуру в расшифровке хешей, рекомендуется Книга « » на русском языке.
Но, конечно, когда под рукой нет другой программы или нет времени на изучение, jSQL Injection со встроенной функцией брут-форса придётся очень кстати.
Присутствуют настройки: можно задать какие символы входят в пароль, диапазон длины пароля.
7. Операции с файлами после обнаружения SQL-инъекций
Кроме операций с базами данных — их чтение и модификация, в случае обнаружения SQL-инъекций возможно выполнение следующих файловых операций:
- чтение файлов на сервере
- выгрузка новых файлов на сервер
- выгрузка шеллов на сервер
И всё это реализовано в jSQL Injection!
Есть ограничения — у SQL-сервера должны быть файловые привилегии. У разумных системных администраторов они отключены и доступа к файловой системе получить не удастся.
Наличие файловых привилегий достаточно просто проверить. Перейдите в одну из вкладок (чтение файлов, создание шелла, закачка нового файла) и попытайтесь выполнить одну из указанных операций.
Ещё очень важное замечание — нам нужно знать точный абсолютный путь до файла с которым мы будем работать — иначе ничего не получится.
Посмотрите на следующий скриншот:
На любую попытку операции с файлом нам отвечают: No FILE privilege (нет файловых привелегий). И ничего здесь поделать нельзя.
Если вместо этого у вас другая ошибка:
Problem writing into [название_каталога]
Это означает, что вы неправильно указали абсолютный путь, в который нужно записывать файл.
Для того, чтобы предположить абсолютный путь, нужно, как минимум, знать операционную систему на которой работает сервер. Для этого переключитесь к вкладке Network.
Такая запись (строка Win64 ) даёт основание нам предположить, что мы имеем дело с ОС Windows:
Keep-Alive: timeout=5, max=99 Server: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Connection: Keep-Alive Method: HTTP/1.1 200 OK Content-Length: 353 Date: Fri, 11 Dec 2015 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Content-Type: text/html; charset=UTF-8
Здесь у нас какой-то из Unix (*BSD, Linux):
Transfer-Encoding: chunked Date: Fri, 11 Dec 2015 11:57:02 GMT Method: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Connection: keep-alive Content-Type: text/html X-Powered-By: PHP/5.3.29 Server: Apache/2.2.31 (Unix)
А здесь у нас CentOS:
Method: HTTP/1.1 200 OK Expires: Thu, 19 Nov 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Connection: keep-alive X-Cache-Lookup: MISS from t1.hoster.ru:6666 Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS from t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Date: Fri, 11 Dec 2015 12:08:54 GMT Transfer-Encoding: chunked Content-Type: text/html; charset=WINDOWS-1251
В Windows типичной папкой для сайтов является C:\Server\data\htdocs\ . Но, на самом деле, если кто-то «додумался» делать сервер на Windows, то, весьма вероятно, этот человек ничего не слышал о привилегиях. Поэтому начинать попытки стоит прямо с каталога C:/Windows/:
Как видим, всё прошло прекрасно с первого раза.
Но вот сами шеллы jSQL Injection у меня вызывают сомнения. Если есть файловые привилегии, то вы вполне можете закачать что-нибудь с веб-интерфейсом.
8. Массовая проверка сайтов на SQL-инъекции
И даже эта функция есть у jSQL Injection. Всё предельно просто — загружаете список сайтов (можно импортировать из файла), выбираете те, которые хотите проверить и нажимаете соответствующую кнопку для начала операции.
Вывод по jSQL Injection
jSQL Injection хороший, мощный инструмент для поиска и последующего использования найденных на сайтах SQL-инъекций. Его несомненные плюсы: простота использования, встроенные сопутствующие функции. jSQL Injection может стать лучшим другом новичка при анализе веб-сайтов.
Из недостатков я бы отметил невозможность редактирования баз данных (по крайней мере я этого функционала не нашёл). Как и у всех инструментов с графическим интерфейсом, к недостаткам этой программы можно приписать невозможность использования в скриптах. Тем не менее некоторая автоматизация возможна и в этой программе — благодаря встроенной функции массовой проверки сайтов.
Программой jSQL Injection пользоваться значительно удобнее чем sqlmap . Но sqlmap поддерживает больше видов SQL-инъекций, имеет опции для работы с файловыми файерволами и некоторые другие функции.
Итог: jSQL Injection — лучший друг начинающего хакера.
Справку по данной программе в Энциклопедии Kali Linux вы найдёте на этой странице: http://kali.tools/?p=706