又来水文章了
十几天前的比赛,今天没blog写,来复现下web签到题。


clone官方wp&docker环境

docker build -t sctf/clouddisk .
docker run -d -p 8090:3333 2f2
  1. 使用当前目录的dockerfile提取镜像,tag叫做sctf/clouddisk
  2. 后台创建新容器并制定映射端口为8090

+上题目给的一段源码:

const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const Koa = require('koa');
const Router = require('koa-router');
const koaBody = require('koa-body');
const send = require('koa-send');const app = new Koa();
const router = new Router();
const SECRET = xxapp.use(koaBody({multipart: true,formidable: {maxFileSize: 2000 * 1024 * 1024 }
}));router.post('/uploadfile', async (ctx, next) => {const file = ctx.request.body.files.file;if (!fs.existsSync(file.path)) {return ctx.body = "Error";}if(file.path.toString().search("/dev/fd") != -1){file.path="/dev/null"}const reader = fs.createReadStream(file.path);let fileId = crypto.createHash('md5').update(file.name + Date.now() + SECRET).digest("hex");let filePath = path.join(__dirname, 'upload/') + fileIdconst upStream = fs.createWriteStream(filePath);reader.pipe(upStream)return ctx.body = "Upload success ~, your fileId is here:" + fileId;});router.get('/downloadfile/:fileId', async (ctx, next) => {let fileId = ctx.params.fileId;ctx.attachment(fileId);try {await send(ctx, fileId, { root: __dirname + '/upload' });}catch(e){return ctx.body = "SCTF{no_such_file_~}"}
});router.get('/', async (ctx, next) => {ctx.response.type = 'html';ctx.response.body = fs.createReadStream('index.html');});app.use(router.routes());
app.listen(3333, () => {console.log('This server is running at port 3333.')
})

当时做的时候通过万能的google搜到了这样一个issue:

https://github.com/dlau/koa-body/issues/75

然后直接exp打出的flag。现在来康康。
emmm~
虚拟机的node环境搞了一个多小时没搞好,现在都1:24了,狗命要紧。就不深入了。

在issues中写的已经很明白了:

Suppose you have JSON body parsing enabled on a POST or PUT route, say ‘/upload-files’, as well as multipart parsing. This is quite easy to do e.g. if you add JSON parsing as global middleware. Suppose it expects the files to be in a field named ‘uploads’. Then you can make a POST or PUT request to ‘/upload-files’ with a JSON body that looks something like {“files”: {“uploads”: [{“path”: “/any/file/path”}]}}, making the request handler think a file has been uploaded to /any/file/path. Now suppose that the handler is set up to copy uploaded files into a public uploads folder. By choosing the path appropriately I can make the server copy any file I like on the server into the public uploads folder and then view its contents. So by using well-known paths of sensitive files I can read private keys, passwords etc. and maybe even gain full access to the server this way.

大概意思就是说如果向文件上传的路由如:/uplaod上传json主体的格式,那么其中path将被解析成已经上传完的文件位置保存到相应文件中。
poc:{"files":{"file":{"name":"xiaoyue","path":"/etc/passwd"}}}

这样直接catflag也就行了。

{"files":{"file":{"name":"xiaoyue","path":"flag"}}}

emm~

poc&exp收集学习
fabric单机部署

