Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Избранное (https://forum.antichat.xyz/forumdisplay.php?f=89)
-   -   VarTryer (https://forum.antichat.xyz/showthread.php?t=105533)

AFoST 10.02.2009 05:10

VarTryer
 
Вложений: 1
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

Цитата:

Сообщение от AFoST
VarTryer v. 1.0 [console]

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

Qwazar 10.02.2009 13:44

Цитата:

Сообщение от SQLHACK
Так как надо не просто парсить скрипт и вызывать с разными параметрами, а трасировать его выполнение, чтобы видеть как меняются значения так сказать динамических переменных.

Ты имеешь в виду динамический анализатор, это не то, что выложил ТС. (Кстати динамический анализатор вполне реально и интересно было бы разрботать)

А по поводу этого конкретного скрипта, можно делать как всякие ХСпайдеры, и прочие 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

Цитата:

Сообщение от SQLHACK
То есть сделать что то типа дезендера , но с другим уклоном, попытки сделать это в других языках не имеет смысла.

Кстати для С++ есть динамические анализаторы (и библиотеки для удобной разработки динамических анализаторов).

ProTeuS 10.02.2009 15:21

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

Kaimi 10.02.2009 18:55

Цитата:

Цитата:

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

Qwazar 10.02.2009 19:07

Цитата:

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

Для чего?

Код:

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);


Время: 21:25