[WARGAME] 드림핵 워게임 - NoSQL-CouchDB

jckim22·2022년 11월 11일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
61/114

아래는 서버 코드이다

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
const nano = require('nano')(`http://${process.env.COUCHDB_USER}:${process.env.COUCHDB_PASSWORD}@couchdb:5984`);
const users = nano.db.use('users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
/* GET home page. */
app.get('/', function(req, res, next) {
  res.render('index');
});
/* POST auth */
app.post('/auth', function(req, res) {
    users.get(req.body.uid, function(err, result) {
        if (err) {
            console.log(err);
            res.send('error');
            return;
        }
        if (result.upw === req.body.upw) {
            res.send(`FLAG: ${process.env.FLAG}`);
        } else {
            res.send('

위 코드만 봐도 uid에서 어떤 검사도 없는 것을 알 수 있다.

먼저 아래처럼 존재하지 않는 uid를 입력하면 fail이 된다.


아래처럼 admin으로 입력하면 error라고 뜬다.
upw가 form에서 required속성이 있어서 공백으로 쓸 수가 없었다.
그래서 개발자 도구로 없애주고 보낸 요청의 페이로드이다.

DB의 모든 도큐멘트를 보여주는 _all_docs를 사용할 수 있다는 점을 알아야한다.
이렇게 되면 upw라는 키값이 result에는 없게되어 밸류는 undefined가 될 것이다.

아래처럼 입력하면 될 줄 알았으나


아래와 같이 payload는 upw가 같이 가고 있었다.

upw을 없애주어야 undefined가 성립이 되기 때문에 버프슈트를 켰다.
그리고 패킷을 잡아 아래처럼 되어있는 패킷에서

아래와 같이 upw를 없애주니까

밑처럼 플래그를 얻을 수 있었다.

profile
개발/보안

0개의 댓글