[2026-01-07 20:46:27] [INFO] [AIService] 已从数据库加载已编译的 Prompt 模板(难度: 困难)
[2026-01-07 20:46:27] [INFO] [AIService] 已加载 Prompt,包含 10 个阶段
[2026-01-07 20:46:27] [INFO] [AIService] 初始化 10 个阶段 (task_id: 20260107204627-62ecf821-3951-4623-84c1-60df28162af3)
[2026-01-07 20:46:27] [INFO] [AIService] 已设置系统提示词 (22791 字符)
[2026-01-07 20:46:27] [INFO] [AIService] 已从数据库加载系统 Prompt (22791 字符)
[2026-01-07 20:46:27] [INFO] [AIService] 开始生成 CTF 题目: 困难 / Python / Python格式化字符串, Python沙箱逃逸, Python反序列化
[2026-01-07 20:46:27] [INFO] [AIService] 用户指令内容:
- 语言:Python
- 难度级别:困难
- 漏洞类型:Python格式化字符串, Python沙箱逃逸, Python反序列化
- 应用场景:支付平台
[2026-01-07 20:46:27] [DEBUG] [AIService] 阶段 0 (ID: 1, 用户输入需求): processing - 正在处理: 用户输入需求...
[2026-01-07 20:46:27] [DEBUG] [AIService] 阶段 0 (ID: 1, 用户输入需求): completed - 用户输入需求已确认
[2026-01-07 20:46:27] [SYSTEM] [AIService] ============================================================
[2026-01-07 20:46:27] [INFO] [AIService] [轮次 1] 发送给 AI 的消息:
[2026-01-07 20:46:27] [INFO] [AIService] - 语言:Python
- 难度级别:困难
- 漏洞类型:Python格式化字符串, Python沙箱逃逸, Python反序列化
- 应用场景:支付平台
[2026-01-07 20:46:28] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:46:42] [SYSTEM] [AIService] ============================================================
[2026-01-07 20:46:42] [INFO] [AIService] [轮次 1] AI 响应:
[2026-01-07 20:46:42] [INFO] [AIService] 阶段1:用户输入需求
**用户需求已确认**:
- 语言:Python
- 难度:困难
- 漏洞类型:Python格式化字符串、Python沙箱逃逸、Python反序列化
- 应用场景:支付平台
---
阶段2:漏洞主次分类
### 漏洞主次分类
**用户选择的漏洞**:Python格式化字符串、Python沙箱逃逸、Python反序列化
**分类结果**:
| 漏洞 | 分类 | 理由 |
|------|------|------|
| Python沙箱逃逸 | 主漏洞 | 高深度漏洞,需要深入理解Python沙箱机制、对象模型和属性访问,适合作为困难题的核心考点 |
| Python反序列化 | 主漏洞 | 高深度漏洞,需要理解Python序列化机制、魔术方法和对象构造,可作为利用链的关键步骤 |
| Python格式化字符串 | 辅助漏洞 | 用于信息泄露,作为获取敏感信息的前置步骤 |
**writeup 分配**:
- 主漏洞(Python沙箱逃逸):4 篇(40%)
- 主漏洞(Python反序列化):4 篇(40%)
- 辅助漏洞(Python格式化字符串):2 篇(20%)
---
阶段3:知识库获取
现在从知识库中获取相关的writeup学习材料:
[2026-01-07 20:46:42] [DEBUG] [AIService] 保存阶段 0 摘要:
[2026-01-07 20:46:42] [DEBUG] [AIService] 阶段 0 (ID: 1, 用户输入需求): completed - 阶段 0 完成
[2026-01-07 20:46:42] [DEBUG] [AIService] 阶段 1 (ID: 2, 漏洞主次分类): processing - 正在执行: 漏洞主次分类
[2026-01-07 20:46:42] [INFO] [AIService] 进入阶段 1 (ID: 2): 漏洞主次分类
[2026-01-07 20:46:42] [TOOL] [AIService] [轮次 1] AI 请求执行 1 个工具:
[2026-01-07 20:46:42] [INFO] [AIService] 🔧 run_command: 参数: {"command": "python3 data/scripts/choice.py --difficulty=困难 --count=4 \"Python沙箱逃逸\""}
[2026-01-07 20:46:42] [INFO] [AIService] 执行工具: run_command
[2026-01-07 20:46:42] [INFO] [AIService] [Tool] 执行工具: run_command
[2026-01-07 20:46:42] [INFO] [AIService] [Tool] 执行命令: python3 data/scripts/choice.py --difficulty=困难 --count=4 "Python沙箱逃逸"...
[2026-01-07 20:46:42] [INFO] [AIService] [Tool] 执行 data/ 目录内的可执行文件,应用受限环境
[2026-01-07 20:46:42] [INFO] [AIService] 🔧 run_command: 结果: 📊 指定数量: 4 篇writeup
📁 分类 [Python沙箱逃逸]: 找到 6/10 个有效writeup
✅ 分类 [Python沙箱逃逸]: 从 6 个有效writeup中选择了 4 篇
============================================================
📚 最终汇总选出的 4 篇文章:
- Need_some_flags_2.md
- PyAuCalc.md
- baby_python_fixed.md
- pyshv1.md
[2026-01-07 20:46:42] [INFO] [AIService] 🔧 run_command: 📊 指定数量: 4 篇writeup
📁 分类 [Python沙箱逃逸]: 找到 6/10 个有效writeup
✅ 分类 [Python沙箱逃逸]: 从 6 个有效writeup中选择了 4 篇
============================================================
📚 最终汇总选出的 4 篇文章:
- Need_some_flags_2.md
- PyAuCalc.md
- baby_python_fixed.md
- pyshv1.md
[2026-01-07 20:46:42] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:46:45] [TOOL] [AIService] [轮次 2] AI 请求执行 1 个工具:
[2026-01-07 20:46:45] [INFO] [AIService] 🔧 run_command: 参数: {"command": "python3 data/scripts/choice.py --difficulty=困难 --count=4 \"Python反序列化\""}
[2026-01-07 20:46:45] [INFO] [AIService] 执行工具: run_command
[2026-01-07 20:46:45] [INFO] [AIService] [Tool] 执行工具: run_command
[2026-01-07 20:46:45] [INFO] [AIService] [Tool] 执行命令: python3 data/scripts/choice.py --difficulty=困难 --count=4 "Python反序列化"...
[2026-01-07 20:46:45] [INFO] [AIService] [Tool] 执行 data/ 目录内的可执行文件,应用受限环境
[2026-01-07 20:46:45] [INFO] [AIService] 🔧 run_command: 结果: 📊 指定数量: 4 篇writeup
📁 分类 [Python反序列化]: 找到 7/9 个有效writeup
✅ 分类 [Python反序列化]: 从 7 个有效writeup中选择了 4 篇
============================================================
📚 最终汇总选出的 4 篇文章:
- File Store.md
- Jar.md
- Paddle.md
- Pickle Store.md
[2026-01-07 20:46:45] [INFO] [AIService] 🔧 run_command: 📊 指定数量: 4 篇writeup
📁 分类 [Python反序列化]: 找到 7/9 个有效writeup
✅ 分类 [Python反序列化]: 从 7 个有效writeup中选择了 4 篇
============================================================
📚 最终汇总选出的 4 篇文章:
- File Store.md
- Jar.md
- Paddle.md
- Pickle Store.md
[2026-01-07 20:46:45] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:46:49] [TOOL] [AIService] [轮次 3] AI 请求执行 1 个工具:
[2026-01-07 20:46:49] [INFO] [AIService] 🔧 run_command: 参数: {"command": "python3 data/scripts/choice.py --difficulty=困难 --count=2 \"Python格式化字符串\""}
[2026-01-07 20:46:49] [INFO] [AIService] 执行工具: run_command
[2026-01-07 20:46:49] [INFO] [AIService] [Tool] 执行工具: run_command
[2026-01-07 20:46:49] [INFO] [AIService] [Tool] 执行命令: python3 data/scripts/choice.py --difficulty=困难 --count=2 "Python格式化字符串"...
[2026-01-07 20:46:49] [INFO] [AIService] [Tool] 执行 data/ 目录内的可执行文件,应用受限环境
[2026-01-07 20:46:49] [INFO] [AIService] 🔧 run_command: 结果: 📊 指定数量: 2 篇writeup
📁 分类 [Python格式化字符串]: 找到 3/3 个有效writeup
✅ 分类 [Python格式化字符串]: 从 3 个有效writeup中选择了 2 篇
============================================================
📚 最终汇总选出的 2 篇文章:
- Madlibbin.md
- Magic Render.md
[2026-01-07 20:46:49] [INFO] [AIService] 🔧 run_command: 📊 指定数量: 2 篇writeup
📁 分类 [Python格式化字符串]: 找到 3/3 个有效writeup
✅ 分类 [Python格式化字符串]: 从 3 个有效writeup中选择了 2 篇
============================================================
📚 最终汇总选出的 2 篇文章:
- Madlibbin.md
- Magic Render.md
[2026-01-07 20:46:49] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:46:52] [SYSTEM] [AIService] ============================================================
[2026-01-07 20:46:52] [INFO] [AIService] [轮次 4] AI 响应:
[2026-01-07 20:46:52] [INFO] [AIService] 现在读取所有选中的writeup文件:
[2026-01-07 20:46:52] [TOOL] [AIService] [轮次 4] AI 请求执行 1 个工具:
[2026-01-07 20:46:52] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/Need_some_flags_2.md"}
[2026-01-07 20:46:52] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:46:52] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:46:52] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/Need_some_flags_2.md (6520 字符)
[2026-01-07 20:46:52] [INFO] [AIService] 🔧 read_file: 结果: ## Misc - Need_some_flags_2
We are given a Python console application exposed via xinetd. It allows us to
do four things:
* Option `0` (`writeflag`): three times only, write up to 0x30 characters into
`flag` global variable as well as into a new file with a random name.
* Option `1` (`editflag`): one time only, write 2 bytes into any file in the
application directory (excluding `.py` files) at any offset.
* Option `2` (`pushflag`): no-op, commented out.
* Option `3` (`secretflag`):... (截断,共 6520 字符)
[2026-01-07 20:46:52] [INFO] [AIService] 🔧 read_file: ## Misc - Need_some_flags_2
We are given a Python console application exposed via xinetd. It allows us to
do four things:
* Option `0` (`writeflag`): three times only, write up to 0x30 characters into
`flag` global variable as well as into a new file with a random name.
* Option `1` (`editflag`): one time only, write 2 bytes into any file in the
application directory (excluding `.py` files) at any offset.
* Option `2` (`pushflag`): no-op, commented out.
* Option `3` (`secretflag`): reload the `nonsecret` module and pass an arbitrary
string to the `printlist` function inside it.
`nonsecret.py` is trivial:
```
import os
def printlist(path):
print os.listdir(path)
```
Which files can we edit with `editflag`? `.py` ones are locked down, random
flag
files are useless, and we cannot reference files outside of the current
directory. Initial import of the `nonsecret` module results in generation of
`nonsecret.pyc`, and `secretflag` reloads it - so we can edit `
... (截断,共 6520 字符)
[2026-01-07 20:46:52] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:46:56] [TOOL] [AIService] [轮次 5] AI 请求执行 1 个工具:
[2026-01-07 20:46:56] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/PyAuCalc.md"}
[2026-01-07 20:46:56] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:46:56] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:46:56] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/PyAuCalc.md (27897 字符)
[2026-01-07 20:46:56] [INFO] [AIService] 🔧 read_file: 结果: In this challenge, we're looking at a modern type of pyjail escape. Upon first
connecting, we're informed about the source code of the challenge being
available, so we can have a look at that first.
```python
#!/usr/bin/env python3
import pathlib
import re
import signal
import sys
import audit_sandbox
if sys.version_info[:3] < (3, 8, 2):
raise RuntimeError('Python version too old')
WELCOME = f'''\
Welcome to PyAuCalc, an awesome calculator based on Python {'.'.join(map(str,
sys.... (截断,共 8025 字符)
[2026-01-07 20:46:56] [INFO] [AIService] 🔧 read_file: In this challenge, we're looking at a modern type of pyjail escape. Upon first
connecting, we're informed about the source code of the challenge being
available, so we can have a look at that first.
```python
#!/usr/bin/env python3
import pathlib
import re
import signal
import sys
import audit_sandbox
if sys.version_info[:3] < (3, 8, 2):
raise RuntimeError('Python version too old')
WELCOME = f'''\
Welcome to PyAuCalc, an awesome calculator based on Python {'.'.join(map(str,
sys.version_info[:3]))}!
(Type "source" to see my awesome source code!)
'''
SOURCE = pathlib.Path(__file__).read_text(encoding='utf-8')
SANDBOX = pathlib.Path(audit_sandbox.__file__).read_bytes()
# Calculators don't need hacking functions, ban them!
audit_sandbox.install_hook()
del audit_sandbox
del sys.modules['audit_sandbox']
def main():
print(WELCOME)
while True:
try:
expression = input('>>> ')
# Calculators don't need non-ASCII characters.
expression.encode('ascii')
... (截断,共 8025 字符)
[2026-01-07 20:46:56] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:00] [TOOL] [AIService] [轮次 6] AI 请求执行 1 个工具:
[2026-01-07 20:47:00] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/baby_python_fixed.md"}
[2026-01-07 20:47:00] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:00] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:00] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/baby_python_fixed.md (3605 字符)
[2026-01-07 20:47:00] [INFO] [AIService] 🔧 read_file: 结果: # UIUCTF 2021 - baby_python_fixed Writeup
\- Type - Jail
\- Name - baby_python_fixed
\- Points - 133
## Description
```
whoops, I made a typo on the other chal. it's probably impossible, right?
Python
version is 3.8.10 and flag is at /flag
nc baby-python-fixed.chal.uiuc.tf 1337
author: tow_nater
[challenge.py]
```
## Writeup
The Python file included in the description was a very short but restrictive
4-line file:
```
import re
bad = bool(re.search(r'[a-z\s]', (input := ... (截断,共 3605 字符)
[2026-01-07 20:47:00] [INFO] [AIService] 🔧 read_file: # UIUCTF 2021 - baby_python_fixed Writeup
\- Type - Jail
\- Name - baby_python_fixed
\- Points - 133
## Description
```
whoops, I made a typo on the other chal. it's probably impossible, right?
Python
version is 3.8.10 and flag is at /flag
nc baby-python-fixed.chal.uiuc.tf 1337
author: tow_nater
[challenge.py]
```
## Writeup
The Python file included in the description was a very short but restrictive
4-line file:
```
import re
bad = bool(re.search(r'[a-z\s]', (input := input())))
exec(input) if not bad else print('Input contained bad characters')
exit(bad)
```
This script allows you to run any code that you want, the only characters you
can't use are whitespace or lowercase characters. Since practically all of
Python is in lowercase (and is case-sensitive), this obviously presented quite
a challenge. After racking our brains and doing quite a bit of research, we
had crossed off a couple of ideas like Python bytecode (you can't actually run
it, I don't t
... (截断,共 3605 字符)
[2026-01-07 20:47:00] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:03] [TOOL] [AIService] [轮次 7] AI 请求执行 1 个工具:
[2026-01-07 20:47:03] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/pyshv1.md"}
[2026-01-07 20:47:03] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:03] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:03] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/pyshv1.md (15388 字符)
[2026-01-07 20:47:03] [INFO] [AIService] 🔧 read_file: 结果: # pyshv1 (572)
The challenge contains two modules:
```python
# File: securePickle.py
import pickle, io
whitelist = []
# See https://docs.python.org/3.7/library/pickle.html#restricting-globals
class RestrictedUnpickler(pickle.Unpickler):
def find_class(self, module, name):
if module not in whitelist or '.' in name:
raise KeyError('The pickle is spoilt :(')
return pickle.Unpickler.find_class(self, module, name)
def loads(s):
"""Helper function ana... (截断,共 8025 字符)
[2026-01-07 20:47:03] [INFO] [AIService] 🔧 read_file: # pyshv1 (572)
The challenge contains two modules:
```python
# File: securePickle.py
import pickle, io
whitelist = []
# See https://docs.python.org/3.7/library/pickle.html#restricting-globals
class RestrictedUnpickler(pickle.Unpickler):
def find_class(self, module, name):
if module not in whitelist or '.' in name:
raise KeyError('The pickle is spoilt :(')
return pickle.Unpickler.find_class(self, module, name)
def loads(s):
"""Helper function analogous to pickle.loads()."""
return RestrictedUnpickler(io.BytesIO(s)).load()
dumps = pickle.dumps
```
```python
# File: server.py
import securePickle as pickle
import codecs
pickle.whitelist.append('sys')
class Pysh(object):
def __init__(self):
self.login()
self.cmds = {}
def login(self):
user = input().encode('ascii')
user = codecs.decode(user, 'base64')
user = pickle.loads(user)
raise NotImplementedError("Not Imple
... (截断,共 8025 字符)
[2026-01-07 20:47:03] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:08] [TOOL] [AIService] [轮次 8] AI 请求执行 1 个工具:
[2026-01-07 20:47:08] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/File Store.md"}
[2026-01-07 20:47:08] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:08] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:08] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/File Store.md (15167 字符)
[2026-01-07 20:47:08] [INFO] [AIService] 🔧 read_file: 结果: # KalmarCTF 2024
by *Hack Sleep Deploy Repeat* ([KalmarCTF](https://kalmarc.tf/teams/260),
[CTFtime](https://ctftime.org/team/284495))
## web
### File Store (59 Solves)
#### Prompt
> Upload your files on the Kalmar File Store and share them with your friends.
>
> Note: For this challenge, you will not be sharing it by anybody else. Thus,
> you need to start your own instance.
>
> [https://filestore.chal-kalmarc.tf](https://filestore.chal-kalmarc.tf/)
>
>
> <./file-store.zip>
... (截断,共 8025 字符)
[2026-01-07 20:47:08] [INFO] [AIService] 🔧 read_file: # KalmarCTF 2024
by *Hack Sleep Deploy Repeat* ([KalmarCTF](https://kalmarc.tf/teams/260),
[CTFtime](https://ctftime.org/team/284495))
## web
### File Store (59 Solves)
#### Prompt
> Upload your files on the Kalmar File Store and share them with your friends.
>
> Note: For this challenge, you will not be sharing it by anybody else. Thus,
> you need to start your own instance.
>
> [https://filestore.chal-kalmarc.tf](https://filestore.chal-kalmarc.tf/)
>
>
> <./file-store.zip>

#### Reconnaissance
Upon visiting the provided URL and spinning up an instance, we are presented
with a web interface that allows the upload of files to a File Store web
application, which is subsequently stored in a directory specific to the
session ID.

#### Challenge Source
##### app.py (with our comments)
```python
from flask import Flask, request, render_template, redirect, session
from flask_session import Session # flask_ses
... (截断,共 8025 字符)
[2026-01-07 20:47:08] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:13] [TOOL] [AIService] [轮次 9] AI 请求执行 1 个工具:
[2026-01-07 20:47:13] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/Jar.md"}
[2026-01-07 20:47:13] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:13] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:13] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/Jar.md (2681 字符)
[2026-01-07 20:47:13] [INFO] [AIService] 🔧 read_file: 结果: # Jar
## Challenge:
My other pickle challenges seem to be giving you all a hard time, so here's a
[simpler one](https://jar.2021.chall.actf.co/) to get you warmed up.
## Solution:
We’re given a link to the web application, the Python source code, and a
picture of a pickle. The hint points to the [documentation for the Python
pickle module](https://docs.python.org/3/library/pickle.html), a clue that
this application is vulnerable to insecure deserialization.
The site shows a single form inpu... (截断,共 2681 字符)
[2026-01-07 20:47:13] [INFO] [AIService] 🔧 read_file: # Jar
## Challenge:
My other pickle challenges seem to be giving you all a hard time, so here's a
[simpler one](https://jar.2021.chall.actf.co/) to get you warmed up.
## Solution:
We’re given a link to the web application, the Python source code, and a
picture of a pickle. The hint points to the [documentation for the Python
pickle module](https://docs.python.org/3/library/pickle.html), a clue that
this application is vulnerable to insecure deserialization.
The site shows a single form input with an “Add Item” button. Whatever we
submit is appended to the page. Looking at the source code, we can see that
the `contents` cookie is used to store these submissions.
On a post request, the `contents` cookie is Base64 decoded and then
deserialized and stored in an array. The new item is added, the array is
serialized, and then the cookie is reencoded and set in the browser. When we
visit the page, the `contents` cookie is decoded and deserialized and the
objects are used to generate the
... (截断,共 2681 字符)
[2026-01-07 20:47:13] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:16] [TOOL] [AIService] [轮次 10] AI 请求执行 1 个工具:
[2026-01-07 20:47:16] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/Paddle.md"}
[2026-01-07 20:47:16] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:16] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:16] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/Paddle.md (2848 字符)
[2026-01-07 20:47:16] [INFO] [AIService] 🔧 read_file: 结果: # Paddle
**Tags**: Clone-and-Pwn, web
> Flexible to serve ML models, and more.
For this challenge, we are given a Dockerfile that installs the latest version
of [Paddle Servinge](https://github.com/PaddlePaddle/Serving) and runs the
built-in demo.
```Dockerfile
FROM python:3.6-slim
RUN apt-get update && \
apt-get install libgomp1 && \
rm -rf /var/lib/apt/lists/*
RUN pip install \
paddle-serving-server==0.9.0 \
paddle-serving-client==0.9.0 \
paddle-serving-app==0.9.0 \
paddl... (截断,共 2848 字符)
[2026-01-07 20:47:16] [INFO] [AIService] 🔧 read_file: # Paddle
**Tags**: Clone-and-Pwn, web
> Flexible to serve ML models, and more.
For this challenge, we are given a Dockerfile that installs the latest version
of [Paddle Servinge](https://github.com/PaddlePaddle/Serving) and runs the
built-in demo.
```Dockerfile
FROM python:3.6-slim
RUN apt-get update && \
apt-get install libgomp1 && \
rm -rf /var/lib/apt/lists/*
RUN pip install \
paddle-serving-server==0.9.0 \
paddle-serving-client==0.9.0 \
paddle-serving-app==0.9.0 \
paddlepaddle==2.3.0
WORKDIR /usr/local/lib/python3.6/site-
packages/paddle_serving_server/env_check/simple_web_service
RUN cp config_cpu.yml config.yml
RUN echo "rwctf{this is flag}" > /flag
CMD ["python", "web_service.py"]
```
Looking at the codebase, we can find Pickle deserialization in the
[`python/pipeline/operator.py`](https://github.com/PaddlePaddle/Serving/blob/v0.9.0/python/pipeline/operator.py)
file. So if can control the `tensor` argument of `proto_tensor_2_numpy`, we
can get RC
... (截断,共 2848 字符)
[2026-01-07 20:47:16] [INFO] [AIService] [Provider] 发送请求到 deepseek-chat
[2026-01-07 20:47:21] [TOOL] [AIService] [轮次 11] AI 请求执行 1 个工具:
[2026-01-07 20:47:21] [INFO] [AIService] 🔧 read_file: 参数: {"path": "data/writeups/Pickle Store.md"}
[2026-01-07 20:47:21] [INFO] [AIService] 执行工具: read_file
[2026-01-07 20:47:21] [INFO] [AIService] [Tool] 执行工具: read_file
[2026-01-07 20:47:21] [INFO] [AIService] [Tool] 读取文件: /Users/yu22x/Desktop/ge/ctf/ge10/web/data/writeups/Pickle Store.md (8997 字符)
[2026-01-07 20:47:21] [INFO] [AIService] 🔧 read_file: 结果: # Pickle Store
\- 223 Points / 109 Solves
## Background
New pickles just dropped! Check out the store.
[https://pickles-web.challenges.ctf.ritsec.club/](https://pickles-
web.challenges.ctf.ritsec.club/)

## Enumeration
**Home page:**

In h... (截断,共 8024 字符)
[2026-01-07 20:47:21] [INFO] [AIService] 🔧 read_file: # Pickle Store
\- 223 Points / 109 Solves
## Background
New pickles just dropped! Check out the store.
[https://pickles-web.challenges.ctf.ritsec.club/](https://pickles-
web.challenges.ctf.ritsec.club/)

## Enumeration
**Home page:**

In here, we can pick 4 different pickles.
**View source page:**
```html
[...]