目录
一、CSRF简介
二、原理示意图
三、实验环境
四、实验步骤
安全级别:Low(四种方法)
安全级别:Medium
安全级别:High
安全级别:Impossible
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。它是利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害者不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。
CSRF与XSS的区别
- XSS、SQL注入等都属于技术漏洞。(客户信任服务器)
- CSRF属于逻辑漏洞,通过伪装成受信任用户的请求来利用受信任的网站。在服务器看来,所有的请求都是合法正常的。(服务器信任经过身份验证的客户)
与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
CSRF攻击成功的前提条件:
- 用户必须登录
- Hacker必须懂得一些发包的请求
- 服务器端不会有二次认证
- 被害方是不知情的
Windows Server 2003:DVWA服务器,安装PHPStudy,IP地址为192.168.247.129
Kali(Hacker):IP地址为192.168.247.157
物理机Win 10(Hacker):在Win10上模拟修改密码的过程,并用Burp Suite获取URL
Windows XP(被攻击方) :访问DVWA,测试实验结果
补充:PHPStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP +MySQL+PHPMyADmin +ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。总之学习PHP只需一个包。
查看源码
源码分析
从源码中可以看到,密码中不能包含SQL中的特殊字符;
服务器收到修改密码的请求后,会检查参数pass_new与pass_conf是否相同,如果相同,则会更新数据库,修改密码。这个过程没有任何的防CSRF机制(用户已经登录服务器)。
URL:http://192.168.247.129/dvwa/<使用BurpSuite获取的链接>
注:每次登录进去都需重置数据库,使密码恢复为初始密码
1、在物理机Win 10上提交修改密码的请求,并使用BurpSuite进行抓包,构造修改密码的链接。
2、将该数据包导入Repeater
3、模拟执行结果
4、使被攻击方点击修改密码的链接
在Win XP端(被攻击方)点击修改密码的链接http://192.168.247.129/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change,密码会被修改为123。修改密码的链接过于明显,且修改后页面会有提示,容易被发现,可以使用一些缩短链接的方法。
注意:当在Win XP端(被攻击方)点击修改密码的链接时,需处于登录状态
5、使用原先密码password登录,失败。使用密码123成功登录DVWA。
思路:在 Kali 的 /var/www/html 目录下写一个修改密码的html文件,诱骗被攻击者去访问该页面,便可以修改登录密码。
1、在物理机Win 10上模拟修改密码的过程,并用Burp Suite获取URL
2、在Kali上创建html页面,并启动Apache服务
3、在Win XP上登录DVWA,重置数据库并将安全等级设为LOW
4、在Win XP上访问在Kali上创建的html页面,结果如下图所示:
5、点击csrf超链接,直接跳转到DVWA登录界面,此时密码已经修改成功,使用原先的密码paaword进行登录,失败。使用修改后的密码111登录成功。
思路:在本地写一个2.html,然后上传到公网上,诱骗受害者去访问,这种方法能够使受害者在不知情的情况下完成CSRF攻击,修改登录密码。
2.html内容如下:
优点:访问2.html,页面会跳转到404页面。一般情况下,我们看到404页面都会下意识的关闭它,不会有想要查看源代码的意识。该方法就是利用这一点,在用户访问2.html时对密码进行修改。
使用原先的密码paaword进行登录失败,使用修改后的密码123登录成功。
思路:结合存储型XSS进行重定向2.html
1、在kali(IP:192.168.247.157)的/var/www/html目录下制作一个网页2.html(同方法三中的2.html内容一样),开启Apache服务
2、在物理机上结合存储型XSS进行重定向
;提交后,直接去访问http://192.168.247.157/2.html。
3、在物理机Win 10上退出DVWA当前登录,使用原先密码登录失败,使用新密码123登录成功。
查看源码
源码分析
- Medium级别的代码检测了 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,即要求本地登录),希望通过这种机制抵御CSRF攻击。
- 过滤规则是http包头的Referer参数的值中必须包含主机名(192.168.247.129)。
可以通过BurpSuite抓包,将主机名放在http包头的Referer参数中
在Win XP上点击修改密码的链接http://192.168.247.129/dvwa/vulnerabilities/csrf/?password_new=456&password_conf=456&Change=Change,密码会被修改为456。退出DVWA当前登录,重新登录,使用原先密码登录失败,使用新密码456登录成功。
查看源码
源码分析
High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。
抓包,我们可以将数据包的安全级别High改为Low
在Win XP上点击该URLhttp://192.168.247.129/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change&user_token=ef782cd69604a4ae6f15390ac77c3659 ,密码修改成功。退出当前DVWA登录界面,使用原先密码登录失败,使用新密码123登录成功。
查看源码
源码分析
- Impossible级别的代码利用PDO技术防御SQL注入
- 对于防护CSRF,则要求用户输入原始密码,攻击者在不知道原始密码的情况下,无法进行CSRF攻击。