Kali Linux渗透测试 101 手动漏洞挖掘-CSRF 漏洞

本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程

Kali Linux渗透测试(苑房弘)博客记录

1. 简介
2. 判断漏洞
3. 服务器源码
    3-1. dvwa Low 安全级别
    3-2. dvwa Medium 安全级别
    3-3. dvwa High 安全级别

1. 简介


  1. 从信任角度

    • XSS:利用用户对站点的信任,攻击者通过注入程序来修改网站来使用户浏览器被重定向等
    • CSRF:利用站带你对已经身份认证的用户的信任,攻击者伪造一个链接误导用户点击链接来使用用户的身份认证来访问服务器
  2. 结合社工在身份认证会话过程中实现供给

    • 修改账号密码、个人信息(email、收货地址)
    • 发送伪造的业务请求(网银、购物、投票)
    • 关注他人社交账号、推送博文
    • 在用户非自愿、不知情的情况下提交请求
  3. 业务逻辑漏洞

    • 服务器对关键操作缺少确认机制
    • 自动扫描程序无法发现此漏洞
  4. 漏洞利用条件

    • 被害用户已经完成身份认证
    • 新请求的提交不需要重新身份认证或确认机制
    • 攻击者必须了解 Web APP 请求的参数构造
    • 诱使用户触发攻击的指令(社工)
  5. BurpSuite CSRF PoC gennretor

    • POST / GET 方法
  6. 自动扫描程序的检测方法

    • 在请求和响应过程中检查是否存在 anti-CSRF tokec 名
    • 见擦汗服务器是否严恒 anti-CSRF token 的名值
    • 检查 tiken 中可编辑的字符串
    • 检查 referer 头是否可以伪造
  7. 对策

    • captcha
    • anti-CSRF token
    • referer 头
    • 降低会话超时时间

2. 判断漏洞


  1. 新的修改密码请求不需要输入原密码、


  2. 攻击者修改服务器 URL 地址,诱导用户点击修改密码

    http://10.10.10.132/dvwa/vulnerabilities/csrf/?password_new=aaaaaaaa&password_conf=aaaaaaaa&Change=Change
    # 放在 kali 本机,kali 模拟访问
    

  3. 普通用户在正常登陆 dvwa 的时候,点击此链接

    # 被攻击者的密码被修改
    



    # 攻击者可以使用新的密码进行登录
    
  4. 生成 PoC 文件,证明漏洞存在



    # 将 URL 保存至文件诱导用户访问(同上)
    



2. 服务器源码

1. dvwa Low 安全级别

<?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> Passwords did not match. </pre>";             
        } 
    } 
?>  

2. dvwa 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>' ); 

                echo "<pre> Password Changed </pre>";         
                mysql_close(); 
            } 
            else{         
                echo "<pre> Passwords did not match. </pre>";             
            }    
        }   
    } 
?>

# 只需要使用 burpsuite 修改 referer 值为本机

3. dvwa High 安全级别

<?php        
    if (isset($_GET['Change'])) { 

        // Turn requests into variables 
        $pass_curr = $_GET['password_current']; 
        $pass_new = $_GET['password_new']; 
        $pass_conf = $_GET['password_conf']; 

        // Sanitise current password input 
        $pass_curr = stripslashes( $pass_curr ); 
        $pass_curr = mysql_real_escape_string( $pass_curr ); 
        $pass_curr = md5( $pass_curr ); 

        // Check that the current password is correct 
        $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> Passwords did not match or current password incorrect. </pre>";             
        } 
    } 
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值