• 【笔记】网易微专业-Web安全工程师-04.WEB安全实战-4.CSRF


    某天你登陆了某银行的网上银行,正在欣赏自己的余额,突然接收到一个QQ消息,“XX大学校花全裸照”。你兴奋地点击链接一看,照片是草地上一朵小花,背后是XX大学的大门。你生气地关掉了网页,过了几分钟,突然收到银行转账成功提醒短信!这可能就是中了CSRF的招。

    CSRF(Cross-site request forgery):跨站请求伪造,是指攻击者伪装成受害者向服务器进行请求,利用的是受害者尚未生效的身份认证信息,如cookie,session等。

    DVWA实战:

    1. 打开phpStudy或xampp,运行Apach和MySQL;

    2. 浏览器进入DVWA主界面,在左侧栏选择DVWA Security安全等级为Low,然后进入CSRF;

    作为用户,当你输入新密码提交后,就能完成密码修改,那怎么才能在不知不觉中修改掉你的密码呢?

    3. 这里我们需要利用一下Firefox的插件TamperData,搜索安装之后打开,看到如下页面:

    我们通过浏览器的每一笔请求,都会被TamperData记录。我们可以看到当我们改密码的时候,请求头里的Referer是如下信息:

    Referer=http://localhost/DVWA-1.9/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change

    因此,如果我们能构造同样的报文头,改掉其中的password_new和password_conf,向服务器发送请求,就能改掉该用户的密码,而TamperData就能帮我们做到。

    4. 点击TamperData菜单的Start Tamper,这样当用户提交修改密码请求时,我们能拦截下这一请求,并修改其中的内容(tamper),例如:我们把Referer里的密码修改为password3,然后submit,这时收到返回200,说明修改成功。

    5. 当然,我不可能坐在你面前,等待你每次提交用户,然后把它拦截下来修改。但是,如果我发给你一个链接:

    http://localhost/DVWA-1.9/vulnerabilities/csrf/?password_new=password3&password_conf=password3&Change=Change

    当你正在浏览dvwa页面,cookie未过期时点击了它,那么就会不知不觉中密码被改成password3。

    6. 不过正常的人看到这样的链接,肯定不敢轻易去点,那么如果是短链接形式呢?t.cn/Dvwa,也许你就不小心点了。更进一步,如果我在自己的服务器构造了一个页面,加载onload的时候就自动完成请求,然后用美女图片诱骗你来点击,就像文章最前面描述的那样,应该很多人会中招吧!

    7. 上面就是一个简单的CSRF,接下去我们把安全等级切换为medium,在自己的机器上采用拦截修改的方式仍然能成功,但是如果采用黑客服务器构造页面诱骗受害者点击的方式,方法失效。查看后台源码,关键的一行:

        // Checks to see where the request came from
        if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] ) ) {

    发现后台对Referer中是否与主机Host名一致,换言之,对服务器的请求必须来源于服务器的页面,即请求来源不允许跨站!那么跨站时应该怎么办?

    这里既然只是单纯要求Referer中包含主机名,那么虽然我的主机名是128.199.242.5,但是我可以把我的文件夹或者html文件命名为真正的主机名,那么在Referer中就会带上真正主机名,就可以通过检测啦。

    http://128.199.242.5/hack/localhost.html

    8. 接下去,我们调高安全等级为high,我们发现前面的方法不管用了,查看后台源码,发现多了Token的生成和校验:

    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    ......
    // Generate Anti-CSRF token
    generateSessionToken();

    多么熟悉的身影.....,记得我们在第4章第2节里介绍暴力破解时曾经介绍过Token的功能和破解,因此如果能够通过用户的cookie获得每一次服务器返回的token,问题就迎刃而解。但是目前浏览器都不允许跨站请求,因此企图在自己服务器构造页面获取用户token比较难,所以一种思路是结合之后的XSS获取token。

    9. 最后我们来看看impossible等级的CSRF,当切换后,我们发现输入框里多了一栏,“原始密码”,攻击者在不知道用户密码的情况下很难通过跨站伪造请求。

    实战心得:

    CSRF本质是利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。有效的防护措施就是不要轻易点击任何不可信的链接和图片,服务器也可通过token和需要提供原始信息的方式来提高安全等级。

  • 相关阅读:
    关于获取系统平台下的根目录名,分隔符等等
    AlineTransform 的应用
    网上书店例子(JSP和JavaBean)
    在Servlet中实现永久计数器思想
    关于TOmcat的一些小小的知识
    Java 编程基础,应用与实例
    日历类显示多一行
    使用UPnP连接远程交易服务(翻译)
    涂鸦板代码
    网站
  • 原文地址:https://www.cnblogs.com/kplayer/p/8467635.html
Copyright © 2020-2023  润新知