CSRF实战案例

CSRF实战案例

靶场资源领取地址:

链接:https://pan.baidu.com/s/10G1DvUPx7Ge0OErZkHCjEQ?pwd=4gwf

声明:靶场需要依赖数据库文件,资源中有sql文件,需要自行配置,这里不做赘述。

思路概述

CSRF中文名叫做跨站请求伪造,很容易知道这是一个跨站攻击的漏洞,也就是说我们可以让受害者在我们构造的恶意站点执行我们构造的恶意请求,从而请求到另一个网站,请求另一个网站的时候受害者会携带自己的cookie信息,进而借助受害者的cookie来执行我们的恶意请求。。

在以下案例中,我会实现一个基本的CSRF攻击。我将会构造一个恶意的游戏界面,其中图片链接里面内嵌了我们的恶意请求,让受害者点击,点击之后将会携带受害者的cookie并且向正常站点发起请求,从而完成攻击。

那么我们应该如何构造恶意请求呢?可以通过以下思路进行构造:

  1. 观察正确交易的请求接口
  2. 尝试构造GET类型的恶意请求
  3. 尝试构造POST类型的恶意请求
  4. 使用具有吸引力的html渲染恶意请求

登录银联网上银行

前往靶场的首页地址进行登录

image-20230828153500636

切记在复现这个漏洞的时候,不要点击安全退出,因为CSRF是基于身份伪造发起攻击的,如果点击了安全退出,就会删除cookie,我们构造的恶意请求将无法携带受害者的cookie信息了。

观察交易的请求接口

image-20230828144901249

点击交易,然后使用BP抓包,可以看到如下请求包:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1UpPEiZ-1693219903002)(C:/Users/yuan/AppData/Roaming/Typora/typora-user-images/image-20230828144849193.png)]

构造GET恶意请求

从抓包情况来看,请求为post,虽然发送的是post请求,但是后台可能是用$_REQUEST来接收的,所以我们可以先尝试构造一个GET请求

<meta charset='utf-8'>
<img src='./1.jpg'><br />
<img src='http://10.9.75.168/csrf/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'
alt='宝刀在手,谁与争锋'>

如果我们把这个html页面发给受害者,受害者点击了我们的图片,就会发送这个GET请求,从而直接调用交易接口,并且携带受害者的cookie访问,从而实现转账功能。

构造POST恶意请求

如果需要使用POST请求,我们就需要构造表单,为了让受害者上钩,我们的表单就需要使用隐藏属性,隐藏我们的恶意信息:

<meta charset='utf-8'>
<form name='csrf' action='http://10.9.75.168/csrf/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

渲染恶意界面

当我们构造好请求恶意之后,我们就可以把这个请求放入到一个吸引受害者的界面,在我们的资料包中,已经帮我们构造好恶意界面了。如下所示的html代码

image-20230828152534932

注意,我们需要把html里面的IP换成bank靶场所在IP,当然我们登录bank的时候,那个地址也必须使用IP,因为需要确保正常访问的域名与恶意请求中的域名一致,才能在发起恶意请求的时候携带上bank的cookie信息。

访问恶意界面

image-20230828163102734

点击任意请求之后,我们回到银联网上银行首页,可以发现我们的金额已经减少了。到此就完成了CSRF攻击。

总结

通过本次CSRF实战,我们能很好的理解CSRF的原理,为什么叫跨站请求伪装攻击呢?因为我们构造的请求其实是放在另一个站点的,我们让受害者在我们给他的站点上访问目标网站的站点,从而实现我们的攻击目的,所以叫做跨站请求伪装攻击。

只要我们知道了目标网站的请求规则,请求参数,就能构造出一个请求,我们接下来要做的就是将请求渲染好,发送给一个受害者,让受害者帮我们执行,为什么要让受害者帮我们执行呢,因为受害者在他的浏览器上已经保存了目标网站的cookie信息,我们需要借用受害的cookie去执行我们的恶意请求,从而达到目的,否则我们无法获取目标网站的cookie信息完成攻击。

猜你喜欢

转载自blog.csdn.net/weixin_46367450/article/details/132545136