实验目的

了解CSRF跨站伪造请求实验

实验原理

CSRF的原理

CSRF(Cross-site Request Forgery)是指跨站点请求伪造,也就是跨站漏洞攻击,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个URL(通常会用 POST 数据方式),从而达到改变服务器端数据的目的。这种攻击方式是国外的安全人员于2000年提出,国内直到06年初才被关注,网上也出现过动易后台管理员添加的CSRF漏洞等,08年CSRF攻击方式开始在BLOG、SNS等大型社区类网站的脚本蠕虫中使用。下图简单阐述了CSRF攻击的思想:

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

登录受信任网站A,并在本地生成cookie;

在不登出A的情况下,访问危险网站B。

虽然只要不满足以上两个条件中的一个,就不会受到CSRF的攻击,但无法保证以下情况不会发生:受害者不能保证其登录了一个网站后,不再打开一个tab页面并访问另外的网站。受害者不能保证其关闭浏览器了后,其本地的cookie立刻过期,上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。CSRF的定义是强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。CSRF漏洞的攻击一般分为站内和站外两种类型:CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的,一些敏感的操作本来是要求用户从表单提交发起POST请求传参给程序,但是由于使用了$_REQUEST等变量,程序也接收GET请求传参,这样就给攻击者使用CSRF攻击创造了条件,一般攻击者只要把预测好的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起请求。CSRF站外类型的漏洞其实就是传统意义上的外部提交数据问题,一般程序员会考虑给一些留言评论等的表单加上水印以防止SPAM问题,但是为了用户的体验性,一些操作可能没有做任何限制,所以攻击者可以先预测好请求的参数,在站外的Web页面里编写javascript脚本伪造文件请求或和自动提交的表单来实现GET、POST请求,用户在会话状态下点击链接访问站外的Web页面,客户端就被强迫发起请求。

实验内容

学习CSRF

实验环境描述

实验环境描述

1、学生机与实验室网络直连;

2、VPC1与实验室网络直连;

3、学生机与VPC1物理链路连通;

pc机:Windows7旗舰版

实验步骤

1、打开桌面的XAMPP

2、打开攻击机桌面上的浏览器,在地址栏输入http://127.0.0.1/dvwa,进入DVWA登录界面,账号为admin、密码为password

3、点击左边导航栏中的DVWA Security设置安全等级,此处设置为low即可。

4、点击左边导航栏中的CSRF模块,进入如下界面,可以看出这是一个修改密码的页面:

5、查看PHP源码:点击右下角的View Source,可以看到页面的PHP源码。从源码中可以看出,页面直接用GET方法获取用户的输入信息

6、输入新密码,然后点击change,此时查看浏览器地址栏中的页面地址:可以看到Web直接将输入的信息明文直接存放在HTTP请求里。可以以此而进行攻击

7、进行攻击测试:不要关闭原来的页面,在打开新的页面,输入URL地址http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=newpass2&password_conf=newpass2&Change=Change(此处的url只是将上面url里面的newpass改成了newpass2)可以看到页面显示密码更改

8、此时验证admin用户的密码是否是newpass2:点击左边最后的LogOut,重新登录DVWA,输入用户名admin,密码newpass2,登录成功。由此可见密码已被修改。

9、实验完成

最新文章

  1. Creating Dialogs
  2. log4net.redis+logstash+kibana+elasticsearch+redis 实现日志系统
  3. Semantic-UI和其他几个前端框架
  4. 转:ASP.NET MVC + EF 更新的几种方式
  5. RAC数据库迁移ASM磁盘组到其它存储
  6. 【周期串】NYOJ-1121 周期串
  7. HTTP常见错误 400/401/403/404/500及更多
  8. windows编程socket问题
  9. C++ STL的各种实现版本
  10. LeetCode算法题-Construct the Rectangle(Java实现)
  11. JavaSE基础知识(5)—面向对象(对象数组和对象关联)
  12. js实现活动倒计时
  13. 【Zookeeper系列】构建ZooKeeper应用(转)
  14. 1.4 flask request和session
  15. PHP请求ws出现的问题
  16. BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations
  17. 更改Ubuntu默认python版本的两种方法python-> Anaconda
  18. js判断文本是否溢出容器
  19. Windows 服务安装教程
  20. CF 459A && 459B && 459C && 459D && 459E

热门文章

  1. [Altium Designer 学习]怎样输出Gerber文件和钻孔文件
  2. 我的MySQL学习记录 完结篇DAY05~
  3. GUI系统
  4. seq2seq+torch7聊天机器人bug处理
  5. shell循环ping ip的写法
  6. HuTool工具包操作csv文件
  7. bom-setInterval
  8. Android 实用开源库(不定期更新)
  9. 使用UrlConnection请求一个url地址获取内容
  10. mac brew安装