Dvwa之Csrf攻击笔记

本文通过DVWA测试环境详细介绍了跨站请求伪造(CSRF)攻击的概念、原理及危害,包括攻击所需条件和实际操作案例,并提出了防范措施。

介绍

今天笔者便用dvwa漏洞测试环境来探讨一下跨站请求攻击。
Csrf全称为Cross-Site Request Forgery中文解释为跨站请求伪造攻击。

Csrf通常与XSS结合起来进行利用,一般存在XSS漏洞的网站,很大可能也存在Csrf漏洞。二者最简单的区别就是一个是获得用户信任,一个是获得服务端的信任。

生活场景

比如说有一天,你闲来无事在寝室上网,然后打开网页,查看一下自己的银行余e,这时候正好你收到一封邮件(账户仍处于登陆状态),来自你一个非常要好的朋友,于是你打开它,里面是,这是我发现的一篇很好看的文章,后面是一个url,然后你好奇的点开了,结果发现是404,以为是网页错误,便不管了,再打开银行界面发现自己的账户的钱全没了。这就是Csrf的危害。

成功因素

从上面的例子我们可以发现,
成功攻击需要具备以下几个因素:
1.被攻击者仍处于会话中
2.欺骗用户访问自己精心设计的攻击url。
3.攻击者需要知道url中所有参数项,并了解其中的含义。
这里写图片描述

在这幅图的第4步,用户收到恶意攻击者通过邮件或其他方式发送的具有具有恶意攻击代码的网址,用户如果点开的话,点开的过程中用户自己刚开始建立的会话一直保持着,在这个过程中用户如果点击恶意代码,便会遭到攻击。
在上面的攻击中,如果结合XSS直接能实现在用户访问界面弹出一个含有恶意攻击网站的url的弹窗。
实际演练:
首先进入dvwa界面,选择Csrf界面如下:
这里写图片描述
这是一个修改密码的界面,首先我们查看一下源码:

1. <?php   
2.                   
3.    if (isset($_GET['Change'])) {   
4.       
5.        // Turn requests into variables   
6.        $pass_new = $_GET['password_new'];   
7.        $pass_conf = $_GET['password_conf'];   
8.  
9.          //判断两次输入是否一样
10.        if (($pass_new == $pass_conf)){   
11.            $pass_new = mysql_real_escape_string($pass_new);  
12.              //对sql注入进行了预防 
13.            $pass_new = md5($pass_new);   
14.            //对新密码进行了MD5加密
15.  
16.            $insert="UPDATE `users` SET password =       '$pass_new'        WHERE user = 'admin';";   
17.            $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );   //对sql注入进行了预防
18.                           
19.            echo "<pre> Password Changed </pre>";           
20.            mysql_close();   
21.        }   
22.       
23.        else{           
24.            echo "<pre> Passwords did not match. </pre>";               
25.        }   
26.  
27.    }   
28.?>

通过分析可知这个网页可以有效的防止sql注入,但是却缺少对密码修改的二次验证。所谓二次验证就是在密码修改时,网站会询问用户,更安全的是做token验证,这个我们以后再探讨。

接着我们构造一个url如下
这里写图片描述
如果被攻击者点击这个url,密码便会被修改
这里写图片描述
但是这种方法是很简陋的,因为是基于get方法的请求,所以当用户把鼠标放在CSRF上时出现整个请求的内容,攻击的隐蔽性比较差。

下面是基于POST请求的操作,由于POST请求的内容不在地址栏显示,所以隐蔽性要比前者好。
构造页面
这里写图片描述
源码
这里写图片描述
接下来介绍一下bp在Csrf中强大的用法,在任何的url,HTTP请求上,
右键>>Engagement tools>Generate CSRF PoC,其会自动生成一个POC

这里写图片描述
另外bp的Scanner模块还能对Csrf漏洞进行检测
这里写图片描述

总结

初步总结一下Csrf攻击,正如张炳帅在web安全深度分析中所说,不如把Csrf理解为一个小XSS,如果一个网站同时具有Csrf和XSS漏洞,XSS可以给做的更多,比如通过XSS获得webshell不就是XSS和Csrf的结合吗?
所以防范Csrf漏洞首先要防范XSS漏洞,如果一个网站存在XSS漏洞那么防范CSRF也没有什么意义。

DVWA CSRF(Damn Vulnerable Web Application - Cross - Site Request Forgery)是DVWA靶场中的一个与跨站请求伪造漏洞相关的模块。 ### 介绍 CSRF是一种常见的Web安全漏洞攻击者通过诱导用户在已登录受信任网站的情况下,向该网站发送恶意构造的请求,利用用户的身份执行非用户本意的操作。在DVWACSRF模块中,提供了不同难度级别的CSRF漏洞场景,用于安全测试人员学习和研究CSRF漏洞的原理、攻击方法和防御措施。例如,在中级难度中,会检查HTTP包头部的Referer字段的值是否包含要访问的主机名,关键在于stripos()函数,stripos($_SERVER[ 'HTTP_REFERER' ],$_SERVER[ 'SERVER_NAME' ]) 用于进行该检查 [^3]。 ### 作用 - **学习研究**:为安全爱好者、开发人员和测试人员提供一个实践环境,帮助他们深入理解CSRF漏洞的工作机制。通过在不同难度级别下进行攻击尝试,了解不同的防御策略和绕过方法。 - **安全测试**:可以作为内部安全测试的一部分,验证网站对CSRF攻击的防护能力。开发人员可以在DVWA中模拟CSRF攻击测试自己开发的防护机制是否有效。 ### 相关技术信息 - **攻击方式**:攻击者可以构造包含恶意请求的URL,如 `http://192.168.112.12/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#`,诱导用户点击,在用户已登录的情况下,修改用户的密码 [^1]。 - **防御技术**: - **验证请求来源**:如中级难度中检查Referer字段,确保请求来自合法的源。 - **使用CSRF令牌**:服务器为每个用户会话生成一个唯一的令牌,在表单提交或敏感操作请求中包含该令牌,服务器在处理请求时验证令牌的有效性。在高级难度中,需要从响应中通过正则表达式提取Token,并将Token和新密码一起发送给指定URL进行操作 [^2]。 ```python # 以下是一个简单的Python示例,模拟获取响应并提取Token(仅为示例,实际情况更复杂) import re import requests url = 'http://example.com/dvwa/csrf_page' response = requests.get(url) html_content = response.text token_pattern = r'<input type="hidden" name="token" value="([^"]+)"' match = re.search(token_pattern, html_content) if match: token = match.group(1) print(f"Extracted Token: {token}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值