фильтрация параметров

Discussion in 'Песочница' started by svolarga, 4 Nov 2009.

  1. svolarga

    svolarga New Member

    Joined:
    29 Oct 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте!
    Я в этой теме новичок, пытаюсь разобраться и честно гуглю, но уже всю голову сломал. Помогите пожалуйса...

    1. Ковырял сайт, нашел внутри фрейма ссылку вот такого вида http://10.10.10.10:10006/WWWTree/Default.aspx?param=id_user;10;2009;RU
    То есть не нужно даже никакого пароля, чтобы посмотреть всю инфу о юзере и его финансовый отчет за выбранный период.
    Передаются 4 параметра (номер юзера, месяц, год, язык), и работает вся эта хрень только с корректными данными. Если пихать в эти параметры что-то откровенно левое, то перебрасывает на дефолтовую странцу, следовательно, грубые ошибки обрабатываются. Но вот например 200 месяц 3000 года - хавает нормально.
    Пробовал добавлять в конец строки различные хитрые приблуды типа UNION, ставил кавычки, плюсы и т.д. (ну короче самые распространенные и типичные добавки) - реакция нулевая, все что после 4-го параметра уже не воспринимается. Или я просто что-то не так делаю.

    Какие мысли есть по этому поводу? как можно обойти фиьтрацию данных в параметрах и сотворить что-нибудь полезное?


    2. Искал дальше и обнаружил, что на сайт можно авторизоваться не только через форму, которая постит сама в себя, но и по ссылке типа http://сайт/_tree.php?login=&password=
    Соответственно пробовал покрутить тут что-то. Добавлял кавычки, юнионы, [] - тоже ничего не получил. Что примечательно, если вообще не указывать пароль, то выводится инфа на самого первого юзера

    3. Искал еще дальше и обнаружил, что в другом месте есть ссылка типа http://сайт/index.php?modul=11&d=12,2007
    вот тут мне показалось очень интересно следующее:
    можно писать всякую ерунду - и она не ругается, но как-то странно реагирует на некоторые символы, а именно:
    ' заменяет на \'
    " заменяет на \"
    \ заменяет на \\
    + заменяет на пробел
    Если пишу d=12,2007qwe, то он так на странцу и выводит информацию для года 2007qwe, если пишу вобще d=qwe,asd - то выводит для этого месяца-даты. Короче не фильтруется. Пытался запихать туда фразу <?php echo $login; ?> (благо он все равно выводится в этом же отчете) - страница мои наивные поползновения игнорирует напрочь, это просто не отображается.
    Нутром чую, что тут где-то есть лазейка, но мозгов не хватает понять где именно и какая.


    4. Еще дальше нашел вот такую ерунду:

    Warning: Variable passed to each() is not an array or object in /usr/local/httpd/virtual/адрес_сайта/modules/users/users_class.php on line 406

    Warning: Cannot modify header information - headers already sent by (output started at /usr/local/httpd/virtual/адрес_сайта/modules/users/users_class.php:406) in /usr/local/httpd/virtual/адрес_сайта/modules/users/users_class.php on line 420

    С чем это вообще хоть едят-то?



    В общем, вроде где-то во всем этом есть какой-то полудохлый баг, но мне знаний не хватает чтобы его выщемить. Расскажите, пожалуйста, кто и что думает об этом безобразии?..
     
    #1 svolarga, 4 Nov 2009
    Last edited: 4 Nov 2009
  2. keng

    keng Member

    Joined:
    9 Apr 2008
    Messages:
    60
    Likes Received:
    43
    Reputations:
    8
  3. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    Там описана SQL иньекция в MySQL, а у него скорее всего MSSQL.

    ТС, попробуй 1' or 1=@@version.
    Если выведет ошибку, то прочитай её полностью, если заработает как надо, то в ошибке будет версия MSSQL. А дальше читай мануалы по MSSQL иньекциям.
     
  4. Dyxxx

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

    Joined:
    16 Feb 2009
    Messages:
    107
    Likes Received:
    155
    Reputations:
    24
    Code:
    Warning: Variable passed to each() is not an array or object in /usr/local/httpd/virtual/адрес_сайта/modules/users/users_class.php on line 406
    сомневаюсь я что на unix ставят mssql )
     
  5. svolarga

    svolarga New Member

    Joined:
    29 Oct 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    2 Ctacok
    спасибо, обязательно прочитаю


    Вот по поводу СУБД, я сам что-то в легком дауне нахожусь... Насколько мне известно, там именно MS SQL, люди оттуда так говорят. И еще говорят что там ASP.
    Меня смущает что где-то используется ASP, а где-то PHP... Как будто в одной системе за каким-то хреном применили разные технологии. Хотя может быть разработчикам просто дали все это на откуп, а над разными частями функционала работали разные команды. Вот и долбятся к одной БД разные клиенты. Но все равно это как-то странно.
     
  6. svolarga

    svolarga New Member

    Joined:
    29 Oct 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    1' or 1=@@version ошибку не выдает, обрабатывается адекватно
     
  7. mr.celt

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

    Joined:
    6 Feb 2008
    Messages:
    133
    Likes Received:
    16
    Reputations:
    12
    че-то меня смущает структура URL и используемые технологии ...
    не может быть так, что web-приложения расположены на разных физических серваках и конектятся к одной базе?
     
  8. Termin@L

    Termin@L Elder - Старейшина

    Joined:
    7 Dec 2006
    Messages:
    183
    Likes Received:
    43
    Reputations:
    53
    первая строчка значит, что в цикл - foreach в качестве первого параметра передался не массив, что скорее всего вызвано пустой выборкой из базы, а вторая вызвана тем, что выведен текст ошибки, а где то позже скрипт пытается отправить заголовок через функцию header().
    А вот по поводу всего остального - ссылку в студию, тогда разберемся.
     
  9. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Почему же не может?
    Еще как может, если разрешен удаленный доступ к БД.
     
  10. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Там нету ни слова о цикле foreach.
     
  11. mr.celt

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

    Joined:
    6 Feb 2008
    Messages:
    133
    Likes Received:
    16
    Reputations:
    12
    Так я и подозреваю такую ситуацию) Ну, ссылка то будет, чтоб посмотреть?
     
  12. 1ten0.0net1

    1ten0.0net1 Time out

    Joined:
    28 Nov 2005
    Messages:
    473
    Likes Received:
    330
    Reputations:
    389
    1) Увы, бывает и такое, что параметр неуязвим.. Или же фильтр нельзя обойти, не имея исходников. Как варинт - пробуй любой fuzzer - он тебе перепробует всё, что можно и сообщит о неадекватных реакциях на параметры.
    Попробуй вместо
    Default.aspx?param=id_user;10;2009;RU
    Передать
    Default.aspx?param=id_user;10;2009;RU&param=';das';'a;'
    Вообщем, поэкспериментируй, результаты двойной инициализации параметра могут приятно удивить.

    2) А что тебя удивляет? В PHP, например, ведь не только $_POST может использоваться, но и $_REQUEST и ещё великое множество массивов и супермассивов.

    3) Вероятнее всего или включена опция magic_quotes в настройках php, или используется функция, аналогичная addslashes().

    4) Пытался запихать туда фразу <?php echo $login; ?> ... Это уязвимость класса XSS (вывод параметра в html код), а не code execution посредством записи кода в файл. PHP код в таком случае не сработает.