Translated chapter 'AJAX Security'

Fixed small error in Http Basics lesson

git-svn-id: http://webgoat.googlecode.com/svn/trunk/webgoat@425 4033779f-a91e-0410-96ef-6bf7bf53c507
This commit is contained in:
white.tiger.russia@gmail.com 2011-05-23 14:58:39 +00:00
parent f0978e6422
commit 443f7e7e75
10 changed files with 108 additions and 101 deletions

View File

@ -1,12 +1,11 @@
<div align="Center">
<p><b>Lesson Plan Title: </b>Client Side Filtering</p>
<p><b>Название урока: </b>Фильтрация данных на стороне клиента</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
<p><b>Тема для изучения:</b> </p>
<!-- Start Instructions -->
It is always a good practice to send to the client only information which they are supposed
to have access to. In this lesson, too much information is being sent to the client, creating
a serious access control problem.
Всегда считается хорошей практикой отправлять на сторону клиента только ту информацию, доступ к которой он имеет.
В данном уроке на сторону клиента будет отправлено очень много информации, что создаст серьёзные проблемы с контролем доступа к ней.
<!-- Stop Instructions -->
<p><b>General Goal(s):</b> </p>
For this exercise, your mission is exploit the extraneous information being returned by the
server to discover information to which you should not have access.
<p><b>Основные цели и задачи:</b> </p>
Ваша цель состоит в том, чтоб среди принимаемых со стороны сервера данных найти ту
информацию, доступа к которой у вас нет.

View File

@ -1,15 +1,14 @@
<div align="Center">
<p><b>Lesson Plan Title: </b>Insecure Client Storage</p>
<p><b>Название урока: </b>Insecure Client Storage</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
<p><b>Тема для изучения:</b> </p>
<!-- Start Instructions -->
It is always a good practice to validate all input on the server side. Leaving the
mechanism for validation on the client side leaves it vulnerable to reverse
engineering. Remember, anything on the client side should not be
considered a secret.
Хорошей практикой является проверка на стороне сервера абсолютно всех принимаемых данных.
Реализация механизмов проверки только на стороне клиента делает приложение уязвимым.
Запомните, всё что отправляется на сторону клиента не должно содержать критически важных
данных или механизмов.
<!-- Stop Instructions -->
<p><b>General Goal(s):</b> </p>
For this exercise, your mission is to discover a coupon code to receive an unintended
discount. Then, exploit the use of client side validation to submit an order with a
cost of zero.
<p><b>Основные цели:</b> </p>
В данном упражнении первая ваша задача - обнаружить действующий код купона обеспечивающего скидку.
Далее необходимо исследовать механизм проверки вводимых данных и добиться покупки товара за нулевую цену.

View File

@ -1,23 +1,23 @@
<div align="Center">
<p><b>Lesson Plan Title:</b> How to Perform DOM Injection Attack. </p>
<p><b>Название урока:</b> Выполнение атаки класса 'DOM-инъекция'. </p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
How to perform DOM injection attacks.
<p><b>Тема для изучения:</b> </p>
Выполнение атаки класса 'DOM-инъекция'.
<br>
<div align="Left">
<p>
<b>How the attacks works:</b>
<b>Как работают атаки данного вида:</b>
</p>
Some applications specially the ones that uses AJAX manipulates and updates the DOM
directly using javascript, DHTML and eval() method.<br>
An attacker may take advantage of that by intercepting the reply and try to inject some
javascript commands to exploit his attacks.
Некое приложение использует технологию AJAX для манипулирования DOM страницы и его обновления
по средствам JavaScript, DHTML и функции eval().<br>
В данном случае атакующий может каким-либо образом попытаться прехватить ответ сервера, и поместить
в него набор вредоносных JavaScript-команд.
</div>
<p><b>General Goal(s):</b> </p>
<p><b>Основные цели и задачи:</b> </p>
<!-- Start Instructions -->
* Your victim is a system that takes an activation key to allow you to use it.<br>
* Your goal should be to try to get to enable the activate button.<br>
* Take some time to see the HTML source in order to understand how the key validation process works.<br>
* Ваша жертва - это система требующая от клиентов ключ активации для её использования.<br>
* Ваша задача состоит в том, чтоб каким-либо образом разблокировать кнопку активации.<br>
* Уделите немного времени просмотру HTML-кода страницы и вы поймёте как работает весь механизм активации.<br>
<!-- Stop Instructions -->

