8-bit pub
(在模板注入的路上莽了一整天,然后发现不是模板注入23333333)
尝试SQL注入,猜测后台sql语句
select * from user where username='xxx' and password='xxx';
一系列操作后没有结果

源码中调用了这个模块
node.js中 express-session的安装使用及session的持久化
express-session中的resave和saveUninitialized
然后我找到了这个文章

对比题目的session后,发现和文章的很相似
s%3AK8ZDDh7btfy5iCYOqDDIiBTvI2jPY_5l.TipHczw%2BtyDr%2FUPVusz6CeIk2dY0TFiyGvydM3dJo38
本地测试一下
var express=require('express');/*引入*/
var app=new express();/*实例化*/
var session = require("express-session");//引入中间件
var FileStore = require('session-file-store')(session);
const http = require("http");
var identityKey = 'skey';
app.use(session({
name: identityKey,
secret: 'chyingp', // 用来对session id相关的cookie进行签名
store: new FileStore(), // 本地存储session(文本文件,也可以选择其他store,比如redis的)
saveUninitialized: false, // 是否自动保存未初始化的会话,建议false
resave: false, // 是否每次都重新保存会话,建议false
cookie: {
maxAge: 10 * 1000000 // 有效期,单位是毫秒
}
}));
app.get('/', function (req, res){
if (req.session.userinfo){
res.send('Hello World!你好!欢迎'+req.session.userinfo+'回来!');
}else{
res.send('未登录!');
}
});
app.get('/login', function (req, res){
req.session.userinfo="Tom";//设置session
res.send('登录成功!');
});
const port = process.env.PORT || "3000"
const server = http.createServer(app);
server.listen(port);
生成一个文件
cookie:
s%3A_3wTBmlBQ0BPyCRJs5V57t3tdg7qU-9Z.fCBncBDiBxKjEkcUDQQ8p1iUDCWuQq%2FRM6N4WDtXNe0; name=s%3ArC79tK9qJgzwzwVX8mlH2tFfTtjxrt3E.9PtVQ6MtJs0C1ZBZddeMmDMWGaJQiAVR2bL%2F6CJNAtA
文件名:
8EnYwNEhfAS-yPWP_SRLf-b-ZzWoI5ea.json
内容:
{"cookie":{"originalMaxAge":10000000,"expires":"2021-03-06T05:07:20.355Z","httpOnly":true,"path":"/"},"userinfo":"Tom","__lastAccess":1614997240355}
cookie:
s%3A_3wTBmlBQ0BPyCRJs5V57t3tdg7qU-9Z.fCBncBDiBxKjEkcUDQQ8p1iUDCWuQq%2FRM6N4WDtXNe0; name=s%3A8EnYwNEhfAS-yPWP_SRLf-b-ZzWoI5ea.frf6iPXZitbz21A4K4pLUYIVQc12UzX42gSTMYLjbAM
文件名:
WF33GSNvkdoCTS6OxV060ruY8M6flHYQ.json
内容:
{"cookie":{"originalMaxAge":10000000,"expires":"2021-03-06T05:08:43.966Z","httpOnly":true,"path":"/"},"userinfo":"Tom","__lastAccess":16

本文详细讲述了在D3CTF挑战中,从最初误判的模板注入转向SQL注入,进而深入研究`express-session`的使用,发现session文件的可控性,并通过构造特定的sessionId实现远程代码执行(RCE)。在过程中,作者利用nodemailer模块中的漏洞,结合GitHub资源,最终成功读取到flag,但因题目缺少渲染环节而未能直接完成攻击。
最低0.47元/天 解锁文章
563

被折叠的 条评论
为什么被折叠?



