PDA

Просмотр полной версии : VarTryer


AFoST
10.02.2009, 05:10
VarTryer v. 1.0 [console]


Скрипт для быстрой проверки php-скриптов на баги [фаззер]

1. Принцип работы
Запускаем скрипт, по подсказкам вводим нужные данные. Запрашивается хост (например, localhost). Запрашивается путь к проверяемому файлу и сам файл (например, /files/doc/index.php) и запрашивается путь и файл, в котором хранятся переменные, которые будут участвовать в проверке($ перед переменной обязательно, например $variable).
Пример файла с переменными

$var1
$var2
$var3

После чего, подсчитывается количество переменных и соответственно делаются запросы(POST, GET, COOKIE) к скрипту с каждой переменной, например

GET http://localhost/index.php?tryvar=tryval
host: localhost
Connection: close


POST http://localhost/index.php
host: localhost
Connection: close
Content-type: application/x-www-form-urlencoded
Content-Length: 13

tryvar=tryval

GET http://localhost/index.php
Cookie: tryvar=tryval
host: localhost
Connection: close

Далее получается ответ от сервера (если в теле полученного документа есть слово error или warning, то тут же на экран выводится извещение и запрос при котором, была получена ошибка) подсчитывается размер ответа. Создается массив с размерами ответов сервера. Далее, высчитывается математическое ожидание размера ответа, дисперсия и среднеквадратическое отклонение. И идёт выборка "странных" значений размера ответа. Выводится схематический текстовый график вероятности выпадения размеров и справа список параметров. Ниже выводится список "странных" размеров с методом и переменной, при которой этот ответ был получен.


2. Требования
Код написан на php с ООП(собственно, учился ООП тут =)).
Требуется php5+ и включенные сокеты.

3. Назначение

1)Быстрый анализ локального php-скрипта на баги.
Ставим проверяемый скрипт на сервер. Вводим хост и путь к файлу. На запрос пути к файлу с переменными указываем тот же файл, что висит на сервере. Скрипт пропарсит проверяемый файл на переменные и далее пойдет проверка.

2)Удаленный анализ на php-баги.
Указываем удаленный хост и путь к сприпту. Указываем путь к файлу с набором переменных. Смысл в том, что если на проверяемом хосте включен register_globals = on и в скрипте есть ошибки, связанные с переменными, то скрипт их должен выявить.

3. Установка
Весь скрипт состоит из главного файла и нескольких подключаемых классов. Надо лишь разархивировать архив в одну папку.

(с) AFoST 10.02.2009 4:10

SQLHACK
10.02.2009, 13:30
VarTryer v. 1.0 [console]


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

Qwazar
10.02.2009, 13:44
Так как надо не просто парсить скрипт и вызывать с разными параметрами, а трасировать его выполнение, чтобы видеть как меняются значения так сказать динамических переменных. Ты имеешь в виду динамический анализатор, это не то, что выложил ТС. (Кстати динамический анализатор вполне реально и интересно было бы разрботать)

А по поводу этого конкретного скрипта, можно делать как всякие ХСпайдеры, и прочие SSS: Т.е. собирать на страницах все линки, все формы и просто экспериментировать с установкой из значений (просто обычный фаззинг).

P.S.
То что сделал ТС смахивает на мой статический анализатор, и по сути делает тоже самое. Но всё равно в итоге автору придётся сделать тоже, что и было сделано у меня - разбирать синтаксическое дерево, многие конструкции регекспом не разберёшь (ну т.е. разберёшь конечно, но трудоёмкость неоправданная).

P.S.S.
Так же без AST нельзя выявить зависимости переменных друг от друга, и поиск будет слепым. Пример:
if($_GET[a]==1)
eval($_GET[b]);

Qwazar
10.02.2009, 13:58
Далее, высчитывается математическое ожидание размера ответа, дисперсия и среднеквадратическое отклонение. И идёт выборка "странных" значений размера ответа. Выводится схематический текстовый график вероятности выпадения размеров и справа список параметров. Ниже выводится список "странных" размеров с методом и переменной, при которой этот ответ был получен. Распиши плз подробнее, вот эту часть. Что это и зачем?

Twoster
10.02.2009, 14:28
Qwazar, а идею по хспайдеру на пхп которую ты подал, я уже подхватил, на следующей неделе наверное выложу! :)

Qwazar
10.02.2009, 14:35
То есть сделать что то типа дезендера , но с другим уклоном, попытки сделать это в других языках не имеет смысла. Кстати для С++ есть динамические анализаторы (и библиотеки для удобной разработки динамических анализаторов).

ProTeuS
10.02.2009, 15:21
>>Скрипт для быстрой проверки php-скриптов на баги.
это фаззером ховется...

Kaimi
10.02.2009, 18:55
Далее, высчитывается математическое ожидание размера ответа, дисперсия и среднеквадратическое отклонение. И идёт выборка "странных" значений размера ответа. Выводится схематический текстовый график вероятности выпадения размеров и справа список параметров. Ниже выводится список "странных" размеров с методом и переменной, при которой этот ответ был получен.

Распиши плз подробнее, вот эту часть. Что это и зачем?

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

Qwazar
10.02.2009, 19:07
А далее скрипт тебя информирует если получает результаты выбивающиеся из полученного распределения.
Вроде так. Для чего?


if($a==1) echo "вы ввели лажу";
if($a==2) echo "вы ввели лажу";
...
if($a==N) echo "вы ввели лажу";
if($a==N+1) echo "а вот теперь всё клёво + очень много текста"
Как я понимаю, подозрительным будет последний вариант? В чём практический смысл такого подхода?

З.Ы.
Я не критикую, просто пытаюсь понять.

Kaimi
10.02.2009, 19:53
Как я понимаю, подозрительным будет последний вариант? В чём практический смысл такого подхода?

Наверное для случаев когда сервер не выдает ошибку. Или скажем для подобного кода
$query = "....";
$result = mysql_query($query) or exit($query);

AFoST
11.02.2009, 02:45
Распиши плз подробнее, вот эту часть. Что это и зачем?
когда тестил-столкнулся с проблемой, что на тестируемом сайте вылазеет реклама случайного размера. подумал,как можно решить,потом еще подумал и решил,что мат.статистика-это удобно для выявления анормальных ответов среди большинства одинаковых. вообще, математику никто не отменял и подумал, что целесообразно применить то,что уже изобретено)

ps.КАК ЖЕ НЕУДОБНО ПИСАТЬ С ТЕЛЕФОНА!

.Slip
16.02.2009, 13:12
Привет из РОА.