破解tinypng文件上传的限制
简单破解tinypng文件上传的限制
/** * 帮助文档* -------* * 获取帮助* 指令 -h* * 获取命令执行文件夹 * 指令 -f * 参数 ./* 必填,待处理的图片文件夹* * 获取是否深度递归处理图片文件夹* 指令 -deep* 可选,默认不深度递归* * 命令行脚本参考示例* > node ./脚本.js -f ./图片文件夹 -deep* */const fs = require('fs');const path = require('path');const https = require('https');const URL = require('url').URL;const EventEmitter = require('events');const err = msg => new EventEmitter().emit('error', msg);if (getHelp()) return false;const conf = {files: [],EntryFolder: getEntryFolder(),DeepLoop: getDeepLoop(),Exts: ['.jpg', '.png'],Max: 5200000, // 5MB == 5242848.754299136}fileFilter(conf.EntryFolder)console.log("本次执行脚本的配置:", conf);console.log("等待处理文件的数量:", conf.files.length)conf.files.forEach(img => fileUpload(img)); 工具函数/*** 获取帮助命令* 指令 -h*/function getHelp() {let i = process.argv.findIndex(i => i === "-h");if (i !== -1) {return true;}}/*** 获取命令执行文件夹 * 指令 -f * 参数 ./* 必填,待处理的图片文件夹*/function getEntryFolder() {let i = process.argv.findIndex(i => i === "-f");if (i === -1 || !process.argv[i + 1]) return err('获取命令执行文件夹:失败');return process.argv[i + 1];}/*** 获取是否深度递归处理图片文件夹* 指令 -deep* 可选,默认不深度递归*/function getDeepLoop() {return process.argv.findIndex(i => i === "-deep") !== -1;}/*** 过滤待处理文件夹,得到待处理文件列表* @param {*} folder 待处理文件夹* @param {*} files 待处理文件列表*/function fileFilter(folder) {// 读取文件夹fs.readdirSync(folder).forEach(file => {let fullFilePath = path.join(folder, file)// 读取文件信息let fileStat = fs.statSync(fullFilePath);// 过滤文件安全性/大小限制/后缀名if (fileStat.size <= conf.Max && fileStat.isFile() && conf.Exts.includes(path.extname(file))) conf.files.push(fullFilePath);// 是都要深度递归处理文件夹else if (conf.DeepLoop && fileStat.isDirectory()) fileFilter(fullFilePath);});}/*** TinyPng 远程压缩 HTTPS 请求的配置生成方法*/function getAjaxOptions() {return {method: 'POST',hostname: 'tinypng.com',path: '/web/shrink',headers: {rejectUnauthorized: false,"X-Forwarded-For": Array(4).fill(1).map(() => parseInt(Math.random() * 254 + 1)).join('.'),'Postman-Token': Date.now(),'Cache-Control': 'no-cache','Content-Type': 'application/x-www-form-urlencoded','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}}}/*** TinyPng 远程压缩 HTTPS 请求* @param {string} img 待处理的文件* @success {* "input": { "size": 887, "type": "image/png" },* "output": { "size": 785, "type": "image/png", "width": 81, "height": 81, "ratio": 0.885, "url": "https://tinypng.com/web/output/7aztz90nq5p9545zch8gjzqg5ubdatd6" }* }* @error {"error": "Bad request", "message" : "Request is invalid"}*/function fileUpload(imgPath) {let req = https.request(getAjaxOptions(), (res) => {res.on('data', buf => {let obj = JSON.parse(buf.toString());if (obj.error) console.log(`压缩失败!\n 当前文件:${imgPath} \n ${obj.message}`);else fileUpdate(imgPath, obj);});});req.write(fs.readFileSync(imgPath), 'binary');req.on('error', e => console.error(`请求错误! \n 当前文件:${imgPath} \n`, e));req.end();}// 该方法被循环调用,请求图片数据function fileUpdate(entryImgPath, obj) {let options = new URL(obj.output.url);let req = https.request(options, res => {let body = '';res.setEncoding('binary');res.on('data', (data) => body += data);res.on('end', () => {fs.writeFile(entryImgPath, body, 'binary', err => {if (err) return console.error(err);let log = "压缩成功"log += `优化比例: ${ (( 1 - obj.output.ratio) * 100).toFixed(2) }%`log += `原始大小: ${ (obj.input.size / 1024).toFixed(2) }KB`log += `压缩大小: ${ (obj.output.size / 1024).toFixed(2) }KB`log += `文件:${entryImgPath}`console.log(log);});});});req.on('error', e => console.error(e));req.end();}// node ./tinypng.js -f ./static/smp/m/course_task
复制上面的代码,直接在node环境下运行命令: node 脚本.js -f 图片文件夹路径
制作不易,觉得对你有帮助,可以请作者喝杯咖啡。
有不懂可以加作者微信探讨:lfj990319
破解tinypng文件上传的限制相关推荐
- portswigger 目录遍历文件上传
目录 <1> 目录遍历 什么是目录遍历? 通过目录遍历读取任意文件 (1) 去除了多余 URL 解码的遍历序列 (2) 非递归剥离的遍历序列 如何防止目录遍历攻击 <2> 文件 ...
- DVWA靶机-文件上传漏洞(File Upload)
DVWA靶机-文件上传漏洞(File Upload) 文件上传漏洞的四个等级,low,medium,high,impossible,今天我们针对于不同的等级进行基于文件上传漏洞的攻击 DVWA靶机-暴 ...
- [网络安全学习篇60]:文件上传
引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...
- svg + image/svg+xml 文件上传实现xss
svg + image/svg+xml 文件上传实现xss 环境:dvwa靶场 靶场关卡:文件上传 靶场难度:低级 我的吾爱破解帖子:XSS新思路-----XSS+SVG漏洞复现 https://ww ...
- 绕过黑名单检查实现文件上传1 ——合天网安实验室学习笔记
实验链接 文件上传指将客户端数据以文件形式封装,通过网络协议发送到服务器端.在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存.了解文件上传漏洞产生的原因,掌握漏洞的利用方法. 链接:http: ...
- 验证码、文件上传和中间件
1.验证码 1.作用 为了更好的保障请求的合法性,防止无效访问,恶意访问,暴力破解等攻击. 包 pip install pillow 2.验证码的使用 导入第三方库 文件直接复制粘贴到自己项目的app ...
- 网安基础学习之“文件上传漏洞原理与实现”
网安基础学习之"文件上传漏洞原理与实现" 近期新闻头条上报出了"长沙市场监管局网站被上传了黄色页面",经过长沙市公安局网技支队的排查,该门户网站后台编辑器存在* ...
- FTP服务器的搭建与使用FTP软件进行文件上传
使用工具:VMware pro,windows server 2008 r2系统镜像文件 1.新建虚拟机,两个模式都可以创建 1.新建一个空白系统. 1.选择操作系统 2.选择操作系统版本 1.配置w ...
- 第20篇:WEB漏洞~文件上传~基础及过滤方式
目录 Q&A 1. 文件上传漏洞的类型 2. 案例 2.1. 常规文件上传地址的获取说明 2.2. ★不同格式下的文件类型后门测试 2.3. 配合解析漏洞下的文件类型后门测试 2.3. 本地文 ...
- web漏洞(CSRF-SSRF-文件包含-文件解释-文件下载-目录遍历-sql注入-文件上传-反序列化-XSS-XXE-RCE-逻辑越权)
1.CSRF(跨站请求伪造)(需要对方是在登录的情况下)--主要用于骗转账等等 原理:A在已经登录了银行的网站,并且此时去访问了B所构造的网页添加了特殊代码,A点击了B,由于A已经登录了,就造成了A直 ...
最新文章
- UVA11549计算器谜题
- 存储控制器_SDRAM详解
- 云炬Android开发笔记 16附加功能开发(二维码,一键分享,分页,搜索)
- Azure SQL的DTU和eDTU到底是个什么鬼
- sql server 创建唯一性非聚集索引语句_数据库专题—索引原理
- 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
- 如何去掉Orcad Capture中元件标号下划线
- php传递参数给asp.net,asp.net 传值总结
- python设置黑色主题_Python背景色与语法高亮主题配置
- AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器_按钮按下和抬起显示不同颜色---Android原生开发工作笔记124
- 众包专访:告别接包黑历史,来到开源中国众包接包小记
- mysql5.7卸载服务_win10卸载原mysql安装64位mysql5.7并修改root密码
- 新cBSS敏捷发布实践
- word“您的组织策略阻止我们为您完成此操作”解决记录
- windbg调试命令9(dt、d)
- caniuse-lite is outdated. Please run: npx browserslist@latest --update-db
- 如何提升营销工作ROI?跨渠道营销了解一下
- 《新编计算机科学概论》一2.5 计算机软件系统
- java中secretkey,java生成秘钥key,并保存秘钥到文件中
- html怎么给图片加页码,在Word里,怎样让页码显示在插入的图片上?
热门文章
- 清华大学2008年硕士生招生参考书目录
- 微计算机与单片机原理及应用答案,单片机原理及应用(张毅刚)完整答案[一].pdf...
- 《暮色4:破晓(上)》暮光之城 高清蓝光BD 1080P 720P下载,附中英双字字幕!...
- 对于i=1,i=i++,最后输出结果为1的理解
- CuteFTP下载大文件时报错
- Threejs实现天空盒,全景场景,地面草地
- 搜索系统硬盘中包含指定字符串的文件的工具和方法——全文搜索、搜索文件内容(持续更新中)
- QQ扫码登录实现与原理
- PCWorld测评的2012版世界级杀毒软件
- 转一段群里看到的小诗,银才啊银才!