CSRF跨站请求伪造
[TOC]
通过前面的XSS学习,我们已经知道了,通过操纵javascript
进行前端的XSS注入,从而实现盗取管理员Cookie
,利用Cookie
伪造用户登录。
那么还有什么方式可以利用Cookie
替我们做更多的事情呢?,而且并不需要手动人为的伪造用户登录后操作,直接自动操作该Cookie
进行我们需要的操作。 自动关注、自动点赞?
CSRF 则可以做到这样的一点,自动利用用户未过期的Cookie
进行操作。
百科资料
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
XSS与CSRF的区别
XSS:在目标网页上执行js
来窃取Cookie
;
CSRF:利用用户Cookie
;
XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户浏览器的信任。
csrf
漏洞的成因就是网站的cookie
在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf
脚本或包含csrf
脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号、自动关注、自动发送广告消息等)
Get型
这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用:
<img src=http://example.cn/csrf.php?xx=11 />
在访问含有这个img的页面后,浏览器会自动向http://example.cn/csrf.php?xx=11
发出一次HTTP请求。example.cn就会收到包含受害者登录信息的一次跨域请求。所以,如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了。
Post型
这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单,如:
<form action=http://example.cn/csrf.php method=POST>
<input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。
POST类型的攻击通常比GET要求更加严格一点,但仍并不复杂。任何个人网站、博客,被黑客上传页面的网站都有可能是发起攻击的来源,后端接口不能将安全寄托在仅允许POST上面。
链接类型
链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:
<a href=" http://example.cn/csrf.php?xx=11" taget="_hacker">
百万福利,点击就送!!
<a/>
由于之前用户登录了信任的网站A,并且保存登录状态,只要用户主动访问上面的这个PHP页面,则表示攻击成功。
结合点击劫持,链接类型会有意外的效果
点击劫持
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的 iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的 iframe 页面。
通过调整 iframe
页面的位置,可以诱使用户恰好点击在 iframe
页面的一些功能性按钮上,比如提交表单。点击劫持需要对页面布局,调整按钮的位置,引导用户点击。隐藏 iframe
很容易,设置 opacity
为 0,或者让 iframe
设置成绝对定位,把 z-index
设置很多,让它处在最上层。
靶场实战
靶场一
1.靶场地址
http://59.63.200.79:8003/bluecms/uploads/
2.注册账号
3.修改个人资料
4.通过Burp获取修改资料的数据包
生成CSRF页面
保存为1.html,丢弃该数据包,查看资料,仍然全为123
5.访问保存的1.html
资料修改成功,这就是一个基础的CSRF可以进行的操作。
当用户进入该页面后,还需主动点击该按钮,才会触发修改资料,有点麻烦,如何才能让用户进入页面,便自动触发CSRF呢,我们可以使用js
的自动提交!
// setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
setTimeout(submitRequest(),100)
靶场二
1.靶场地址
织梦CMS DedeCMS_V57_UTF8_SP1
http://59.63.200.79:8010/newcsrf/
2.尝试自行搭建该CMS,探索漏洞
<1>自建dedeCMS;
<2>得到一个可能存在CSRF的点,一个危险的点;
<3>.生成CSRF POC;
保存为2.html
<4>.放过数据包,测试是否插入成功;
连接菜刀!
<5>.修改POC,对靶场进行留言,让管理员误访问地址,从而进行CSRF;
<6>.验证管理员是否访问生成了该页面;
总结
- 我们对线上的CMS进行攻击,尽量模拟得与线上路径版本一致,从而避免更多的修改,进而出错;
- Google浏览器对前端的漏洞杀伤较大,XSS,CSRF避开谷歌浏览器;
- 如果对方的服务器使用了
Token
作为身份验证手段,CSRF
无效。
CSRF防御
一、Referer头检测法
Referer
标识当前请求的来源页面,浏览器访问时除了自动带上Cookie
还会自动带上Referer
,所以服务端可以检测Referer
头是否本网站页面来决定是否响应请求。
Referer
是浏览器自动带上的,基于认为浏览器没有相关漏洞的前提下,我们可以认为攻击者是没法伪造Referer
头的,也就是检测Referer
头的方法是可靠的。
但该方式有时会不受认可,一是因为浏览器是可以设置禁止发送Referer
头的,如果使用该方式那么禁止Referer
头的浏览将无法正常使用,这可能会降低用户使用体验。二是因为由于移动端的崛起当下流行前后端分离app和web共用一套后端代码,但app是不会自动带Referer头的,如果使用该方式app端不好处理。
二、Token检测
使用Token
令牌,就是在服务端生成一段Token
,前端每次提交请求到后端的时候,检验该请求是否携带Token
且是否为自己生成,如果不是,则拦截掉该请求。
Token
是一个比较有效的CSRF
防护方法,只要页面没有XSS
漏洞泄露Token
,那么接口的CSRF
攻击就无法成功。
CSRF常见问题
CSRF - 跨站请求伪造常见问题
1. CSRF和SSRF的区别
CSRF为跨站请求伪造,SSRF为服务器请求伪造,CSRF的核心是让客户端的浏览器去访问,SSRF核心是让服务器去访问.
2. CSRF与XSS的区别
csrf伪造请求,xss为跨站脚本攻击,一个为伪造cookie等验证信息,一个则是使用一个脚本攻击。
XSS 核心是操作目标网站的HTML代码 窃取Cookie
CSRF 核心是在非目标网站的HTML代码做手脚 让受害者浏览器偷偷的去访问目标网站
3. 为什么CSRF会利用的cookie信息可以不过过期?
因为Cookie具有时效性,但时效性不一定,常见的是一次会话,什么是一次会话?就是浏览器关闭开启一次
4. Cookie是什么?
Cookie就是个验证信息,用于对登陆的用户进行一个验证,看看是什么身份。
5. Cookie在CSRF中的作用?
CSRF中,就是利用这个cookie,来盗用其他用户的身份来进行操作,就相当于有个人拿了你的身份证去上网,cookie就相当于这个身份证
6. CSRF怎么和XSS打组合拳
首先使用XSS直接执行CSRF的JS恶意语句
7. csrf可以用于钓鱼吗
可以,可以和xss一起用,用一个反射型的xss,盗取cookie后,构造csrf脚本或脚本去攻击
8. CSRF的成因
Cookie不过期,没有进行进一步的验证用户信息,没有安全意识访问了恶意站点
9. csrf的操作流程
用户A登陆B站,在登陆网站B时,收到了攻击者C发送的盗取cookie进行操作的链接到C,得到cookie后csrf进行操作
10. csrf能有什么操作
转账,修改密码,越权等N种操作
11. 一定要登陆A时同时访问C吗
不一定,cookie都有时效性,一次性的cookie必须这样,不是一次性的则会存在硬盘中
12. CSRF可以直接盗取在本地的cookie吗
不可以,但这是xss的操作,csrf只是利用cookie
13. CSRF的载体
一个包含恶意链接或脚本
14. csrf poc是什么
一个带验证的数据表单的脚本或链接,内有要操作的数据
15. csrf操作过程
生成一个脚本或链接,当你操作时触发,就获得你在目标网站上的cookie把数据提交到目标地址,当你访问或者操作时,浏览器偷偷执行了攻击者的操作
16. csrf是什么
csrf为跨站请求伪造,伪造利用其它用户来完成请求操作,简单来说就是让别人来进行我想要的操作
17. token防御csrf原理
Token就是一段字母数字的随机值,访问时服务端会生成一个随机的token值并传回到前端的表单里,当我们提交表单时,token会作为一个参数提交到服务端进行验证 [终极方案]
18. referer防御csrf原理
Refer记录了该http请求的来源地址,访问一个安全受限页面请求必须来自同一个网站,如果不是则请求不合法无法生效 [可绕过]
19. 如何绕过token
Token的生成一定要随机,有些Token根本就不验证或者时间戳做Token
如果存在xss漏洞,token防御将无效
20. csrf如何绕过referer
当浏览器的检测不严,比如referer值为空时,可以绕过
Referer可以伪装绕过