CSRF笔记
个人总结
参考:https://portswigger.net/web-security/csrf
- name: 个人总结
desc: 参考:https://portswigger.net/web-security/csrf
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# CSRF笔记
# 1CSRF基本知识
# 1、什么是CSRF?
答案
CSRF(跨站请求伪造)是一种 Web 安全漏洞,允许攻击者诱使用户执行他们本不打算执行的操作。
# 2、CSRF有什么危害?
答案
CSRF 的危害取决于应用程序的功能。例如:
- 一个 “电子邮件更改功能” 中存在 CSRF 漏洞,则危害就是 “修改任意受害用户的邮箱”。
- “密码更改功能” 中存在 CSRF 漏洞,则危害就是 “修改任意受害用户的密码”。
- “转账功能” 中存在 CSRF 漏洞,则危害就是 “诱使任意受害用户进行资金转账操作”。
如果受攻击的应用程序中,还存在特权角色(例如网站管理员),则可以尝试对其进行攻击,以获得网站的进一步控制权。
# 3、CSRF攻击需要满足哪些条件?
答案
需要满足三个条件:
- 存在相关操作。
- 基于 Cookie 的会话处理。
- 没有不可预测的请求参数。
# 4、假如没有使用Cookie,会发生CSRF攻击吗?
答案
会,尽管 CSRF 通常与 “基于Cookie的会话处理” 有关,但它也时常出现在 “应用程序自动向请求添加一些用户凭据” 的其他上下文中,例如 HTTP 基本身份验证和基于证书的身份验证。
# 5、如何构建一个CSRF载荷?
答案
- 方法一:分析表单参数,自己编写 HTML 和 JavaScript 代码。
- 方法二:提交表单,并使用 BurpSuite 捕获请求数据包,右键请求数据包 在上下文菜单中选择 “Engagement tools / Generate CSRF PoC” ,可以自动生成一个 PoC。
# 6、如何传递CSRF载荷给受害者?
答案
- 如果漏洞采用了
POST
请求,则需要准备一台攻击机,在攻击机上部署网站,将载荷放置于网站上 并 将链接发送给受害者,等待受害者的访问。 - 如果漏洞采用了
GET
请求,可以直接提供受损站点的链接,实现自包含攻击:https://<受损站点>/email/change?email=abc@qq.com
# 2CSRF 与 XSS 之间的区别
# 1、CSRF和XSS之间有什么区别?
答案
- CSRF 是跨站请求伪造,可以诱使 受害用户 执行他本不打算执行的某一个操作。
- XSS 是跨站脚本攻击,可以在 受损的网站上 执行任意 JavaScript 代码,可以诱使 受害用户 执行任何操作。
不同点(一)攻击程度:
- CSRF 只能用于攻击某个特定的操作。例如一个网站存在 “密码修改、邮箱更新、资金转账” 这三个功能点,但只有 “密码修改” 功能存在 CSRF 漏洞,则最终产生的操作就是 “修改任意用户密码”。
- 只要一个网站上存在 XSS 漏洞,则可以利用该 XSS 操纵网站上的所有功能。除了网站上的功能之外,JavaScript 能做的任何事情,XSS 都可以操纵受害用户去做。
不同点(二)攻击方向:
- CSRF 是
单向
漏洞,可以诱使受害者发出请求,但攻击者无法检索响应。 - XSS 是
双向
漏洞,攻击者注入的脚本,既可以发出请求,又可以读取响应,还能将数据发送到攻击者所在的外部域。
# 2、CSRF token可以防止XSS攻击吗?
答案
CSRF token 可以防止部分反射型 XSS 攻击,如果攻击者在请求中没有包含正确的 token,则服务器在回显 XSS 载荷之前,会拒绝该请求。
# 3CSRF防御措施与绕过
# 1、CSRF有哪些防御措施?
答案
三种:
- CSRF token
- SameSite Cookie策略
- Referer标头
# 2、CSRF token是什么?
答案
一种用于防御 CSRF 攻击的手段:token 是一个由服务端随机生成的、不可预测的字符串。由于攻击者无法预测 token 的正确值,因此他们无法将其包含在恶意请求中。如果请求中不包含正确的 token 值,则服务器会拒绝该请求。
# 3、SameSite Cookie是什么?
答案
一种用于防御 CSRF 攻击的手段:有三种策略值,在 Cookie 中添加对应的策略值,可以决定哪些 跨站点请求 允许包含 Cookie。
Strict
(严格),任何跨站点请求,都不允许包含 Cookie。Lax
(宽松),允许跨站点请求包含 Cookie,但必须满足 2 个条件:请求使用GET
方法,并且该请求是由用户的顶级导航发出的(例如单击链接)。None
(禁用),允许在所有跨站点请求中包含 Cookie。
响应标头示例:Set-Cookie: session=11223344; SameSite=Strict
此外,None(禁用)必须和属性 Secure 一起使用,以确保 Cookie 通过 HTTPS 的加密形式进行传输:Set-Cookie: session=11223344; SameSite=None; Secure
。如果只设置了 None 但没有添加 Secure 属性的话,则该 Cookie 会被浏览器拒绝。
# 4、CSRF token怎么绕?
答案
(都是官方实验室中的实操技能):
- 方法一:token 验证取决于请求方法。
- 方法二:token 验证取决于参数是否存在。
- 方法三:token 未绑定到用户会话。
- 方法四:token 绑定到非用户会话。
- 方法五:token 仅在 Cookie 中复制。
- 方法六:XSS + CSRF 组合拳(该实验室位于 XSS 主题)
# 5、SameSite cookie策略怎么绕?
答案
(都是官方实验室中的实操技能):
- 覆盖请求方法,欺骗 SameSite 策略;
- 利用站内的开放重定向漏洞;
- 利用同级域上的 XSS 漏洞;
- 利用 Cookie 刷新和 SameSite 策略的窗口期。