24th HackingCamp CTF Basic Auth [WEB]

조승현·2022년 2월 21일
0

#! /usr/bin/env python3
#-*- coding: utf-8 -*-

from flask import Flask
from flask import request, url_for

from functools import wraps
from flag import FLAG 
import os, json

server = Flask(__name__)
server.secret_key = os.urandom(32)


def check_auth(f):
    @wraps(f)
    def func(*args, **kwargs):
        page = kwargs['page']
        if page.split('.')[-1] in ['js', 'css', 'png', 'jpg']:
            pass
        else:
            auth = request.authorization
            if not (auth and check_login(auth.username, auth.password)):
                return ('Wrong! who are you???😑', 401, {
                    'WWW-Authenticate': 'Basic realm="show me your id,pw"'
                })
        return f(*args, **kwargs)
    return func



def check_login(user_id, user_pw):
    with open(url_for('static', filename='account')[1:], 'r') as f:
        data = f.read().strip().split(':')
        admin_id = data[0]
        admin_pw = data[1]
        if user_id == admin_id and user_pw == admin_pw:
            return True
    return False


@server.route('/')
def main():
    return 'Welcome! go to any page!'

@server.route('/<page>')
@check_auth
def flag(page):
    if '.' in page:
        return server.send_static_file(page)
    return FLAG


if __name__ == '__main__':
    server.run(host='0.0.0.0')


코드와 같이 주어진다. 아 실제로 ctf중에 못푼 문젠데 너무 아쉬운 문제다. 저 request authorization을 뚫으려고 애썼는데 의도는 그냥 코드에 대한 간단한 문제였다. 처음 check_auth에서 확장자를 검사하는데 저 확장자를 입력해주면 pass가 된다. 또 def flag에서는 '.'이 안들어가면 되니 그냥 /js 로 해주면 바로 풀린다...

solved

flask를 빨리 마스터해야 할것같다. 자꾸 발목을 잡는다.

profile
Inha University / CTF Web Player / Team Riot of Noob

0개의 댓글