1、什么是CSRF
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,缩写为:CSRF/XSRF
2、CSRF攻击原理
1、用户访问网站
2、服务器返回cookie
3、攻击者发送包含恶意请求的网页
4、用户点击链接
5、攻击者利用cookie,请求服务器
3、攻击条件
登录受信任网站A,并在本地生成Cookie;在不登出A的情况下,访问危险网站B
4、payload常见种类:
1、GET型:
通过图片的img src属性,自动加载发起GET请求
2、POST型:
构建一个自动提交的表单(隐藏),用户访问,发起POST请求。
3、超链接型:
构建一个超链接,用户点击后,
5、实训
1、DVWA-low
构造链接法
查看源码,检测两次输入的密码是否一致,查看数据库连接的全局变量和其是否为一个对象。如果是的话,用mysqli_real_escape_string()函数去转义一些字符,如果不是的话输出错误。看出没有防范CSRF的代码。
在测试页面中,登录成功后,得到URL地址,可以使用构造链接的方式修改用户名及密码。发现未GET传参,且页面没有限制CSRF的措施,可以直接在URL中修改。(CSRF攻击就是盗用用户cookie,在没有退出这个页面的时候上次请求的cookie是有效的,可以达到直接修改)
尝试输入不一样的得到了修改密码的连接,现在可以直接修改。
在URL地址中输入一样的数据,页面回显password chaged,在测试页面输入新密码,登陆成功则证明CSRF攻击成功。
构造页面法
构造原理,bp把自己作为恶意服务器,当用户通过已访问过可信任网站的浏览器访问bp恶意服务器时,bp返回给浏览器的代码中含有要求访问可信任网站的代码,当用户点击时,就会对可信任网站造成攻击
利用engagement tools生成CDRF PoC,复制代码地址并打开新页面
点击submit request跳转到更改密码的界面,说明攻击成功(在此过程中,不能关闭首次打开的信任网页,也不能关闭代理,知道点击是才关闭)
2、DVWA-high
添加了Anti-csrf token模块,该模块用于发送随机token,也就于在用户修改密码的时候需要实时验证,如果要成功进行csrf攻击就要绕过token。https://www.cnblogs.com/s1awwhy/p/13974205.html参考文章得知可以使用burpsuit的CSRF Token Tracker插件可以直接绕过user_token验证
安装CSRF Token Tracker插件后直接抓包后repeat
6、防御方式
1、token验证
csrf攻击是因为借用用户cookie,而cookie在一定条件下是不改变的,攻击者可以利用cookie来执行操作,加入token验证后,更具有随机性,攻击者无法获得,就可以减少csrf攻击
2、校验HTTP Referer字段
在HTTP协议中,HTTP_REFERER定义了访问来源,站点可以在后端校验Referer是否来自于正常的站内跳转,referer就是攻击者