CSRF学习笔记之CSRF的攻击与防御以及审计00x2

Posted 可我浪费着我寒冷的年华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSRF学习笔记之CSRF的攻击与防御以及审计00x2 相关的知识,希望对你有一定的参考价值。

Medium完整代码:

<?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>\' );
                        
                $html .= "<pre> Password Changed </pre>";        
                mysql_close();
            }
    
            else{        
                $html .= "<pre> Passwords did not match. </pre>";            
            }    

        }
        
    }
?>
View Code

在第六行增加了一个函数,这个函数相对于我较为生僻。eregi:不区分大小写的正则表达式匹配  ps:这个函数已经被高版本的PHP遗弃了。

关于eregi函数的案例:

<?php 
$string = "hello world";
if(eregi(\'E\',$string)){//匹配E是否再$string变量中,不区分大小写
    echo "xxx";//如果存在输出xxx
}else{
    echo "bbbbb";//否则输出bbbbb
}
 ?>

知道了那个函数就很容易知道,这个Medium的防御措施是如何的。既然对来源的$_SERVER[\'HTTP_REFERER\']即referer进行了匹配,那么应该咋绕过呢?

绕过方法:

文件名也是在referer当中,那么我们就可以将其匹配的$_SERVER[\'HTTP_REFERER\']当作我们的文件明来绕过。

比如攻击者的域名是www.aaaa.com

被攻击者的域名是:www.bbb.com

在攻击者的服务器上上传一个文件,名字改为:www.bbb.com。即www.aaa.com/www.bbb.com

如此便成功绕过。

 

以上是关于CSRF学习笔记之CSRF的攻击与防御以及审计00x2 的主要内容,如果未能解决你的问题,请参考以下文章

六十五:CSRF攻击与防御之CSRF防御之form表单防御

前端Web前端安全策略之CSRF的攻击与防御

六十六:CSRF攻击与防御之CSRF防御之ajax防御和ajax封装

Web前端安全策略之CSRF的攻击与防御

技术干货 | CSRF攻击原理以及防御

六十三:CSRF攻击与防御之系统准备之登录与转账功能