문제정보
node와 mongodb로 구성된 게시판입니다.
비밀 게시글을 읽어 FLAG를 획득하세요.
MongoDB < 4.0.0
Keypoint
ObjectID <-> Timestamp
Index.js
module.exports = function(app, MongoBoard){
app.get('/api/board', function(req,res){
MongoBoard.find(function(err, board){
if(err) return res.status(500).send({error: 'database failure'});
res.json(board.map(data => {
return {
_id: data.secret?null:data._id,
title: data.title,
author: data.author,
secret: data.secret,
publish_date: data.publish_date
}
}));
})
});
app.get('/api/board/:board_id', function(req, res){
MongoBoard.findOne({_id: req.params.board_id}, function(err, board){
if(err) return res.status(500).json({error: err});
if(!board) return res.status(404).json({error: 'board not found'});
res.json(board);
})
});
app.put('/api/board', function(req, res){
var board = new MongoBoard();
board.title = req.body.title;
board.author = req.body.author;
board.body = req.body.body;
board.secret = req.body.secret || false;
board.save(function(err){
if(err){
console.error(err);
res.json({result: false});
return;
}
res.json({result: true});
});
});
}
메인화면
이 문제의 키포인트는 바로 오브젝트 ID이다.
기존에 있던 게시글 3개를 비교해보면 다음과 같다.
제목 | ObjectID | Timestamp |
Mongo | 64b670305ff9a1ffda15ea17 | 2023-07-18T10:57:52.652Z |
FLAG | ??? | 2023-07-18T10:57:54.653Z |
Good | 64b670345ff9a1ffda15ea19 | 2023-07-18T10:57:56.656Z |
위 ObjectID를 살짝 분류해보면
'64b6703' 여기까지는 똑같고 그이후는 'ff9a1ffda15ea1' 가 똑같고 다음 숫자는 8로 추측할 수 있다.
위 정보로 유추해볼수 있는 FLAG 의 ObjectID는 '64b6703 ?? ff9a1ffda15ea18' 이다.
따라서 가운데 두단어를 맞추기위해 생각을 해봤는데, 위 3개의 게시글 작성 시간은 정확히 2초씩 차이가 난다.
그리고 우리가 알고자 하는 두단어를 보면 Mongo 게시글은 '05' Good 게시글은 '45' 로 이 가운데 값을 생각해보면
'25'이다. 따라서 내가 유추한 ObjectID는 '64b670325ff9a1ffda15ea18' 이다.
Index.js의 코드대로 추측한 ObjectID를 /api/board/ 에 입력하였다.
사실 이렇게 푸는게 맞는건지 아니면 운이 좋아서 시간이 딱 맞아떨어진지 모르겠다.
FLAG
DH{f823bac286ef352172b1cd73c812708ea356a000}
'DreamHack > web' 카테고리의 다른 글
[wargame] php-1 (0) | 2023.07.23 |
---|---|
[wargame] Carve Party (0) | 2023.07.23 |
[wargame] session (0) | 2023.07.17 |
[wargame] devtools-sources (0) | 2023.07.17 |
[wargame] csrf-2 (0) | 2023.07.17 |