[i=s] 本帖最后由 zeke 于 2025-9-8 11:12 编辑 [/i]
WEB渗透测试工程师系统班250303期
第34节课作业
1、CSRF漏洞原理是什么?
CSRF(Cross-Site Request Forgery),中文全称是“跨站请求伪造”。它的核心原理可以概括为一句话:
攻击者欺骗用户的浏览器,让其以用户的名义(在用户已登录目标网站的情况下)向一个目标网站发送一个恶意请求。
这个请求会携带用户浏览器中自动保存的Cookie等身份凭证,因此目标网站会认为这是用户本人发起的合法操作,从而执行该请求所定义的命令。
CSRF漏洞的本质是 “信任浏览器保存的凭证,而不验证请求本身的来源” 。
2、CSRF漏洞攻击分类及解释?
①.GET型CSRF
原理: 利用<img>, <iframe>, <script>, <link> 等标签的src属性,或者直接使用一个恶意链接(<a>),来发起一个GET请求。因为GET请求本应用于获取资源,而不应修改数据,但如果后端服务器错误地使用GET请求来处理状态变更(如转账、修改密码、删除文章),就会导致此类漏洞。
特点:
构造简单:只需一个URL。
更容易诱导:用户甚至不需要点击,只需访问一个包含恶意图片的页面,浏览器就会自动发起请求。
②.POST型CSRF
原理: 许多重要的操作(如登录、转账)通常要求使用POST请求提交数据。攻击者需要构造一个隐藏的表单,并通过JavaScript(如body.onload事件)或诱使用户点击一个“按钮”来自动提交这个表单,从而发起一个POST请求。
特点:
构造稍复杂:需要创建一个表单和自动提交脚本。
更具欺骗性:可以伪造任何形式的POST数据。
3、实操DVWA靶场CSRF漏洞过程截图。
站内利用
第一步:攻击者修改密码并保存url

第二步:将url发送给受害者,受害者进行访问

第三步:受害者的信息被攻击者修改,密码改为攻击者修改的密码

站外利用
受害者直接访问外部链接


该网站的内容为恶意木马,如下,跳转的链接是攻击者自定义的链接,且通过js自动跳转,将受害者密码改为404404

4、CSRF 和 XSS有什么区别?
CSRF (跨站请求伪造)
- 中文全称:跨站请求伪造
- 攻击目标:利用用户的登录状态,欺骗网站执行非本意的操作(目标是网站)。
- 攻击原理:攻击者伪造一个请求,然后诱骗已登录的用户通过浏览器去发送这个请求。因为请求自带用户的合法Cookie,网站会认为是用户本人操作。
- 信任关系:利用的是网站对用户浏览器的信任(网站相信带有正确Cookie的请求是用户自己发的)。
- 必要前提:用户必须已经登录目标网站,并且会话(Session)尚未过期。
- 攻击载体:恶意请求通常隐藏在另一个第三方网站里,用户需要被诱导访问这个恶意网站。
- 能做什么:以用户身份执行特定功能,例如:
- 资金转账
- 修改密码、邮箱
- 发送伪造的邮件或消息
- 购买商品
- 添加、修改或删除数据
- 核心防御措施:
- CSRF Token:为每个会话或请求生成一个随机的、不可预测的令牌(Token),服务器验证其有效性。
- 验证 HTTP Referer/Origin 头:检查请求是否来自同源域名。
- SameSite Cookie:将Cookie的
SameSite属性设置为Strict或Lax,禁止跨站请求发送Cookie。
XSS (跨站脚本攻击)
- 中文全称:跨站脚本攻击
- 攻击目标:向网站注入恶意脚本,攻击其他访问该网站的用户(目标是用户)。
- 攻击原理:攻击者发现网站有输入漏洞,将恶意脚本代码注入到网页中。当其他用户浏览该网页时,恶意代码会在他们的浏览器中执行。
- 信任关系:利用的是用户对网站的信任(用户相信访问的网站是安全的,会执行其返回的合法脚本)。
- 必要前提:网站存在漏洞,未对用户输入进行过滤或转义,导致输入内容被当作代码执行。
- 攻击载体:恶意代码被存储在目标网站本身(如评论区、留言板),或通过URL参数反射给用户。
- 能做什么:
- 窃取用户的Cookie、会话令牌
- 发起任意请求(相当于结合了CSRF的能力)
- 键盘记录
- 篡改网页内容
- 将用户重定向到恶意网站
- 核心防御措施:
- 输入验证和过滤:对用户输入进行严格的检查和控制。
- 输出编码:在将数据输出到页面时,根据上下文(HTML, JavaScript, URL)进行转义。
- **内容安全策略 (CSP)**:通过HTTP头告诉浏览器只允许执行来自可信源的脚本。
核心区别
- 目标不同:
- XSS 的目标是用户,旨在窃取用户数据或冒充用户。
- CSRF 的目标是网站,旨在冒充用户执行操作。
- 原理不同:
- XSS 是让网站在用户的浏览器上执行攻击者提供的恶意代码。
- CSRF 是让用户的浏览器向网站发送攻击者伪造的恶意请求。
- 信任基础不同:
- XSS 利用了用户对网站的信任(“这个网站是安全的,所以它返回的脚本可以执行”)。
- CSRF 利用了网站对用户浏览器的信任(“这个请求带着正确的Cookie,所以一定是用户自己发的”)。
5、复现课堂内cms的CSRF漏洞案例
dedecms:
①登录管理员,在新建文件夹中进行抓包,删掉referer头
如果可以新建,表明有较大可能存在CSRF漏洞

