CSRF介绍
CSRF(Cross-site request forgery),中文名叫做“跨站请求伪造”,也被称作“one click attack/session riding”,缩写为“CSRF/XSRF”。在场景中,攻击者会伪造一个请求(通常是一个链接),然后欺骗目标用户点击,一但用户点击,攻击也就完成了。
- 同“XSS”的区别在于,CSRF是借助用户权限完成攻击,攻击者并没有拿到权限;而XSS是直接盗取用户甚至管理员的权限进行攻击,从而造成破坏
- CSRF攻击可以利用用户已经登录或已经授权的状态,伪造合法用户发出请求给受信的网点,从而实现在未授权的情况下执行一些特权操作。
二、DVWA靶场之CSRF介绍
首先熟悉这两个功能的用处:
(1)Test Credentials:测试你使用账号密码能否登录现在的系统
(2)Change Password:可以修改当前系统的密码
三、DVWA靶场之CSRF实践
- 思考:
- 作为攻击者:我如何让用户点击一个陌生链接后,使得用户的密码被修改。
- 首先,我需要分析目标网站的密码修改请求的 URL 结构。这可以通过 Burp Suite 抓取自己的修改密码请求来分析。
- 一旦确认 URL 结构后,攻击者可以构造一个伪造请求,并引导用户点击,从而利用用户的已登录状态执行恶意请求,例如,修改用户密码。
- 注意:直接抓取得到的链接过于明显,用户不会轻易点击,因此需要进行伪装。因此可以通过变为短链接形式或者包装为1.html形式来修改。
- 实践步骤如下:
(1)用户在登录状态下,进行修改密码操作,输入密码:123456,点击change,显示密码已修改。进入验证界面,确认密码修改成功。当前系统密码为123456。获得用户修改密码链接为:http://192.168.81.130/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
(2)将链接包装为1.html形式来修改用户密码,以下为1.html的代码。将1.html文件部署在自己服务器上。
<img src="http://192.168.81.130/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#" border="0" style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>
(3)访问1.html,刷新后密码被修改。
四、进阶(Medium)
这里Medium级别的代码增加了referer的判断。这里的意思HTTP_REFERER和SERVER_NAME如果不是来自同一个域环境的话就无法进行到内部的循环,以及修改密码操作。
接下来我们开始尝试攻击,根据上面的代码分析,我们可以知道referer中只要出现HOST就行,所以在恶意网站中这样操作就可以:
(1)将上面1.html
重新用IP地址命名,改为:192.168.81.130.html
。然后放入文件服务器的/var/www/html
中。
(2)然后我们打开burp suite,对CSRF界面进行抓包,然后发送至Repeater模块
(3)在Repeater模块,抓包流量的Referer地址改为192.168.81.130.html
的网页地址,地址为:http://192.168.21.30/192.168.81.130.html
(4)点击“Send”我们可以看见返回“Password Changed.”,证明修改成功,攻击成功。
五、High
(1)这次在Medium的基础上有了token值,所以我们需要在攻击者的服务器上获取被攻击者的token值。
- CSRF攻击的本质是重要操作的所有参数,都可以被攻击者猜测到,所以token值是必须的。观察以下源码,这里是添加了Anti-CSRF token机制,用户每次到改密页面的时候,服务器会返回一个随机token,向服务器发起请求需要提交token参数,而在服务器收到请求的时候,会优先检查token,只有token正确才会处理客户端请求。
(2)在观察得到以上的信息后,可以利用XSS,先用XSS执行代码获取token。<script>alert(document.cookie)</script>
。得到token信息后,使用该token进行medium步骤即可。