CSRF跨站请求伪造

CSRF跨站请求伪造

原理总结
一个CSRF漏洞攻击的实现,其需要由“三个部分”来构成
1、有一个漏洞存在(无需验证、任意修改后台数据、新增请求);
2、伪装数据操作请求的恶意链接或者页面;
3、诱使用户主动访问或登录恶意链接,触发非法操作:

第一部分
漏洞的存在
关键字:跨站请求漏洞(CSR:CrossSiteRequest)
如果需要CSRF攻击能够成功,首先就需要目标站点或系统存在一个可以进行数据修改或者新增操作,且此操作被提交后台后的过程中,其未提供任何身份识别或校验的参数。后台只要收到请求,就立即下发数据修改或新增的操作;以上漏洞情况的存在,出现比较多的场景有用户密码的修改、购物地址的修改或后台管理账户的新增等等操作过程中。

第二部分
漏洞利用的伪装
关键字:伪装请求(F:forgery)
CSRF漏洞存在了,如果需要真正的被利用,还需要对“修改或新增”数据操作请求的伪装,此时恶意攻击者只要将伪装好的“数据修改或新增”的请求发送给被攻击者,或者通过社工的方式透使被攻击者在其cookie还生效的情况下点击了此请求链接,即可触发CSRF漏洞,成功修改或新增当前用户的数据信息,如修改当前用户的密码、又或者是当前用户为后台管理员,触发漏洞后新增了一个后台管理员

第三部分
用户非本意的操作
关键字:非本意操作
当前用户在不知情的情况下,访问了黑客恶意构造的页面或在链接,即在非本意的情况下完成黑客想完成的“非法操作”,实现了对当前用户个人信息的恶意操作。

与xss区别

csrf是借助用户的权限完成攻击,攻击者并没有拿到权限;而xss是直接盗取用户权限去进行破坏。

小结:构造一个恶意链接或者html页面
CSRF漏洞的目的:利用已存在的漏洞构造了一个“恶意链接”或“html页面”,然后诱使用户点击触发此漏洞。目标站点存在一个漏洞(CSRF),攻击者利用此类漏洞伪装了一个链接或者html页面,诱使被攻击者在登录的情况下(即当前cookie有效的情况下)点击了此伪装请求,随后在用户不知情的情况下完成了对当前用户数据的修改或者新增操作,而被修改的信息可能是用户的密码、关键信息又或者新增后台管理员等

csrf实验——DVWA-CSRF low

关于环境的使用——使用phpstudy搭建渗透测试靶场环境_Gjqhs的博客-CSDN博客
DVWA上CSRF的实验是以修改登录用户的账号密码为目的的。
搭建一个DVWA的环境。另外CSRF漏洞都是在跨域环境下进行的,所以需要在虚拟机中搭DVWA环境,然后在本机进行攻击,总之就是把虚拟机(192.168.*.*)当作是要攻击的服务器,主机(127.0.0.1)当作是攻击者自己的外网服务器。

PS:忘记密码

use dvwa;
select * from users;

 MD5解码

本地攻击

 漏洞发现
利用burpsuite抓包(捕获修改密码提交动作包)发现竟然是使用get方式提交url去进行密码修改操作,试想一下,假如我们构造一个恶意链接,用户处于登录状态时,使其去点击这个恶意url,或构造一个带有修改密码的url发送给目标用户(目标用户需要已经登录DVWA,产生cookie信息),当目标用户点击url时,密码就被修改了。现在本地测试,burp抓到数据包之后,把数据包丢弃掉(Drop),然后在浏览器打开另一个窗口,输入构造的url,可以看到成功修改密码

默认密码登录,发现登录不进去,然后用修改过的密码登录,发现登录成功,说明存在CSRF漏洞

远程攻击

尝试构成一个带有修改密码的url,发送给靶机的用户。

http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=666666&password_conf=666666&Change=Change#

靶机用户使用登录dvwa的浏览器访问该url,发现密码已更改

不过这URL应该没人会点,稍加修饰

也可以使用img标签进行。编写low_1.html

访问修改,原密码失效

构造攻击页面

通过img标签中的src属性来加载CSRF攻击利用的URL,并进行布局隐藏,实现了受害者点击链接则会将密码修改。

当受害者正在使用自己的网站(浏览器中还保存着session值)时,访问攻击者诱惑点击此月账单.html 误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为123。

 DVWA-CSRF medium

Medium级别的代码检查了保留变量HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME,(http包头的Host参数,及要访问的主机名,这里是虚拟机的物理地址),希望通过这种机制抵御CSRF攻击。过滤规则是http包头的Referer参数的值中必须包含主机名(服务器物理地址)我们可以将攻击页面命名为[服务器地址].html(页面被放置在攻击者的服务器里,这里是我的物理机地址)就可以绕过了

 

DVWA-CSRF high

High级别的代码加入了Anti-CSRFtoken机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

 要绕过High级别的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。试着去构造一个攻击页面,将其放置在攻击者的服务器,引透受害者访问,从而完成CSRF攻击,这里要使用的是Dom型xss的high等级组合csrfhigh进行一个组合攻击。这种攻击方法也就是很多地方提及到的xss+csrf攻击。用这种方法可以完全绕过通过设置token随机数的csrf攻击的防御。因为Dom型xsshigh等级可以运行任意script代码。所以我们要用script代码完成以下工作:1.管理员点击链接,自动访问csrf页面获取token2.通过正则匹配token,拼接到http请求中3.发送已经拼接token的http请求那么管理员在点击链接的瞬间,就发送了两个请求,第一是获取token,第二是带着token去进行修改密码的请求。那么这个攻击最重要的一步就是js代码的编写。

构造url,诱导管理员点击,并重新登录查看密码是否修改成功。

并用burpsuite抓包查看到将获取的cookie值做修改,从而修改密码;

于www打开即可更改

这里牵扯到了跨域问题,而现在的浏览器是不允许跨域请求的。这里简单解释下跨域,框架iframe访问的地址是http://192.168.46.128/vulnerabilities/csrf,位于服务器192.168.153.130上,而的攻击页面位于黑客服务器10.4.253.2上两者的域名不同,域名B下的所有页面都不允许主动获取域名A下的页面内容,除非域名A下的页面主动发送信息给域名B的页面,所以我们的攻击脚本是不可能取到改密界面中的user_token。

CSRF通用防御方法

Impossible
可以看到,Impossible级别的代码利用PDO(一种在PHP里连接数据库的使用接口)技术防御SQL注入,至于防护CSRF,则要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值