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

python 反序列化

时间:2022-10-05 12:34:50浏览次数:56  
标签:标记 python reduce 元组 callable 操作码 序列化

利用的关键点就是如何构造我们的反序列化的payload ,这个时候不得不提到

__reduce__

官方介绍 reduce

当序列化 以及反序列化的过程中 碰到一无所知的扩展类型的时候。就可以通过类中定义的 reduce 方法来告知如何进行序列化 或者反序列化

也就是说 只要在这个新式类中 定义一个reduce方法 我们就能在序列化 的使用让 这个类根据我们在 reduce 中指定的方式序列化 那这就非常好

那我们该如何指定呢?实际上关键就在这个方法的返回值上,这个方法可以返回两种类型的值,String 和 tuple ,我们的构造点就在令其返回 tuple 的时候

当他返回值是一个元祖的时候,可以提供2到5个参数,我们重点利用的是前两个,第一个参数是一个callable object(可调用的对象),第二个参数可以是一个元祖为这个可调用对象提供必要的参数,

PVM 操作码

pvm操作码 都是单字节的

image-20221004200741538

s操作码 代表后面这一串 是字符串 V操作码 代表后面这一串是 unicode 编码 I 操作码 代表 后面这一串是整数

image-20221004200913746

这里面比较重要的是 ( ,它相当于 做个标记

image-20221004201010591

上面的 ( 标记 ,与 l t d s 结合使用 ,就可以将两个 标记中的元素取出来 放入栈 中 d 表示 字典 l 表示这个元素 是个列表 而t 代表 是个元组

举个简单的例子

(s'/bin/sh' t 

就是说 先下个标记 然后把 字符串 /bin/sh 放入栈中 然后遇到 t 之后 就会从 栈上弹出数据 一直弹到 ( , 也就是 将 ( 到 t 的 内容 全部弹出来 转化成元组 再存入栈中,同时标记消失

image-20221004201418368

c 指令 后面 跟的是模块 名 和类名 这俩之间用回城 作为分割

R指令一般都在最后,它会将元组和可调用的对象callable从堆栈中弹出来

后以该元组作为参数调用该callable对象,比如说os.system()中的system()就是一个callable对象

. 点号 是结束符 执行到这里代表 结束

例子

cos  //c指令 后面跟得到是模块名和 类名
system 
(S'/bin/ls /' //从( 开始标记 然后 到 t 结束
t R.//`R`指令一般都在最后,它会将元组和可调用的对象`callable`从堆栈中弹出来  .    点号 是结束符 执行到这里代表 结束

标签:标记,python,reduce,元组,callable,操作码,序列化
From: https://www.cnblogs.com/kkkkl/p/16755368.html

相关文章

  • Python-错误笔记
    TypeError:sliceindicesmustbeintegersorNoneorhavean__index__method原因1:存在带除法的操作,“/”会生成浮点数,需要将除法符号“/”更改成“//”。原因2:“[......
  • 学习Python,一路绕来绕去推荐给你的教程!
         说实话,学习一门语言不难。但是,但是能用该语言编写程序做项目,又是另外一回事。一路走来,java,Android,go,c#,c,ASM,c++,pascal,Basic,foxpro,QT,HTML,Rust,Python,Ruby,JS,PHP等......
  • python 函数定义
    1.函数的定义#def就是definedef函数名(传入参数):函数体return返回值#参数,返回值都可以省2.函数调用函数名(参数)3.函数的传入参数不像其他语言......
  • Python-API笔记
    random.seed()&np.random.seed()np.random.seed()函数用于生成指定随机数。seed()被设置了之后,np,random.random()可以按顺序产生一组固定的数组。如果使用相同的se......
  • python socket 网页爬虫
    importsocket#第一步获取域名或ip地址host='www.baidu.com'port=80header=b'GET/HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:close\r\n\r\n'#第二步域......
  • Python OpenCV给证件照换底色
    投简历、找工作这些事都需要证件照,有些还要求证件照背景颜色、尺寸大小,本文分享一下如果通过PythonOpenCV来实现照片裁剪和更换背景色1、读取照片importcv2importnumpya......
  • Python爬虫
    目录MangoDBRedis爬虫常用库安装seleniumlxmlbeautifulsouppyquerypymysqlpymongoRedisFlaskDjango爬虫原理正则表达式BeautifulSoup解析库基本使用标签选择器标准选择器CS......
  • Python编程经验
    目录代码结构工作目录全局变量调试信息异常处理尝试次数化简结构日志哈希和ID函数第三方库exchangelib字符串处理replacestripsplitjoin格式化列表处理打包函数代码结构......
  • python爬虫使用session保持登录状态
    今天有个客户需求,从网站上下载会员试题,需要在登录状态下载,然后将网页中展示的试题保存在word中。网站上展示的所有试题要保存在一个word文档中,但是每一个试题结束下一个试......
  • Python文件处理
    Excel打开csv,去重,保存到exceldf=pd.read_csv("newhouse.csv",names=['name','xzqy','wylx',······,'state'])df=df.drop_duplicates()df.to_excel("newhouse......