View File

@ -1,15 +1,15 @@
<div align="Center">
<p><b>Lesson Plan Title: </b>DOM Based Cross Site Scripting (XSS)</p>
<p><b>Название урока: </b>Межсайтовый скриптинг основанный на DOM (DOM XSS)</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
<p><b>Тема для изучения:</b> </p>
<!-- Start Instructions -->
The Document Object Model (DOM) presents an interesting problem from
a security standpoint. It allows the content of a web page to be dynamically
modified, but that can be abused by attackers during a malicious code injection. XSS,
a type of malicious code injection, can occur when unvalidated user input is used directly
to modify the content of a page on the client side.
Объектная модель документа (DOM), с точки зрения безопаности, создаёт собой одну интересную проблему.
Она позволяет содержимому веб-страниц динамически меняться, что само по себе является хорошей возможностью
не только для веб-мастеров, но и для злоумышленников. С её помощью нападающие могут помещать в код страниц
вредоносные вставки (XSS), если в процессе модификации их содержимого на стороне клиента не происходит
достаточной проверки данных вводимых пользователем.
<!-- Stop Instructions -->
<p><b>General Goal(s):</b> </p>
For this exercise, your mission is to use this vulnerability to inject
malicious code into the DOM. Then in the last stage, you will correct
the flaws in the code to address the vulnerability.
<p><b>Основные цели и задачи:</b> </p>
В данном упражнении вам необходимо с использованием этой уязвимости поместить вредоносный код
в объектную модель документа. А в самом конце вы исправите ошибку приводящую к её появлению.

View File

@ -1,14 +1,16 @@
<div align="Center">
<p><b>Lesson Plan Title: </b>Dangerous Use of Eval</p>
<p><b>Название урока: </b>Опасное использование eval()</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
<p><b>Тема для изучения:</b> </p>
<!-- Start Instructions -->
It is always a good practice to validate all input on the server side. XSS can occur
when unvalidated user input is reflected directly into an HTTP response. In this lesson, unvalidated
user-supplied data is used in conjunction with a Javascript eval() call. In a reflected
XSS attack, an attacker can craft a URL with the attack script and store it on another
website, email it, or otherwise trick a victim into clicking on it.
Хорошей практикой является проверка на стороне сервера всех принимаемых данных.
В случаях когда непроверенные пользовательские данные напрямую отражаются в HTTP-ответе имеется
риск появления XSS-уязвимостей. В текущем приложении не проходящие проверку пользовательские данные помещаются
в строку передаваемую функции eval(). В подобных ситуациях (они называются отражёнными XSS-уязвимостями)
злоумышленник может составить URL содержащий специальные вредоносные вставки, и опубликовать его
на стороннем веб-сайте, отправить по почте или любым другим способом донести его до жертвы.
<!-- Stop Instructions -->
<p><b>General Goal(s):</b> </p>
For this exercise, your mission is to come up with some input which, when run through eval,
will execute a malicious script. In order to pass this lesson, you must 'alert()' document.cookie.
<p><b>Основные цели и задачи:</b> </p>
Ваша цель - добиться выполнения произвольного JavaScript-кода в данном приложении используя
уже имеющийся в странице вызов eval(). Для того чтоб успешно завершить урок вы дложны вызвать выполнение строки
'alert(document.cookie)'.

View File

@ -23,7 +23,7 @@
предназначаются для CGI-программ использующих метод POST для принятия информации.<br>
<p><b>Основные цели и задачи:</b> </p>
<!-- Start Instructions -->
Введите ваше имя в поле расположенное ниже и нажмите "go" для отправки формы. Сервер примет ваш запрос, выстроит
Введите ваше имя в поле расположенное ниже и нажмите "Вперёд!" для отправки формы. Сервер примет ваш запрос, выстроит
полученную строку в обратном порядке и выведет результат на экран. Данный пример иллюстрирует основы обработки данных
полученных из HTTP-запроса.
<br/><br/>

