corCTF writeup
WEB
msfrog-generator
应该是打个命令注入
通过传json可以出个图片
推理后台逻辑
1 | 工具 msonse.png mseyes.png |
明显这里是存在过滤的
直接去度文档就好了
这么说 我这id是个参数
前面也可以加
t4rn大哥快我一步
payload
1 | 1;cat /flag;msnose.png |
我的是是 报错才会出现回显 但容器不出网 咋把输出重定向到报错里?有时间可以研究研究
simplewaf
1 | docker build -t corweb2/corweb2 . |
1 | docker run -p 127.0.0.1:3456:3456 -d corweb2/corweb2 |
1 | const express = require("express"); |
做题过程
现在这题有几个想法
- 让这里解析出问题
JSON.stringify(item).includes("flag")
然后就检测不到flag了 - 用什么神奇的构造来让他本来检测不出来 然后读进来以后还是当做flag
查到一个好玩的东西
现在关键就是这个 JSON.stringify(item)
可以搞对象
然后是不是可以接一些拼接啥的给他干掉?
https://tttang.com/archive/1394/
理一下思路
现在我的想法是
- 通过
JSON.stringify(item)
来读一下flag.txt
- 一爆破的方式去读软连接
如何去提前读一下 flag.txt
?
https://blog.csdn.net/Zero_Adam/article/details/114853022
查阅了相关资料 这拦截器实在所有路由之前起作用的 所以 只剩下一种可能 就是去读远程的文件了
读一个远程的软连接?
stupid try
能不能搞一手竞争之类的
1 | import requests |
没啥用 不知道是不是我方法的问题
复现
说实话 这题只有一种可能 那就是 readFileSync 函数可以识别 然后 Json.stringfy()
函数不能识别
去跟一下 readFileSync 的源码
这个源码 我真是艹了
这个是官方自带的模块 所以你要到 github 上下node的源码
nodejs/node: Node.js JavaScript runtime (github.com)
在ws里直接b根进 我也不知道跟进了个什么东西 艹
他这里先判断是不是 fd 类型
不是的话 就用 openSync
来读
我们继续根进
然后看看他是咋 validate 的
这里换包了
又换包了
接着去跟一下
然后来看看那这个 Instance
到底能接受个什么东西 我们肯定要在这里搞出点名堂来
这里做了检查
- 不能为空
- 要有href
- 要有origin
然后看到这里
这里表明 只接受 file://
和 string
最后跟到这里
express 的qs解析参数时会出现
1 | file[a]=a&file[c]=b ==> {"a":"a","c":"b"} |
最终payload
1 | ?file[href]=x&file[origin]=x&file[protocol]=file:&file[hostname]=&file[pathname]=fl%2561g.txt |