|
Hack-FAQ
Xakep, номер #047, стр. 047-068-2 Q: Ситуация следующая: есть ftp сервер, с него раз в месяц пользователи забирают файлики с паролями. Т.е. раз в месяц там меняют пароли, и каждому юзеру пишется файл: "Ваш новый пароль - XXX123ABC". Они его скачивают и пользуются. Так вот, как этот файлик перехватить? A: Ну, во-первых, если есть машина в этой локальной сети, то сниффер - наш друг. Включаем сниффер, ждем месяц, смотрим лог сниффера и... А вот если такой машины нет... Рассмотрим, как происходит связь с ftp'шником. Ты подключаешься своим любимым ftp клиентом к ftp серверу на 21 порт, входишь и набираешь, допустим, ls (выдать список всех файлов в текущей директории). Клиент посылает команду PASV, а затем LIST. Нас интересует именно команда PASV. После нее следует строка примерно следующего вида: 200 Entering Passive Mode (192,168,100,1,16,29). Это означает следующее - ftp сервер по адресу 192.168.100.1 открывает порт 4125 (16*256+29) для передачи данных. Чем это может помочь нам? Некоторые сервера выбирают этот порт не случайным образом, а каждый раз увеличивают этот номер на единицу. Т.е., подключившись к порту 4125 на 192.168.100.1, мы получим тот самый заветный файлик, который заказал ftp клиент жертвы. Q: Есть cgi'шка на перле. Как в ней найти уязвимые места? Что хоть искать-то? A: Прежде всего, надо поискать системные вызовы. Допустим, в исходнике есть нечто типа $var=`echo $variant`. Где $variant - это некоторая переменная, вводимая пользователем. Допустим, мы через форму присваиваем $variant="$UID", тогда в $var будет результат выполнения `echo $UID`. Теперь представим себе, что вместо "$UID" мы ввели "$UID; cat /etc/passwd". Соответственно в $variant теперь результат `echo $UID; cat /etc/passwd`. Далее, если в твоей cgi'шке открываются какие-либо файлы, то можно проверить, чекаются ли имена открываемых файлов. Допустим, там честно проверяется имя файла на расширение .html/.htm/.txt. Если файл их не имеет, то они не открываются. А теперь откроем файл с таким именем - "/etc/passwd%00.html". Открытие такого файла даст нам /etc/passwd. Почему? Да потому, что символ NULL aka \0 aka %00 является символом конца строки, а, следовательно, все то, что идет после него, просто игнорируется. Cgi'шка не воспринимает его как конец строки и спокойно обрабатывает. Это самые распространенные уязвимости, но на самом деле их гораздо больше. Q: Поставил себе на машину сниффер, звоню модемом провайдеру, запускаю сниффер, а он у меня только мои пакеты видит. Что я делаю не так? A: Для начала надо понять, как работает sniffer. А работает он следующим образом: любой пакет, отправленный с машины в одной подсети, достанется ВСЕМ машинам в этой же подсети. А ответит на него только та, которой он предназначен. Sniffer принимает все, что приходит на машину, тем самым перехватывая чужие пакеты. Если между тобой и сетью стоит маршрутизатор, и он не настроен слать тебе все пакеты, то ты будешь получать только то, что тебе причитается... Когда ты соединяешься с провайдером, роль такого маршрутизатора выполняет твой гейт. Он и отправляет тебе только твои пакеты. Правда, существует способ обмануть машину отправителя и завернуть все пакеты, адресованные гейту, на себя. Делается это следующим образом. Есть такой пакет dsniff (кстати, очень полезная штука). В ней есть утилита arpspoof. Вот она-то тебе и нужна. Допустим, у тебя есть в сетке машина, но сниффер на ней тебе ничего не дает, т.к. роутер все режет. Что же делать? Надо объяснить всем, что роутер - это ТЫ. Берешь arpspoof и запускаешь arpspoof -t <жертва> |