View File

@ -1,24 +1,25 @@
<div align="Center">
<p><b>Lesson Plan Title:</b> How to Perform JSON Injection </p>
<div align="Center">
<p><b>Название урока:</b> Выполнение атак класса 'JSON-инъекция'</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
This lesson teaches how to perform JSON Injection Attacks.
<br>
<div align="Left">
<p><b>Тема для изучения:</b> </p>
На данном уроке вы научитесь осуществлять атаки класса 'JSON-инъекция'
<br>
<div align="Left">
<p>
<b>How the attacks works:</b>
<b>Как работают такие атаки:</b>
</p>
JavaScript Object Notation (JSON) is a simple and effective lightweight data exchange format. JSON can be in a lot of forms such as arrays, lists, hashtables and other data structures.
JSON is widely used in AJAX and Web2.0 application and is favored by programmers over XML because of its ease of use and speed.
However, JSON, like XML is prone to Injection attacks. A malicious attacker can inject the reply from the server and inject some arbitrary values in there.
JSON - это простой, &quot;легковесный&quot; и эффективный формат передачи данных. Данные,
передаваемые с его помощью, могут иметь различные формы. Например это может быть массив, список, хеш-таблица и т.д.
JSON обычно используется в AJAX- и Web2.0-приложениях, постепенно вытесняя XML за счёт своей простоты и скорости обработки.
В то же время JSON, как и XML, предрасположен к атакам инъективного класса. Например злоумышленник может перехватить ответ
сервера и внедрить в него произвольные данные.
</div>
<p><b>General Goal(s):</b> </p>
<p><b>Основные цели и задачи:</b> </p>
<!-- Start Instructions -->
* You are traveling from Boston, MA- Airport code BOS to Seattle, WA - Airport code SEA.<br>
* Once you enter the three digit code of the airport, an AJAX request will be executed asking for the ticket price.<br>
* You will notice that there are two flights available, an expensive one with no stops and another cheaper one with 2 stops.<br>
* Your goal is to try to get the one with no stops but for a cheaper price.
<!-- Stop Instructions -->
* Вы летите из Бостона, с аэропорта с кодом BOS, в Сиэтл, в аэропорт с кодом SEA.<br>
* Когда вы введёте трёхзначные коды аэропортов, на сервер, средствами AJAX, уйдёт запрос о цене билета.<br>
* Вам сообщат что есть два доступных варианта - один без остановок, а второй с двумя остановками.<br>
* Ваша задача попытаться заказать билет без остановок за цену билета с двумя остановками.
<!-- Stop Instructions -->

View File

@ -1,13 +1,13 @@
<div align="Center">
<p><b>Lesson Plan Title: </b>Same Origin Policy Protection</p>
<p><b>Название урока: </b>Защита с помощью политики одного источника (Same Origin Policy)</p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
<p><b>Тема для изучения:</b> </p>
<!-- Start Instructions -->
A key element of AJAX is the XMLHttpRequest (XHR), which allows javascript to make asynchronous
calls from the client side to a server. However, as a security measure these requests may
only be made to the server from which the client page originated.
Ключевым элементом технологии AJAX является компонент XMLHttpRequest (XHR). Он позволяет с помощью JavaScript
отправлять запросы на сторону сервера в асинхронном режиме. Из соображений безопасности запрос можно отправить
только на тот домен, с которого загружена текущая страница.
<!-- Stop Instructions -->
<p><b>General Goal(s):</b> </p>
This exercise demonstrates the Same Origin Policy Protection. XHR requests
can only be passed back to the originating server. Attempts to pass data to
a non-originating server will fail.";
<p><b>Основные цели и задачи:</b> </p>
Упражнение демонстрирует механизмы защиты обеспеченные политикой одного источника (Same Origin Policy)
Через компонент XHR можно отправлять запрос лишь на тот сервер, с которого была загружена текущая
страница. Попытки отправить запрос на другой сервер потерпят неудачу. ";

View File

