CSRF跨站请求伪造
DVWA
CSRF
LOW
网站本意是想让我们在网站里面修改密码

但是能够主要到当我们更改密码成功后url栏的参数是这样的
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
可以分析出password_new是我输入的密码,password_conf是我确认的密码,说明我们在网站上输入的信息是会在url栏这里进行一个传输执行

用Burp Suite抓包,发现url栏的信息和请求的信息是一致的

更改url的参数:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=888888&password_conf=888888&Change=Change#
只需要在原来的url基础上该新密码和确认密码的参数即可
为了显示效果,我使当前页面是密码不匹配状态

在新标签内放入设置好的url,点击执行

页面跳转到了dvwa的更改密码界面,csrf攻击成功

网站的本意是在网站内更改密码,而我通过控制url的传参就能使我能在网站之外执行更改密码的操作,那么当我知道一个网站有csrf漏洞后也可以通过构造url的方式让别人点击执行他意想之外的行为
源码分析:源码中只对传入的密码和确认密码进行比较,两者一致则执行更改密码命令成功返回Password Change,不一致则返回Passwords did not match,没有任何过滤,所以能轻易执行csrf漏洞

Medium
源码分析:和Low等级比较发现,只有一处改变,即在传入密码和确认密码参数前先进行了一个if语句的判断,判断里面的内容主要是验证这个访问请求是否是从dwva网站本身发起的,若不是就不执行后面的操作

源码是通过referer这个字段的参数进行判断的,通常情况下在增加referer验证时就是网站本身当前页面的ip地址,我们通过抓包看看信息


构造一个页面,里面放一个a标签,链接为更改密码的url,当受害者点击时就会触发更改密码的操作,我们只需要把这个html页面的位置放在和网站同一个目录下,即在自己的电脑上构造一个访问目标网站域名的html文件
设计a标签
设计的url:
http://localhost/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

把设计的html页面名字改为网站的ip地址,里面的a标签就是更改密码的操作

打开html页面,点击a标签,触发攻击

抓包看referer

攻击完成

High
直接查看源代码分析
源码分析:可以看出high等级的主要区别是增加了一个token值的校验,每次登录都会校验token是否正确,若想要执行更改密码操作必须知道正常用户的token,获得用户token的方式有两种:
1.构造一个页面让用户点击,点击之后偷偷的读取用户登录网站的token,把token加到自己构造的更改密码的表单上做让用户点击完成攻击,但由于同源策略,一半无法获得token,也有解决方法,但那个更繁琐
2.如果用户网站上刚好有存储型漏洞,可以利用存储型漏洞与csrf漏洞配合,即通过存储型漏洞获得token再利用csrf漏洞结合拿到的token完成攻击

这里我们采用抓包,把包发到重放模块,在row中可以看到新的token


接下来使用获取到的新token构造链接
http://169.254.206.217/DVWA/vulnerabilities/csrf/?password_new=password&password_conf= password&Change=Change&user_token=7d7a96362f875dba0c22f07a1ab64c47#
修改成功

本文来自博客园,作者:长温不喜风云,转载请注明原文链接:https://www.cnblogs.com/changwen12138/p/18987218

浙公网安备 33010602011771号