【安全牛学习笔记】CSRF

来源:互联网 发布:金山数据恢复软件多大? 编辑:程序博客网 时间:2024/05/18 12:42

CSRF                                         

Cross-site request forgery               

与XSS经常混淆                                 

从信任的角度来区分                           

    XSS:利用用户对站点的信任                 

    CSRF:利用站点对已经身份认证的信任        

结合社工在身份认证会话过程中实现攻击          

    修改账号密码、个人信息(email、收获地址) 

    发送伪造的业务请求(网银、购物、投票)    

    关注他人社交账号、推送博文                

    在用户非自愿、不知情的情况下提交请求

CSRF                                          

业务逻辑漏洞                                  

    对关键操作缺少确认机制                    

    自动扫描程序无法发现此类漏洞              

漏洞利用条件                                  

    被害用户已经完成身份认证                  

    新请求的提交不需要重新身份认证或确认机制  

    攻击者必须了解Web APP请求的参数构造       

    诱使用户触发攻击的指令(社工)            

Burpuste CSRF PoC generator                   

    Post/Get方法

root@K:~# apt-get install linux-image-4.4.0-kali-amd64

root@K:~# apt-get install linux-headers-4.4.0-kali-amd64

root@K:~# uname -u

Linux K 4.4.0-kali-amd64 #1 SMP Debian 4.4.6-1kali (2016-03-18) x86_64 GNU/Linux

192.168.1.115/dvwa/login.php

root@K:~# netstat -pantu | grep :80

tcp        0      0 127.0.0.0:80         0.0.0.0:*                 LISTEN

665/gsad

tcp        0      0 127.0.0.0:8080       :::*                      LISTEN

2081/java

tcp        0      0 127.0.0.0:8080       127.0.0.1:60322           TIME_WAIT

.

root@K:~# Openvas-stop

root@K:~# netstat -pantu | grep :80

tcp        0      0 127.0.0.0:8080       :::*                      LISTEN

2081/java

tcp        0      0 127.0.0.0:8080       127.0.0.1:60322           TIME_WAIT

.

root@K:~# service apache2 start

root@K:~# cd /var/www/html/

root@K:~/var/www/html# gedit 1.html

<a herf ='http://192.168.1.115/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change'>csrf</a>

----------------------------------------------------------------------------

低安全代码

<?php

    if (isset($_GET['Change'])){

        // Turn requests into variables

        $pass_new = $_GET['password_new'];

        $pass_conf = $_GET['password_conf'];

        if (($pass_new == $pass_conf)){

            $pass_new = mysql_real_escape_string($pass_new);

            $pass_new = md5(pass_new);

            $insert="UPDATE 'users' SET password = '$pass_new' WHERE user = 'admin';";

            $result=mysql_query($insert) or die ('<pre>' . mysql_error() . '</pre>' );

            echo "<pre> Password Changed </pre>";

            mysql_close();

        }

        else{

            echo "<pre> Password did not match . </pre>";

        }

    }

}

?>

--------------------------------------------------------------------------------

中安全代码

<?php

    if (isset($_GET['Change'])){

        // Checks the http referer header

        if (eregi ( "127.0.0.1", $_SERVER['HTTP_REFERER'] ) ){

            // Turn requests into variables

            $pass_new = $_GET['password_new'];

            $pass_conf = $_GET['password_conf'];

            if (($pass_new == $pass_conf)){

                $pass_new = mysql_real_escape_string($pass_new);

                $pass_new = md5(pass_new);

                $insert="UPDATE 'users' SET password = '$pass_new' WHERE user = 'admin';";

                $result=mysql_query($insert) or die ('<pre>' . mysql_error() . '</pre>' );

                echo "<pre> Password Changed </pre>";

                mysql_close();

            }

            else{

                echo "<pre> Password did not match . </pre>";

            }

        }

    }

}

?>

----------------------------------------------------------------------------------

高安全代码

