Чтобы смоделировать 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.