news 2026/4/18 8:06:43

Flask任意文件读取+session伪造-NSSCTF-web4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flask任意文件读取+session伪造-NSSCTF-web4

1、打开环境,有个超链接readSomtthing,直接跳转到百度首页。

2、观察跳转URL,IP:PORT/read?url=https://baidu.com。结合提示,可能存在任意文件读取漏洞。

3、使用url= /proc/self/cmdline 读取当前进程对应的终端命令时,发现了app.py。审计代码:

# encoding:utf-8 import re, random, uuid, urllib from flask import Flask, session, request app = Flask(__name__) random.seed(uuid.getnode()) #用mac地址作为种子 app.config['SECRET_KEY'] = str(random.random() * 233) #根据上面的Mac地址,生成密钥。 app.debug = True @app.route('/') def index(): session['username'] = 'www-data' #当前用户 return 'Hello World! Read somethings' @app.route('/read') def read(): try: url = request.args.get('url') m = re.findall('^file.*', url, re.IGNORECASE) n = re.findall('flag', url, re.IGNORECASE) if m or n: return 'No Hack' res = urllib.urlopen(url) return res.read() except Exception as ex: print str(ex) return 'no response' @app.route('/flag') def flag(): if session and session['username'] == 'fuck': #需要让username = fuck,才会读取flag return open('/flag.txt').read() else: return 'Access denied' if __name__ == '__main__': app.run(debug=True, host="0.0.0.0")

可以确定,当前用户是www-data,路由为/。当用户为fuck,路由为/flag时,可以读取flag。由此,需要进行session伪造。

4、session伪造必须要知道scret_key,代码里给出了方法:

random.seed(uuid.getnode()) #用mac地址作为种子 app.config['SECRET_KEY'] = str(random.random() * 233) #根据上面的Mac地址,生成密钥。

根据url=/sys/class/net/eth0/address拿到mac地址:02:42:ac:02:16:63。开始生成scret_key(这里需要使用python2,因为这个题目的环境是2,生成密钥用3的话,长度会长一些,伪造结果不对):

import random random.seed(0x0242ac021663) #也可以转为十进制的2485376915043 print(str(random.random()*233))

结果:10.937048099。

5、拿到scret_key之后,尝试对当前的session解密,看看对不对:

用户:www-data,说明密钥是正确的,开始伪造fuck的session:

刚开始用单引号报错,后来使用双引号正常出来session。替换、刷新、才出现flag。

6、/read路由过滤了flag、file关键字,也可以考虑编码绕过直接读取flag。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:25:14

自定义类或结构体-–-behaviac

原文 在.h文件中,任意编写一个自定义的类或结构体,并用宏DECLARE_BEHAVIAC_STRUCT声明该类或者结构体为非虚类,如下代码所示: struct TypeTest2_t {int name;float weight;bool bLive;DECLARE_BEHAVIAC_STRUCT(TypeTest2_t);…

作者头像 李华
网站建设 2026/4/18 7:57:22

清朝条约全集 PDF 电子版(三册合集):从尼布楚到辛丑条约的完整史料集

若想系统梳理清代对外关系的史料脉络,这份《清代外交文献三册合辑》可作为重要参考 —— 它完整收录了自 1689 年《尼布楚条约》至 1901 年《辛丑条约》期间的核心外交文书,覆盖清代近 220 年的对外交往历程。 这套合辑以时间为线索分册编排&#xff1a…

作者头像 李华
网站建设 2026/4/18 7:29:09

6、数据保护:备份、恢复与业务连续性

数据保护:备份、恢复与业务连续性 在当今数字化时代,数据保护对于各类组织而言至关重要。它不仅关乎数据的安全性,还涉及业务的连续性和灾难恢复能力。本文将深入探讨数据保护的各个方面,包括面临的挑战、可用的机会以及具体的保护策略和技术。 1. 数据保护基础 在 IT 领…

作者头像 李华
网站建设 2026/4/18 7:56:51

检索重排序的 Dify 结果过滤:5步实现精准结果过滤与排序优化

第一章:检索重排序的 Dify 结果过滤在构建基于大语言模型的应用时,检索增强生成(RAG)系统常面临检索结果相关性不足的问题。Dify 作为低代码 AI 应用开发平台,提供了灵活的结果过滤与重排序机制,帮助开发者…

作者头像 李华
网站建设 2026/4/18 7:26:30

Cocos creator判断节点是否能用的方法

一般用 if (coinNode && coinNode.isValid),但为什么unity却不用这种呢?以下是AI给的回答一、Cocos Creator 中 if (coinNode && coinNode.isValid) 的原因在 Cocos Creator(尤其是较新版本,比如 v3.x&#xff09…

作者头像 李华
网站建设 2026/4/18 7:29:18

Gemini 3.0架构革新:从单模态到“全模态统一”的技术跃迁

当AI学会像人类一样“融会贯通”所有感官信息 一、痛点:割裂的AI世界 2023年,开发者小李遭遇典型困境: 用文本模型生成产品需求文档 → 需手动转为流程图用图像模型识别UI设计稿 → 需人工标注组件坐标用代码模型实现功能 → 需反复解释业…

作者头像 李华