<?php

    if (isset($_GET['Change'])){

        // Turn request into variables

        $pass_curr = $_GET['password_current'];

        $pass_new = $_GET['password_new'];

        $pass_conf = $_GET['password_conf'];

        // Snitise current password input

        $pass_curr = stripslashed ($pass_curr );

        $pass_curr = mysql_real_escape_string( $pass_curr );

        $pass_curr = md5( $pass_curr );

        // Check that hte  current password is corrent

        $qry = "SELECT password FROM 'users' WHERE user='admin' AND password='$pass_curr';";

        $result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );

        if (($pass_new == $pass_conf) && ( $result && mysql_num_rows( $result ) == 1 )){

            $pass_new = mysql_real_escape_string($pass_new);

            $pass_new = md5(pass_new);

            $insert="UPDATE 'users' SET password = '$pass_new' WHERE user = 'admin';";

            $result=mysql_query($insert) or die ('<pre>' . mysql_error() . '</pre>' );

            echo "<pre> Password Changed </pre>";

            mysql_close();

        }

        else{

            echo "<pre> Password did not match . </pre>";

        }

    }

}

?>

----------------------------------------------------------------------------------

CSRF                                                

自动扫描程序的检测方法                              

    在请求和响应过程中检查是否存在anti-CSRF token名

    检查服务器是否验证anti-CSRF token的名值         

    检查token中可编辑的字符串                       

    检查referrer头是否可以伪造                      

对策                                                

    Captcha                                         

    anti-CSRF token                                 

    Referrer头                                      

    降低会话超时时间

该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂

Security+认证为什么是互联网+时代最火爆的认证?


      牛妹先给大家介绍一下Security+


        Security+ 认证是一种中立第三方认证,其发证机构为美国计算机行业协会CompTIA ;是和CISSP、ITIL 等共同包含在内的国际 IT 业 10 大热门认证之一,和CISSP偏重信息安全管理相比,Security+ 认证更偏重信息安全技术和操作。

       通过该认证证明了您具备网络安全,合规性和操作安全,威胁和漏洞,应用程序、数据和主机安全,访问控制和身份管理以及加密技术等方面的能力。因其考试难度不易,含金量较高,目前已被全球企业和安全专业人士所普遍采纳。

Security+认证如此火爆的原因?  

       原因一:在所有信息安全认证当中,偏重信息安全技术的认证是空白的, Security+认证正好可以弥补信息安全技术领域的空白 。

      目前行业内受认可的信息安全认证主要有CISP和CISSP,但是无论CISP还是CISSP都是偏重信息安全管理的,技术知识讲的宽泛且浅显,考试都是一带而过。而且CISSP要求持证人员的信息安全工作经验都要5年以上,CISP也要求大专学历4年以上工作经验,这些要求无疑把有能力且上进的年轻人的持证之路堵住。在现实社会中,无论是找工作还是升职加薪,或是投标时候报人员,认证都是必不可少的,这给年轻人带来了很多不公平。而Security+的出现可以扫清这些年轻人职业发展中的障碍,由于Security+偏重信息安全技术,所以对工作经验没有特别的要求。只要你有IT相关背景,追求进步就可以学习和考试。

       原因二: IT运维人员工作与翻身的利器。

       在银行、证券、保险、信息通讯等行业,IT运维人员非常多,IT运维涉及的工作面也非常广。是一个集网络、系统、安全、应用架构、存储为一体的综合性技术岗。虽然没有程序猿们“生当做光棍,死亦写代码”的悲壮,但也有着“锄禾日当午,不如运维苦“的感慨。天天对着电脑和机器,时间长了难免有对于职业发展的迷茫和困惑。Security+国际认证的出现可以让有追求的IT运维人员学习网络安全知识,掌握网络安全实践。职业发展朝着网络安全的方向发展,解决国内信息安全人才的匮乏问题。另外,即使不转型,要做好运维工作,学习安全知识取得安全认证也是必不可少的。

        原因三:接地气、国际范儿、考试方便、费用适中!

CompTIA作为全球ICT领域最具影响力的全球领先机构,在信息安全人才认证方面是专业、公平、公正的。Security+认证偏重操作且和一线工程师的日常工作息息相关。适合银行、证券、保险、互联网公司等IT相关人员学习。作为国际认证在全球147个国家受到广泛的认可。

        在目前的信息安全大潮之下,人才是信息安全发展的关键。而目前国内的信息安全人才是非常匮乏的,相信Security+认证一定会成为最火爆的信息安全认证。

原创粉丝点击