csrf跨站请求伪造(portswigger)无防御措施
前言:基础csrf学习(没有任何防御措施)
内容来自portswigger,一个靶场练习,国外的网站,可能需要翻墙
要使 CSRF 攻击成为可能,必须满足三个关键条件:
- 相关操作。应用程序中存在攻击者有理由诱发的操作。这可能是特权操作(例如修改其他用户的权限)或对用户特定数据的任何操作(例如更改用户自己的密码)。
- 基于 Cookie 的会话处理。执行该操作涉及发出一个或多个 HTTP 请求,并且应用程序仅依赖会话 Cookie 来识别发出请求的用户。没有其他机制可用于跟踪会话或验证用户请求。
- 没有不可预测的请求参数。执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当导致用户更改其密码时,如果攻击者需要知道现有密码的值,则该函数不易受到攻击。
解释
1、有可利用的功能点,例如修改密码
2、网站依赖cookie进行身份验证,没有其他的认证
3、没有意外的情况,不需要攻击者输入旧的密码
CSRF 是如何工作的?-继续
例如,假设应用程序包含一个允许用户更改其帐户的电子邮件地址的函数。当用户执行此操作时,他们会发出如下所示的 HTTP 请求:
POST /email/change HTTP/1.1 Host: vulnerable-website.com Content-Type: application/x-www-form-urlencoded Content-Length: 30 Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE email=wiener@normal-user.com
这满足 CSRF 所需的条件:
- 更改用户帐户的电子邮件地址的操作引起了攻击者的兴趣。执行此操作后,攻击者通常能够触发密码重置并完全控制用户的帐户。
- 应用程序使用会话 Cookie 来识别发出请求的用户。没有其他令牌或机制来跟踪用户会话。
- 攻击者可以轻松确定执行操作所需的请求参数的值。
解释
实现csrf
只需要填写新的邮箱号码,就可以完成邮箱的修改无法实现csrf
如果修改邮箱,需要填写邮箱验证码,就无法实现csrf
构造html页面
满足这些条件后,攻击者可以构建包含以下 HTML 的网页:
<html> <body> <form action="https://vulnerable-website.com/email/change" method="POST"> <input type="hidden" name="email" value="pwned@evil-user.net" /> </form> <script> document.forms[0].submit(); </script> </body> </html>
解释
构造html页面,然后组合成一个链接,让受害者访问(前提受害者登录该网站,有cookie),最终攻击执行
如果受害者用户访问攻击者的网页,将发生以下情况:
- 攻击者的页面将触发对易受攻击网站的 HTTP 请求。
- 如果用户登录到易受攻击的网站,他们的浏览器将自动在请求中包含他们的会话 cookie(假设没有使用 SameSite cookie)。
- 易受攻击的网站将以正常方式处理请求,将其视为由受害者用户发出,并更改他们的电子邮件地址。
注意
尽管 CSRF 通常与基于 cookie 的会话处理有关,但它也出现在应用程序自动向请求添加一些用户凭据的其他上下文中,例如 HTTP Basic 身份验证和基于证书的身份验证。
解释
受害者登录该网站,有cookie,受害者访问,攻击执行,
假设没有SameSite cookie,不懂
如何构造html页面
手工构造可能麻烦,可以使用burp自带的poc构造的工具
选择 Engagement tools / Generate CSRF PoC。
将生成的 HTML 复制到网页中,在登录到易受攻击网站的浏览器中查看它,并测试是否成功发出了预期的请求并发生了所需的操作。
正题
开始实验
填写信息,开始抓包
点击浏览器测试,然后复制链接,在浏览器访问
成功修改
实际操作(应该构造一个链接,然后让他访问)需要自己有服务器,然后就有域名
点击复制html ,创建文档,粘贴,然后修改文件后缀为html。
放到网站的目录下,
访问这个文件,搭在自己的电脑上的
成功修改
靶场闯关
输入账号密码,生成scrfpoc,bp有自带的工具
选择自动提交脚本,好像默认就是开启的,复制转到portswigger
转到这个服务器
这个服务器的效果应该是
模拟用户点击到这个含有更改邮箱的html页面,最后构成攻击,点第三个就好了,意思是将漏洞发送给受害者
不知道为啥好不了