欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CSRF—跨站请求伪造

程序员文章站 2024-02-18 16:41:28
...

CSRF—跨站请求伪造

什么是CSRF?
CSRF(Cross-site request forgery)跨站请求伪造:也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

说白了,csrf漏洞的成因是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者推出登录,那以后只要是访问了这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf脚本或者包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)

CSRF—跨站请求伪造
例如:银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
危险网站B,它里面有一段HTML的代码如下:

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

首先,你登录了银行网站A,然后访问危险网站B,这时你会发现你的银行账户少了1000块…
  为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的<img>以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了,所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作…

危害:
攻击者盗用了你的身份,以你的名义发送恶意请求。csrf能够做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…
造成的问题包括:个人隐私泄露以及财产安全。

在Burp里面可以快速生成CSRFpoc
CSRF—跨站请求伪造
如何预防CSRF:
可以强行用验证码(强制用户必须和应用进行交互,但是体验性太差了)

请求中加随机Token值,Token就是一段字母数字的随机值,访问时服务端会生成一个随机的token值并传回到前端的表单里,当我们提交表单时,token会作为一个参数提交到服务端进行验证

CSRF和XSS的区别
csrf核心是在非目标网站的html代码做手脚,让受害者浏览器偷偷的去访问目标网站。
xss核心是操作目标网站html代码,窃取cookie。

这里使用DedeCMSV57_GBK_SP1来作为靶场环境来简单演示一下csrf
CSRF—跨站请求伪造登录进去以后
CSRF—跨站请求伪造点击文件式管理器,发现这里有一个文件上传的功能。
CSRF—跨站请求伪造我这边先新建一个csrf.php文件,然后写入一句话木马,开启burp抓包,点击保存
CSRF—跨站请求伪造我们从抓到的数据包中可以看出没有使用随机token值,因此可以尝试csrf攻击
CSRF—跨站请求伪造
然后这里点击生成csrfpoc,并且复制poc的代码,新建一个html文件。并将前面抓的数据包丢弃。

CSRF—跨站请求伪造
CSRF—跨站请求伪造运行poc文件,并点击poc文件中的按钮
CSRF—跨站请求伪造

可以发现此时生成了我们之前写入的webshell
CSRF—跨站请求伪造菜刀链接:
CSRF—跨站请求伪造