[SCTF2020]CloudDisk相关推荐

  1. PB 级数据处理挑战,Kubernetes如何助力基因分析?

    2019独角兽企业重金招聘Python工程师标准>>> 引言 James Watson 和 Francis Crick 于 1953 年发现了 DNA 的双螺旋结构,从此揭开了物种进 ...

  2. 如何在零停机的情况下迁移 Kubernetes 集群

    作者:顾静(子白)|阿里云高级研发工程师:谢瑶瑶(初扬)|阿里云技术专家 导语: 随着云原生理念在企业中的深入和践行,应用容器化的比例大幅提升.是否可以保证应用容器化迁移过程中的平稳切换,保证应用不停 ...

  3. HDFS学习 Java连接hadoop

    文章目录 建立连接获取hadoop下的文件信息 编写hadoop连接工具类 建立连接获取hadoop下的文件信息 import java.io.IOException; import java.net ...

  4. python反编译加密文件_python打包的二进制文件反编译

    简介 Pyhton是一个脚本语言,在运行Python代码时,最终由Python解释器来执行.解释器就是Python的运行环境,但是除了开发人员,大部分人在使用时并不会安装Python.所以官方就提供了 ...

  5. vuepress-theme-reco + Github Actions 构建静态博客,部署到第三方服务器

    最新博客链接 Github链接 查看此文档前应先了解,vuepress基本操作 参考官方文档进行配置: vuepress-theme-reco VuePress SamKirkland / FTP-D ...

  6. SCTF 2021 | 冰天雪地 极限比拼

    ​​今年圣诞怎么过?! SCTF 2021 喊你来解锁圣诞限定赛事啦!!! 由操刀四届赛题的Syclover战队精心打造 48小时超长赛道容纳无限可能 妙趣横生的圣诞特供赛题限时出没 圣诞盲盒隐姓埋名 ...

  7. 0基础快速开发口袋网盘小程序

    点击观看大咖分享 口袋网盘小程序使用的是小程序的云开发,云开发自带免费的云存储.云数据库,开始时不需要涉及服务器的搭建及运维,也不需要进行域名注册与备案,只需要通过一些简单的API就能实现一个完整项目 ...

  8. 2020 SCTF 部分WriteUp

    signin 准备 signin.exe:https://wwa.lanzous.com/inIQdec11zi 程序分析 可以判断出,这个程序实际上是由Python打包成的可执行文件,且在运行这个程 ...

  9. 白嫖小程序云存储空间,手撸你的专属云盘

    前言 之前在开发微信小程序的时候,发现官方给每个小程序分配了5g的免费云存储空间和每个月5g的cdn流量(免费版): 在小程序的开发后台可以查看云存储上的文件,文件本质上是存在cdn上的,每个文件都提 ...

最新文章

  1. 基于nginx的tomcat负载均衡和集群(超简单)
  2. Java基础:网络编程
  3. 阜阳男子拿22万硬币去银行转账,银行员工数钱数到“手抽筋”
  4. 关于生活,可能有用的40条建议
  5. 支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos
  6. drupal ajax 分页,在drupal中使用Ajax时要保持一个404
  7. ptcms精美小说阅读网站源码(带采集规则)
  8. oracle中的合并查询
  9. GlusterFS分布式文件系统
  10. 怎样将树的中序遍历的数输入到一个数组中_二叉搜索树的后序遍历序列(剑指offer第三十一天)...
  11. Timeout waiting for connection from pool
  12. AT89S52与AT89c51的区别
  13. 项目难于管理的根本原因在于项目的”VUCA”特性
  14. 我的第一篇文章——stm32的ADC+DMA+滤波算法
  15. vue-seamless-scroll的使用以及实例
  16. nib和itk读取nii数据的差异——一个自己调了半天的bug复盘
  17. 集成显卡 独立显卡 带 双显示器
  18. 在有序数组中,寻找指定连续数字的起始下标和结束下标
  19. 安装失败解决方法-针式PKM
  20. tftp方式下载烧录镜像到目标机

热门文章

  1. pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)
  2. 普渡大学计算机图形,普渡大学计算机图形学技术研究生语言及申请要求-费用-课程设置...
  3. 利用VBA批量发送Excel中工资单邮件
  4. Maven Framwork – Install and Config
  5. swfobject1.5
  6. 笔记三:ASP.NET MVC 添加一个新页面,运行显示HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
  7. X10 电阻屏tsc2007调试
  8. 科普文章-另一个视角解读计算机编码 修订版
  9. 【OR】YALMIP 指数锥规划
  10. Java对象转xml