VarTryer

Discussion in 'Избранное' started by AFoST, 10 Feb 2009.

  1. AFoST

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

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    VarTryer v. 1.0 [console]


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

    1. Принцип работы
    Запускаем скрипт, по подсказкам вводим нужные данные. Запрашивается хост (например, localhost). Запрашивается путь к проверяемому файлу и сам файл (например, /files/doc/index.php) и запрашивается путь и файл, в котором хранятся переменные, которые будут участвовать в проверке($ перед переменной обязательно, например $variable).
    Пример файла с переменными
    После чего, подсчитывается количество переменных и соответственно делаются запросы(POST, GET, COOKIE) к скрипту с каждой переменной, например
    Далее получается ответ от сервера (если в теле полученного документа есть слово error или warning, то тут же на экран выводится извещение и запрос при котором, была получена ошибка) подсчитывается размер ответа. Создается массив с размерами ответов сервера. Далее, высчитывается математическое ожидание размера ответа, дисперсия и среднеквадратическое отклонение. И идёт выборка "странных" значений размера ответа. Выводится схематический текстовый график вероятности выпадения размеров и справа список параметров. Ниже выводится список "странных" размеров с методом и переменной, при которой этот ответ был получен.


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

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

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

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

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

    (с) AFoST 10.02.2009 4:10
     
    #1 AFoST, 10 Feb 2009
    Last edited: 16 Feb 2009
    5 people like this.
  2. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Вообщем то утопия, я такое патылся сделать , но в итоге понял чтоэто возможно сделать только разобрав php и прикрутить в каждую функцию некоторый код. То есть сделать что то типа дезендера , но с другим уклоном, попытки сделать это в других языках не имеет смысла. Так как надо не просто парсить скрипт и вызывать с разными параметрами, а трасировать его выполнение, чтобы видеть как меняются значения так сказать динамических переменных.
     
    _________________________
    #2 SQLHACK, 10 Feb 2009
    Last edited: 10 Feb 2009
  3. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ты имеешь в виду динамический анализатор, это не то, что выложил ТС. (Кстати динамический анализатор вполне реально и интересно было бы разрботать)

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

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

    P.S.S.
    Так же без AST нельзя выявить зависимости переменных друг от друга, и поиск будет слепым. Пример:
    if($_GET[a]==1)
    eval($_GET);
     
    #3 Qwazar, 10 Feb 2009
    Last edited: 10 Feb 2009
    1 person likes this.
  4. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Распиши плз подробнее, вот эту часть. Что это и зачем?
     
  5. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Qwazar, а идею по хспайдеру на пхп которую ты подал, я уже подхватил, на следующей неделе наверное выложу! :)
     
  6. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Кстати для С++ есть динамические анализаторы (и библиотеки для удобной разработки динамических анализаторов).
     
  7. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    >>Скрипт для быстрой проверки php-скриптов на баги.
    это фаззером ховется...
     
    1 person likes this.
  8. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Делается несколько запросов, вычисляется средний показатель интересующих параметров, вычисляется допустимый разброс.
    А далее скрипт тебя информирует если получает результаты выбивающиеся из полученного распределения.
    Вроде так.
     
    _________________________
  9. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Для чего?

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

    З.Ы.
    Я не критикую, просто пытаюсь понять.
     
    #9 Qwazar, 10 Feb 2009
    Last edited: 10 Feb 2009
  10. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Наверное для случаев когда сервер не выдает ошибку. Или скажем для подобного кода
    $query = "....";
    $result = mysql_query($query) or exit($query);
     
    _________________________
    1 person likes this.
  11. AFoST

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

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    когда тестил-столкнулся с проблемой, что на тестируемом сайте вылазеет реклама случайного размера. подумал,как можно решить,потом еще подумал и решил,что мат.статистика-это удобно для выявления анормальных ответов среди большинства одинаковых. вообще, математику никто не отменял и подумал, что целесообразно применить то,что уже изобретено)

    ps.КАК ЖЕ НЕУДОБНО ПИСАТЬ С ТЕЛЕФОНА!
     
    #11 AFoST, 11 Feb 2009
    Last edited: 11 Feb 2009
    1 person likes this.
  12. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Привет из РОА.