实验背景与目的

在实验一中,我们通过加简单的 /test.js 后缀就完成了攻击。但在实验二中,目标服务器进行了“加固”。如果你直接在 /my-account 后面加路径,后端服务器会返回 404 Not Found。
在这里插入图片描述

所以,我们现在需要找到一个特殊的分隔符(Delimiter)。这个字符要能让后端服务器认为路径已结束(返回 200 个人页面),同时让缓存服务器认为它是文件名的一部分(触发静态缓存)。

实验环境搭建与介绍

1.核心模块:
(1)repeater重放器

  • Repeater 的作用是修改并重新发送单个 HTTP 请求。当你从 Proxy(代理)拦截到一个请求后,可以将其发送到 Repeater
    进行手动调试。

  • 可适用于少量请求调试,如上个实验修改并查看缓存是否命中

  • 但在本实验中,需要验证一个字典表是否会作为服务器的分隔符,所以需要用到一个新的模块intruder入侵者。

(2)intruder入侵者

  • Intruder 是一个自动化攻击模块,它可以对 HTTP 请求中的特定位置进行定制化的爆破(Brute Force)或扫描。

  • 核心组件

    • Positions(位置):用 § 符号标记你想让 Burp 自动替换的地方。

    • Payloads(有效载荷):也就是你的“字典”。可以是数字、特殊字符(如 %23, %3b)、或者是用户名密码列表。这个实验室页面有提供,可以直接去复制并粘贴过来。

    • Attack type(攻击模式):决定了多个字典之间如何组合(如 Sniper, Battering ram, Pitchfork 等)。

  • 正好适用实验二“寻找服务器可识别的分隔符”场景,不知道哪个字符能截断路径,就用intruder把所有ASCII符号试一遍。

    注意:由于使用的是社区版,Intruder 会有 Time throttled(限速) 弹窗,点击 OK 忽略即可,不影响实验。

核心操作步骤

1.确定目标端点
在my account页面使用wiener:peter登录,注意响应中包含了api key。
2.识别源服务器使用的路径分隔符
(1)在Proxy > HTTP history中,找到/my-account请求,点击send to repeater。
(2)修改后面的路径,使用分隔符表里的试探发送,发现“;“会返回200,但“(“不会。
在这里插入图片描述
在这里插入图片描述
(3)但是一个一个的通过repeater发送请求来尝试太慢了,我们可以使用intruder。同样右键刚刚的/my-account请求,点击send to intruder。
然后前往intruder页面。在这里插入图片描述
(4)设置变量位置
编辑光标放到/my- account之后,点击上方position,选择“add $”,代表分隔符位置,然后加上.js后缀。
在这里插入图片描述

(5)在 Payloads 选项卡中,添加常用的 URL 字符,尤其是编码后的版本。(可在实验室首页复制,我也把这个直接放在下面了)

!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
@
[
\
]
^
_
`
{
|
}
~
%21
%22
%23
%24
%25
%26
%27
%28
%29
%2A
%2B
%2C
%2D
%2E
%2F
%3A
%3B
%3C
%3D
%3E
%3F
%40
%5B
%5C
%5D
%5E
%5F
%60
%7B
%7C
%7D
%7E

复制到剪切板后,来到payloads configuration,点击payload。
在这里插入图片描述
记得取消勾选url-encode(不然会导致无法筛选出正确分隔符,全部返回404)
在这里插入图片描述

(6)选择模式sniper attack,然后点击start attack。
在这里插入图片描述
这里就可以看到每一个分隔符对应返回的状态码,现在请求比较少可以直接肉眼找到两个请求返回为200OK,即"?“和”;"。
但是也可以直接使用filter。选择只看200ok请求。
在这里插入图片描述

然后就可以看到返回200OK的分隔符“?”和“;”
在这里插入图片描述
3.验证缓存命中
(1)在repeater中验证被服务器识别的分隔符会不会被缓存识别。分别验证两个。

  • 构造路径。/account?aaa.js
    在这里插入图片描述

  • 注意看右下方响应头,发送两次后,依旧没有显示缓存命中,说明缓存也将其识别为了分隔符。

  • 再尝试";"

在这里插入图片描述
-可以发现,第一次为x-cache:miss,再发送一次变为hit,说明该字符完美欺骗了缓存服务器,使其认为这是一个名为 my-account%23aaa.js 的静态脚本。

4.构造攻击链与收割
(1)前往exploit服务器。
(2)编写诱导脚本。

//注意这里的实验室id是登录页那边显示的id,而不是服务器这里“exploit-..."的id
<script>document.location="https://YOUR-LAB-ID.web-security-academy.net/my-account;wcd.js"</script>

(3) 点击 Deliver exploit to victim。
(4)管理员点击后,立即访问该 .js 路径,就能成功截获管理员的 API Key。
如图,来到管理员登录页。
username为calos。
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