学习自农夫安全201-A6
定义
利用受害者尚未失效的身份认证信息(cookie…),诱骗其点击恶意链接或包含攻击代码的页面,在受害者不知道的情况下,悄咪咪的用他的身份向服务器发送恶意请求,对受害人造成损失。
攻击方式
1、URL
2、build website payload
如何防御
1、在服务端验证http请求中的refer,防止来自不可信网站的请求被服务器接收并返回数据。
2、用户首次访问的时候,服务器端返回一个随机的token存储在客户机,下次用户访问时需要带上token,服务端在验证通过后再执行
refer是什么
浏览器在向 web 服务器发送一个 http 请求的时候,服务器会把 http 的请求包装成一个 request 对象,在这些请求里面就包括 referer,它的意思是要告诉服务器,该请求来自哪里。比如在一个网页里面插入一个超链接,链接到其他的网页,那么当点击这个超链接从而链接到另外一个页面的时候,相当于浏览器向 web 服务器发送了一个 http 请求,对于另外一个页面而言,这个 referer 就是上一个页面的 URL,而对于从地址栏里面直接输入 URL 或者是刷新网页的方式,则 referer = null。
绕过防御
以DVWA为例
1、low等级为Medium时候,观察源码
这里检查了HTTP_REFERER,通过函数stripos检查HTTP_REFERER是否包含SERVER_NAME,即检查refer字段是否包含主机名。
如何绕过?
1、我们可以在再建立恶意网站的时候将其取名为主机名,则当用户被诱使点击发送数据包时,refer字段为
http://xxx.com(我们创建的恶意网站)/文件名.html
由于文件名就是主机名,服务器后端将其匹配为主机名,返回true,然后执行恶意请求。
2、可以通过更改域名在我们建立的恶意网站的下面建立目标主机的子域名,例目标主机的域名a.com,我们可以将恶意网站的域名改为a.com.b.com,这样产生的refer字段为
http://a.com.b.com/文件名.html
burpsuite自动生成payload
问题
经典面试题:xss(跨站脚本攻击)和csrf漏洞的区别?
xss攻击的对象是浏览器,而csrf攻击的是未失效的用户会话。
csrf漏洞产生的原因?
请求包可预测。
安全角度考虑,token能存放在cookie中吗?
不能,csrf漏洞利用的就是浏览器发出请求的时候会自动带上cookie,劫持cookie。当设置了token,就是因为token不会被浏览器自动拼接,不会被劫持,如果token放在了cookie中,则会被浏览器发出请求的时候自动拼接,那么token会失去原本的作用。
session一定要设定失效期才是最好的、最安全的吗?
不是,需要结合具体的业务场景,比如手机qq长时间不访问点击之后依然可以直接登录,若设定过短的失效期,则每次点击都需要输入用户名和密码,操作过于冗余。