通过HTML表单和直接URL测试XSRF攻击

问题描述 投票:1回答:1

我有一个Web应用程序,我们目前正在实施XSRF保护。根据我的收集,XSRF攻击以这种方式工作:

  • 攻击者发现客户端如何与Web应用程序的服务器通信,即如何格式化其HTTP请求
  • 攻击者重写(伪造)一个http请求,命令服务器执行攻击者想要的操作
  • 现在所有攻击者都缺少的是服务器上的身份验证
  • 攻击者欺骗人们加载发送伪造请求的网页。在被欺骗的人中,那些碰巧当前登录应用程序的人将不情愿地向伪造的请求提供服务器需要执行的凭证。

为了测试我们的网站,我查看了客户端发送到服务器的POST HTTP请求,以便为其提供订单(在Internet Explorer中使用F12),并自行伪造。它看起来像这样:

https://mywebsite/Camp.aspx?
EventTarget=SaveButton
&TargetField=I+am+the+king+of+the+world

第一行是在浏览器中看到的URL(减去“?”),第二行是服务器要执行的操作,第三行是我想要更新的字段。

然后我登录网站并以两种方式测试了我的伪造请求:

A)我只需在浏览器中打开一个新标签,粘贴上面的伪造网址,然后点击输入(使用IE和Chrome测试)

B)我在另一个标签中打开一个包含内容的页面:

<html xmlns="http_www.w3.org/1999/xhtml"> 
    <body>
        <form method="post" action="https://mywebsite/Camp.aspx">
            <input type="hidden" name="EventTarget" value="SaveButton">
            <input type="hidden" name="TargetField" value="I+am+the+king+of+the+world">
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>

(用GET和POST方法测试)

我希望两个测试都是相同的,但令我惊讶的是:

  • 测试A打开网站上的目标页面并实际更新目标字段
  • 测试B打开网站上的目标页面,但不更新目标字段

我有两个问题:

  1. 为什么测试A和测试B带来不同的结果?
  2. 测试B肯定是一个有效的CSRF攻击测试(即使攻击者宁愿在不打开页面的情况下进行操作),测试A是否也有效?

谢谢!

html url csrf
1个回答
0
投票

自己解决了这个问题。我显然已经发布了请求的简化版本。真实请求包含需要进行URL编码的标志。这里是符号“$”,它在URL中编码为“%24”。

所以,如果直接URL是

https://mywebsite/Camp.aspx?
EventTarget=abc%24def

然后相应的HTML表单应该是

<html xmlns="http_www.w3.org/1999/xhtml"> 
    <body>
        <form method="post" action="https://mywebsite/Camp.aspx">
            <input type="hidden" name="EventTarget" value="abc$def">
        </form>
        <script>
            document.forms[0].submit();
        </script>
    </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.