DVWA1.8全级别之CSRF

DVWA全级别之CSRF

CSRF(Cross-site request forgery)

CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

下面对3种级别的代码进行分析。

LOW

服务器端核心代码

<?php 

if( isset( $_GET[ 'Change' ] ) ) { 
    // Get input 
    $pass_new  = $_GET[ 'password_new' ]; 
    $pass_conf = $_GET[ 'password_conf' ]; 

    // Do the passwords match? 
    if( $pass_new == $pass_conf ) { 
        // They do! 
        $pass_new = mysql_real_escape_string( $pass_new ); 
        $pass_new = md5( $pass_new ); 

        // Update the database 
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; 
        $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' ); 

        // Feedback for the user 
        echo "<pre>Password Changed.</pre>"; 
    } 
    else { 
        // Issue with passwords matching 
        echo "<pre>Passwords did not match.</pre>"; 
    } 

    mysql_close(); 
} 

?>

可以看到,服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制(当然服务器对请求的发送者是做了身份验证的,是检查的cookie,只是这里的代码没有体现= =)。

漏洞利用

1、构造链接

A) 最基础的:

http://192.168.232.130/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

当受害者点击了这个链接,他的密码就会被改成password(这种攻击显得有些拙劣,链接一眼就能看出来是改密码的,而且受害者点了链接之后看到这个页面就会知道自己的密码被篡改了)

需要注意的是,CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie,所以会自动跳转到登录界面。
有人会说,这个链接也太明显了吧,不会有人点的,没错,所以真正攻击场景下,我们需要对链接做一些处理。

B) 我们可以使用短链接来隐藏URL(点击短链接,会自动跳转到真实网站):
因为本地搭的环境,服务器域名是ip所以无法生成相应的短链接= =,实际攻击场景下只要目标服务器的域名不是ip,是可以生成相应短链接的。
需要提醒的是,虽然利用了短链接隐藏url,但受害者最终还是会看到密码修改成功的页面,所以这种攻击方法也并不高明。

C) 构造攻击页面

现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。这里为了方便演示(才不是我租不起服务器= =),就在本地写一个test.html,下面是具体代码。

<img src="http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0" style="display:none;"/>

<h1>404<h1>

<h2>file not found.<h2>

当受害者访问test.html时,会误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为了hack。
在这里插入图片描述

Medium

服务器端核心代码

<?php 

if( isset( $_GET[ 'Change' ] ) ) { 
    // Checks to see where the request came from 
    if( eregi( "127.0.0.1", $_SERVER[ 'HTTP_REFERER' ] ) ) { 
        // Get input 
        $pass_new  = $_GET[ 'password_new' ]; 
        $pass_conf = $_GET[ 'password_conf' ]; 

        // Do the passwords match? 
        if( $pass_new == $pass_conf ) { 
            // They do! 
            $pass_new = mysql_real_escape_string( $pass_new ); 
            $pass_new = md5( $pass_new ); 

            // Update the database 
            $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; 
            $result = mysql_query( $insert ) or die( '<pre>' . mysql_error() . '</pre>' ); 

            // Feedback for the user 
            echo "<pre>Password Changed.</pre>"; 
        } 
        else { 
            // Issue with passwords matching 
            echo "<pre>Passwords did not match.</pre>"; 
        } 
    } 
    else { 
        // Didn't come from a trusted source 
        echo "<pre>That request didn't look correct.</pre>"; 
    } 

    mysql_close(); 
} 

?> 

相关函数说明

int eregi(string pattern, string string)

检查string中是否含有pattern(不区分大小写),如果有返回True,反之False。

可以看到,Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含127.0.0.1,希望通过这种机制抵御CSRF攻击。

漏洞利用

过滤规则是http包头的Referer参数的值中必须包含127.0.0.1
我们可以将攻击页面命名为127.0.0.1.html,页面被放置在攻击者的服务器里,就可以绕过了

High

首先在界面上就可以看到不同:这里需要管理员首先输入当前密码,然后才能重新设置密码。这就是目前非常有效的一种防御CSRF攻击的方法:二次确认。
在这里插入图片描述
所谓二次确认,就是在调用某些功能时进行二次验证,如:删除用户时,产生一个提示对话框,提示“确定删除用户吗?”。转账操作时,要求用户输入二次密码。另外,设置验证码也可以起到相同的效果。