②带有恶意代码的1.php被新建出来了,较大可能存在CSRF漏洞

站外利用:
①抓一个新建存在恶意代码文件的包,在yakit里复制CSRF的POC,在小皮新建一个html文件,放入该POC并保存
②受害者直接访问恶意链接

③该木马文件成功新建

注:受害者得登录上账号才有用,否则无法借助受害者的权限
一、笔记标题:WEB渗透系统班-CSRF跨站请求伪造(上)+CSRF跨站请求伪造(下)
二、文章内容:
1.课程内容概要
主要知识点1:CSRF漏洞原理
主要知识点2:CSRF漏洞复现
主要知识点3:CSRF和XSS漏洞的区别
2.重点知识与细节
概念解析
概念1:对比referer和host,为什么能得出是否存在CSRF攻击。
HTTP Referer 和 Host 头部的含义
Host 请求头:
它指明了请求的目标是哪个域名(或IP和端口)。
例如,当请求发送到 https://bank.com/transfer 时,Host 头的值就是 bank.com。
这个头是由浏览器自动添加的,指向请求要发送到的服务器。
Referer 请求头 (注意:Referer是拼写错误,但已成为标准):
它指明了这个请求是从哪个页面链接或发起的,即请求的来源页面的URL。
例如,如果你在 https://bank.com/dashboard 页面上点击了一个按钮发起了转账请求,那么这个请求的 Referer 头就是 https://bank.com/dashboard。
如果你在恶意网站 https://evil.com 上通过一个表单或图片发起了请求,那么这个请求的 Referer 头就是 https://evil.com。
一个合法的、由用户在本站内发起的请求,其 Referer 头中的域名,必须与 Host 头中的域名一致(或属于同一个主域)。
而一个来自第三方恶意网站的CSRF攻击请求,其 Referer 头会暴露出恶意的来源。
“比对Referer和Host是否一致”,其本质是:检查这个请求的“出生地”(来源域名)和它的“目的地”(目标域名)是否属于同一个“国家”(同一个网站)。如果是,就是良民;如果不是,就极可能是敌人派来的间谍。
概念2:
关键步骤(CSRF攻击步骤)
步骤1:攻击者寻找目标并构造恶意请求
步骤2:诱骗受害者访问恶意内容
步骤3:受害者触发请求
步骤4:服务器处理并执行请求
步骤5:攻击完成
相关代码:无
3.实操练习和解析
如作业
4.个人总结
本节课最大的收获是:学会了CSRF攻击,以及记住了CSRF攻击的原理
仍然存在疑问的地方:无
需要课后深入学习的内容:暂无