English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Недавно вышла новость, что четверо сотрудников отдела безопасности Ali использовали уязвимости веб-страниц, чтобы написать скрипт JavaScript и украсть лунные пироги, так что у меня появилась идея узнать, как именно пишется этот скрипт JavaScript, и как они реализуют такие действия, как различные методы刷инга и захват.
Что такое атака JavaScript-инъекций?
1. Каждый раз, когда сайт принимает и отображает вводимое пользователем содержимое, он легко становится уязвимым для атак JavaScript-инъекций. Давайте рассмотрим конкретное приложение, которое легко становится жертвой таких атак. Предположим, что был создан веб-сайт для клиентских отзывов. Клиенты могут访问 сайт и вводить информацию о продуктах. При подаче отзыва, информация о отзыве снова отображается на странице отзывов.
Веб-сайт обратной связи - это простой веб-сайт. К сожалению, этот сайт легко подвержен атакам JavaScript-инъекций.
Предположим, что вы вводите следующий текст в форму обратной связи клиентов:
<script>alert(“Attack!”)</script>
Этот текст представляет собой скрипт JavaScript для отображения окна с сообщением предупреждения. Если кто-то отправит этот скрипт в форму обратной связи клиентов, сообщение "Attack!" будет отображаться, когда любой человек зайдет на веб-сайт обратной связи.
2. Есть также вариант ввода фрагмента js-кода в адресной строке браузера, чтобы изменить содержимое переменных js и тегов страницы.
С помощью внедрения JavaScript пользователь может изменить содержимое веб-страницы, не закрывая или не сохраняя страницу, это делается в адресной строке браузера. Грамматика команды такая:
javascript:alert(#command#)
Например, если вы хотите увидеть всплывающее предупреждение alert на сайте http://www.example.com, сначала введите URL в адресной строке и подождите, пока страница загрузится, затем удалите URL и введите:
javascript:alert("Hello World")
Используя эту технологию, можно изменить几乎 любое содержимое веб-страницы, например, изображение. Предположим, у вас есть изображение логотипа сайта, и мы находим фрагмент HTML-кода на странице:
<IMG Name="hi" SRC="hello.gif">
Изображение命名为 "hi", исходный файл "hello.gif", мы хотим изменить его на хранящийся на нашем сайте (http://www.mysite.com) файл "bye.jpeg", поэтому полный URL изображения - http://www.mysite.com/bye.jpeg, с помощью внедрения JavaScript, нам нужно только ввести в адресной строке:
javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg")
Вы увидите всплывающее предупреждение "http://www.mysite.com/bye.jpeg", после чего изображение будет изменено. Следует отметить, что эти изменения временные! Если вы обновите страницу или зайдете на нее снова, ваши изменения исчезнут, потому что вы сделали их только на вашем ПК, а не на веб-сервере.
Используя этот же метод, мы можем проверить или изменить значение переменной, например, мы находим такой фрагмент кода на веб-странице:
<SCRIPT LANGUAGE="JavaScript"> var a="test" </SCRIPT>
Это означает, что значение переменной a равно "test", теперь мы вводим:
javascript:alert(a)
Затем мы изменяем его значение на "hello":
javascript:alert(a="hello")
Javascript-инъекции обычно используются для изменения свойств формы, предположим, у нас есть такой фрагмент кода:
<form name="format" action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
Мы хотим, чтобы форма отправлялась на наш адрес электронной почты, а не на [email protected]. Для этого можно использовать следующую команду:
javascript:alert(document.format.mail.value="[email protected]")
• Может быть, вы уже заметили иерархию этих команд:
• Мы объясняем по порядку слева направо:
• 1) слева от document
• 2) затем мы хотим изменить имя объекта (например, document.hi.src) или его содержимое (например, document.format.mail.value)
• 3) в конце мы хотим изменить свойство (например, путь источника: document.hi.src или значение переменной: document.format.mail.value)
• 4) используется "." для разделения
• 5) когда мы хотим изменить значение свойства, мы используем "=" и новое значение свойства
• * Комментарий: когда новый свойство является строкой (например: document.format.mail.value="[email protected]") нужно обернуть его двойными кавычками.
• Если мы хотим использовать его как значение переменной, не нужно использовать двойные кавычки "". Например, если мы хотим присвоить значение переменной b переменной a, мы можем ввести javascript:alert(a=b).
• Но, большинство тегов на странице не имеют имен, например:
<form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
В этом фрагменте кода нет имени формы, учитывая вышеуказанную информацию, можно использовать следующую команду:
javascript:alert(document. .mail.value="[email protected]")
В этой ситуации нам нужно подсчитать и найти номер формы, вот пример:
<form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form>
• В этом коде мы видим 3 формы, но нас интересует только вторая, поэтому номер формы, которую мы хотим, составляет 2. Не забывайте, что мы начинаем с 1, например, 1, 2, 3, 4... а JavaScript начинается с 0, например, 0, 1, 2, 3... поэтому真实的 номер формы составляет 1, а не 2. Обычно мы subtract one from the found form number, и мы будем использовать этот номер для completion our command:
javascript:alert(document.forms[1].mail.value="[email protected]")
• Таким образом, вы можете изменить изображения или ссылки без имени. Вы можете заменить "forms" на любой тип тега, который вы хотите. Для изображений это
javascript:alert(document.images[3].src="#the url of the picture you want#")
Для ссылок это
javascript:alert(document.links[0].href="#the url you want#")
В конце концов, мы можем использовать эту хитрость для редактирования куки. Написанные команды были созданы Dr_aMado с triviasecurity.net, я только немного их изменил, чтобы они отображались перед редактированием пользователем. Достаточно просто скопировать их в адресную строку:
javascript:alert(window.c = function a(n, v, nv) { c = document.cookie; c = c.substring(c.indexOf(n) + n.length, c.length);} c = c.substring(1, ((c.indexOf(";") > -1) ? c.indexOf(";") : c.length)); nc = unescape(c).replace(v, nv); document.cookie = n + "=" + escape(nc); return unescape(document.cookie);}); alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),}} prompt("Change this value:",""),prompt("with this:","")))
//Если вы хотите вручную изменить ваши cookies, вы можете использовать следующую команду:
javascript:alert(document.cookie)
Это покажет ваши текущие cookies, предположим, "userid=1"; если вы хотите изменить его на "userid=2", вы можете использовать следующую команду:
javascript:alert(document.cookie="userid=2")
В конце я должен особенно отметить, что все изменения происходят только на клиенте! Это как сохранение веб-страницы на вашем ПК и её изменение. Но даже с этим приемом вы можете обмануть страницу (например, cookies) или обойти безопасную проверку. Например, некоторые веб-страницы могут проверять положение отправляемых данных; если данные отправляются с http://www.test.com/form.php на http://www.test.com/check.php, check.php может проверить, являются ли данные отправлены с формы на http: //www.test.com/form.php. Вдобавок, если вы хотите ввести свой JavaScript-код на странице, используя такие трюки, вы сможете изменить изображения и оставить их неизменными!
В конце концов,既然 js-внедрение так опасно, что могут предложить наши собственные сайты для предотвращения внедрения js?
Метод один:
Одним из простых способов предотвратить атаку с внедрением JavaScript является повторное отображение данных в представлении, закодировав любые данные ввода пользователя веб-сайта.
Например: <%=Html.Encode(feedback.Message)%>
Что означает использование HTML-кодирования строки? При использовании HTML-кодирования строки опасные символы, такие как < и >, заменяются HTML-эквивалентами, такими как < и >. Таким образом, когда используется HTML-кодирование строки <script>alert("Boo!")</script>, она преобразуется в <script>alert("Attack!")</script>. Браузер не выполняет JavaScript-скрипты при анализе закодированной строки, а вместо этого показывает безвредную страницу.
Метод二是:
Кроме того, использование HTML-кодирования данных при их отображении на странице, можно также использовать HTML-кодирование данных перед их передачей в базу данных.
StringEscapeUtils.escapeHtml("данные, переданные на переднюю панель");
Обычно, люди предпочитают использовать первый метод, обсуждаемый в этом руководстве, а не второй метод. Проблема второго метода заключается в том, что в конечном итоге в базе данных сохраняются данные HTML-кодирования.换言之, данные в базе данных будут содержать странные символы. Что это за вред? Если нужно показать данные базы данных в виде, отличном от веб-страницы, могут возникнуть проблемы. Например, данные трудно показать в приложении Windows Forms.
Спасибо за partage: http://zxf-noimp.iteye.com/blog/1130771
Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении, также希望大家多多支持呐喊教程。
Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в порядке самостоятельной публикации, сайт не обладает правами собственности, не производится редактирование человеком, не несет ответственности за соответствующие юридические последствия. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма, пожалуйста, замените # на @) для жалоб, и предоставьте соответствующие доказательства. Как только они будут проверены, сайт немедленно удалит материалы,涉嫌侵权.