当二次验证后,即使用户打开漏洞CSRF攻击页面,也不会直接去执行,而需要用户再次输入才可以完成攻击。这样,当用户突然收到提示后,可能会心存怀疑,就不会再乖乖地中招。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DVWA(Damn Vulnerable Web Application)是一个用于学习Web应用安的漏洞测试平台。DVWA包含许多不同的安漏洞,包括XSS、文件管理、SQL注入等等。本教程将介绍如何通过级别通关DVWA。 第一步是将DVWA设置为“high”级别。这可以通过登录到DVWA控制台并选择“设置”进行设置。这将增加漏洞的难度,其中包括需要更深入的SQL注入和更高级的漏洞。 第二步是先从最基本的漏洞开始,例如XSS攻击。攻击可以通过在-input参数中插入JavaScript代码来实现。可以使用常用的XSS攻击向量,如“<script>alert('XSS')</script>”,并查看结果。 第三步是学习如何实现SQL注入漏洞。这可以通过在输入框中插入'MS SQL'或其他熟悉的SQL注入语句来实现。可以使用基本的SELECT和FROM语句,并在WHERE子句中实现注入。 第四步是学习更高级的漏洞,例如文件上传漏洞和代码注入漏洞。 第五步是学习如何防止这些漏洞。这包括了解如何编写安的代码以及如何向Web应用程序添加安性检查。 当您完成了DVWA的级别挑战时,您将拥有一个很好的基础,以了解Web应用程序漏洞及其如何被利用。此外,您也将学习到如何防止这些漏洞,并使您准备好进入更高级别的Web安防护领域。 ### 回答2: DVWA(Damn Vulnerable Web Application)级别通关教程是一项非常有用的学习资源,特别适用于网站安测试的爱好者和初学者。DVWA提供了一些易受攻击的Web应用程序,使用户能够在不受法律侵犯的情况下对其进行攻击,从而学习Web应用程序的安措施和漏洞修复。 在进行DVWA级别通关之前,建议用户了解Web安和各种攻击技术的基本知识。整个通关过程分为四个级别:Easy、Medium、Hard和Insane。每个级别都有几个漏洞,用户需要尝试找出这些漏洞并开发相应的攻击。 在Easy级别中,用户将学习SQL注入、XSS、CSRF等Web攻击技术。在Medium级别中,用户将学习其他漏洞,例如文件上传和文件包含。在Hard级别中,用户将学习如何绕过WAF、滥用会话和控制流等高级攻击技术。Insane级别则旨在挑战以前的所有水平,其漏洞更加隐蔽和不易被发现。 不论在哪个级别,用户都需要运用他们掌握的技能和知识来攻击漏洞,从而获得相应的分数,解锁关卡和证明自己的技能。在做每个漏洞时,最好将注入代码记录在笔记本上方便后续使用,在成功攻击后务必修复漏洞。 总的来说,DVWA是一款强大的Web应用程序学习资源,能够让用户深入了解Web安和攻击技术。通过通关所有的级别,用户将掌握各种不同的攻击技术及其防御方式,从而成为一个优秀的黑客或Web安专家。 ### 回答3: DVWA(Damn Vulnerable Web Application)是一款专门用于漏洞测试和演示的虚拟Web应用程序。它包含多种不同类型的漏洞,供安测试人员进行使用。本篇文章将为大家介绍DVWA级别通关教程。 首先,我们需要下载并安装DVWA。随后,在浏览器中输入http://localhost/dvwa启动DVWA。进入界面后,我们需要进行注册,注册成功后即可进入主界面。 接着,我们需要进行DVWA的配置。在主界面中,点击DVWA Security选项,可以选择安等级,并进行配置。 在配置完成后,我们需要依次完成不同级别的漏洞。 1、Low Security Level:我们需要先使用弱口令登录,接着通过SQL注入漏洞获取管理员账户,最后通过命令注入漏洞获取Web Shell。 2、Medium Security Level:此级别中,我们需要利用文件上传漏洞,通过上传恶意文件获得对目标主机的控制权限。同时我们还需要通过跨站点脚本(XSS)攻击漏洞获取一些隐私信息。 3、High Security Level: 在本级别中,我们需要利用伪造请求(CSRF)攻击漏洞来跨站点冒充用户请求,再通过HTTP响应拆分攻击漏洞来进行会话劫持,最后再利用SQL盲注漏洞提权。 通过以上步骤,我们即可完成DVWA所有级别的漏洞攻击,成为一名合格的安测试人员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值