@ -1,24 +1,27 @@
<div align="Center">
<p><b>Lesson Plan Title:</b> How to Perform Silent Transactions Attacks. </p>
<p><b>Название урока:</b> Атаки связанные со скрытыми операциями. </p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
This lesson teaches how to perform silent transactions attacks.
<p><b>Тема для изучения:</b> </p>
На данном уроке вы поймёте как осуществляются атаки связанные со скрытыми операциями.
<br>
<div align="Left">
<p>
<b>How the attacks works:</b>
<b>Как работают атаки такого рода:</b>
</p>
Any system that silently processes transactions using a single submission is dangerous to the client.
For example, if a normal web application allows a simple URL submission, a preset session attack will
allow the attacker to complete a transaction without the users authorization.
In Ajax, it gets worse: the transaction is silent; it happens with no user feedback on the page,
so an injected attack script may be able to steal money from the client without authorization.<br>
Некоторые приложения производят манипуляции с чувствительными пользовательскими данными (например с деньгами)
в скрытом виде если получат разрешение на это хотя бы один раз. Это таит множество опасностей.
Например, в простом веб-приложении для того чтоб от имени клиента обратиться к любому URL необходимо
получить его идентификатор сессии (или другие данные, которые обеспечат необходимую идентификацию).
В случае с AJAX всё намного проще: обращение к серверу может происходить в скрытом режиме без оповещения об этом пользователя.
Следовательно, внедрённый каким-либо образом в такую страницу вредоносный скрипт может осуществлять важные
операции совершенно незаметно для клиента. Например переводить его деньги со счёта на счёт.<br>
</div>
<p><b>General Goal(s):</b> </p>
<p><b>Основные цели и задачи:</b> </p>
<!-- Start Instructions -->
* This is a sample internet banking application - money transfer page.<br>
* It shows below your balance, the account you are transferring to and amount you will transfer.<br>
* The application uses AJAX to submit the transaction after doing some basic client side validations.<br>
* Your goal is to try to bypass the user's authorization and silently execute the transaction.<br>
* Это простейшее приложение интернет-банкинга - страница перевода денег.<br>
* Здесь отображается сумма находящаяся на балансе, поле для ввода аккаунта, которому деньги будут переведены, и поле
для суммы перевода.<br>
* Приложение использует AJAX для отправки транзакции после проведения элементарной проверки данных на клиентской стороне.<br>
* Ваша цель - попробовать осуществить от имени пользователя денежный перевод в скрытом виде.<br>
<!-- Stop Instructions -->

View File

@ -1,19 +1,22 @@
<div align="Center">
<p><b>Lesson Plan Title:</b> How to Perform XML Injection Attacks. </p>
<p><b>Название урока:</b> Как выполняются атаки класса 'XML-инъекция'. </p>
</div>
<p><b>Concept / Topic To Teach:</b> </p>
This lesson teaches how to perform XML Injection attacks.
<p><b>Тема для изучения:</b> </p>
На данном уроке вы научитесь осуществлять атаки класса 'XML-инъекция'
<br>
<div align="Left">
<p>
<b>How the attacks works:</b>
<b>Как работает данный вид атак:</b>
</p>
AJAX applications use XML to exchange information with the server. This XML can be easily intercepted and altered by a malicious attacker.
AJAX-приложения используют XML для передачи данных на сервер. Ушедший XML может быть легко перехвачен
и изменён злоумышленником.
</div>
<p><b>General Goal(s):</b> </p>
<p><b>Основные цели:</b> </p>
<!-- Start Instructions -->
WebGoat-Miles Reward Miles shows all the rewards available. Once you've entered your account ID, the lesson will show you your balance and the products you can afford. Your goal is to try to add more rewards to your allowed set of rewards. Your account ID is 836239.
Вы видите список призов, которые можно получить по программе 'WebGoat-Miles Reward Miles'.
Когда вы введёте ID своего аккаунта приложение отобразит вам ваш баланс и список призов, которые
вы можете заказать. Цель - заказать призы на которые у вас не хватает очков.
ID вашего аккаунта 836239.
<!-- Stop Instructions -->