DVWA系列(五)——使用Burpsuite进行CSRF(跨站请求伪造)

1. CSRF(跨站请求伪造)简介

(1)CSRF

CSRF(Cross—site request forgery),跨站请求伪造,是指利用受害者未失效的身份认证信息(cookie,会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下,以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账,改密等)。

(2)CSRF与XSS的区别

CSRF属于业务逻辑漏洞,在服务器看来,所有的请求都是合法正常的;

XSS,SQL注入等等都是属于技术漏洞;

XSS:客户信任服务器;

CSRF:服务器信任客户(经过身份认证的);

(3)CSRF攻击成功的前提

用户必须登录;

黑客必须懂得一些发包的请求;

服务器端不会有二次认证;

扫描二维码关注公众号,回复: 6188781 查看本文章

被害者是不知情的;

2. CSRF攻击图示

  1. 用户首先登录服务器;
  2. 服务器返回cookie;
  3. 然后hacker将可以修改用户密码的URL发给用户;
  4. 用户如果点击了该URL,则密码就会被更改(如果没有点击,则密码不会被修改,但密码是否被更改hacker是不知道的);
  5. 最后,黑客使用用户的用户名和密码尝试进行登录服务器;如果成功,则证明用户点过url,如果没有登录成功,则用户没有点击url;

3. CSRF(跨站请求伪造)

实验环境

(1)Windows服务器:Windows  Server 2003,IP地址:192.168.37.128;

(2) 测试机:Windows7物理机(开启代理,代理服务器为burpsuite)

(3)受害者:虚拟机Windows  Server 2003,IP地址:192.168.37.128;

实验过程

安全级别:Low

(1)设置安全级别

(2)查看源码

(3)源码分析

从源码中可以看到,密码中不能包含SQL中的特殊字符;

服务器收到修改密码的请求后,会检查参数pass_new与pass_conf是否相同,如果相同,则会更新数据库,修改密码,并没有任何的防CSRF机制(用户已经登录服务器)。

(4)实验操作

(注:每次登录进去都重置一下数据库,将密码恢复为初始密码)

方式一:构造修改密码的链接

如果受害者点击了这个链接,密码就会被修改;

这个修改密码的链接一眼就能看出来这个链接是改密码的,而且在点击了这个链接后,页面就会显示密码已修改;

4.1> 抓取CSRF的包;

4.2> 保存链接;http://localhost/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change

并查看效果;

4.3> 在虚拟机Windows 2003上点击如上修改密码的链接;

密码就已经被修改;

如果修改密码的链接过于明显,可以使用一些缩短链接的方法;

方式二:写一个修改密码的脚本文件,尝试访问该页面就可以修改密码;

4.1> 复制修改密码的链接,并在Kali上写入脚本;

4.2> 重置数据库,使其密码恢复为初始值;

4.3> 拿虚拟机Windows2003访问kali上的脚本;

(如下我是直接拿物理机进行尝试的,方便进行抓包,两者效果是一样的,都是访问文件,进行点击,密码被修改)

4.4> 点击CSRF超链接,就可以通过burp suite抓取到修改密码的数据包

此时,使用修改后的密码可以登录成功

方式三:构造攻击页面

这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击,我们在本地写一个2.html,然后是受害者去点击;

2.html的内容:

访问如上2.html页面;一般情况下,普通用户看到404的页面都会下意识的关闭它,而此时,密码已经在用户访问2.html的时候进行了更改;(我是直接在物理机上的操作,也可以直接认为物理机就是受害者)

方式四:结合存储型XSS进行重定向

使用存储型XSS,重定向到2.html页面

此时,密码已经进行修改;

安全级别:Medium

(1)设置安全级别;

(2)查看源码;

(3)源码分析

Medium级别的代码使用 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,即要求本地登录),希望通过这种机制抵御CSRF攻击。

过滤规则是http包头的Referer参数的值中必须包含主机名(192.168.37.128);

(4)实验过程 

我们可以通过抓包将主机名放在http包头的Referer参数中;

尝试进行登录验证;

安全级别:High

(1)设置安全级别

(2)查看源码

(3)源码分析

High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

(4)实验过程

抓包,我们可以将抓取包中的级别High改为Low;

安全级别:Impossible

(1)设置安全级别

(2)查看源码

(3)源码分析

Impossible级别的代码利用PDO技术防御SQL注入;

对于防护CSRF,则要求用户输入原始密码,攻击者在不知道原始密码的情况下,无法进行CSRF攻击;

(4)实验过程

猜你喜欢

转载自blog.csdn.net/qq_38684504/article/details/89683677