Имитация CSRF-атаки - PullRequest
       6

Имитация CSRF-атаки

4 голосов
/ 07 июля 2011

Я хочу смоделировать CSRF-атаку, чтобы проверить уязвимость моего сайта.Я попробовал это на моем веб-приложении asp.net, но не смог смоделировать.Поэтому, пожалуйста, помогите мне смоделировать атаку CSRF.Я смоделировал, имея test.aspx.

  <form name="form1" id="form1" runat="server" method="post" action="mysite.com">
 <script type="text/javascript">
        document.cookie[".ASPXAUTH"] = "someaspxauth";
        document.cookie["ASP.NET_SessionId"] = "somesessionid";
        document.form1.submit();
    </script>
</form>

Что еще мне не хватает?Заранее спасибо.

1 Ответ

6 голосов
/ 07 июля 2011

Чтобы смоделировать CSRF, вы не будете включать файлы cookie или информацию о сеансе в вредоносный код. Весь смысл CSRF в том, что исполняемый код не знает вашей сессии или информации о куки. Он просто предполагает, что браузер включит это в свой запрос к приложению.

Итак, для тестирования предположим, что у вас есть страница Transfer.aspx, которая принимает метод POST и параметры txtFrom, txtTo и txtAmount, с кнопкой btnSubmit, и вы хотите попытаться перенести ее из учетной записи 1 в учетную запись 2. Ваша Вредоносный код может быть что-то вроде:

<form action="http://www.mysite.com/Transfer.aspx" method="post">
    <input type="hidden" name="txtFrom" value="1" />
    <input type="hidden" name="txtTo" value="2" />
    <input type="hidden" name="txtAmount" value="500" />
    <input type="hidden" name="__VIEWSTATE" value="[PUT VIEWSTATE VALUE HERE]" />
    <input type="hidden" name="__EVENTVALIDATION" value="[PUT EVENTVALIDATION VALUE HERE]" />
    <input type="submit" name="btnSubmit" value="Go" />
</form>

Вы должны знать заранее, каковы будут значения viewstate и eventvalidation, поэтому вам нужно будет скопировать их со своей страницы, когда вы правильно войдете в систему. Это предполагает, что ваше состояние представления является постоянным, независимо от пользователя или сеанса.

Теперь у вас есть вредоносная страница. Если вы вошли на одну вкладку, откройте ее на другой вкладке и отправите ее, если вы уязвимы, тогда ваш перевод произойдет. Причина в том, что куки, принадлежащие mysite.com, отправляются, что означает, что ваш сеанс, который находится на другой вкладке, будет использоваться.

Чтобы это исправить, вам нужно уникальное значение для каждой сессии, которое будет включено в ваше сообщение. Этого легче всего достичь, используя ViewStateUserKey и задав для него идентификатор сеанса ASP.NET или его хеш. Это сделает ваше значение __VIEWSTATE уникальным для каждого сеанса, что означает, что вы больше не будете уязвимы, потому что никто не может предсказать, каким будет ваше значение __VIEWSTATE.

...