三清阁符咒网

【技术分享】Python反序列化-手写opcode

道教符咒网    2023-03-17    107

01 写在开篇

模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化太原道教灵符网请符。"pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 "unpickling" 是相反的操作,会将(来自一个 binary file 或者 byteslike object 的)字节流转化回一个对象层次结构。pickling(和 unpickling)也被称为“序列化”, “编组” 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 “解封 (unpickling)”。

pickle.dumps(object):用于序列化一个对象太原道教灵符网请符

pickle.loads(picklestring):用于反序列化数据,实现一个对象的构建太原道教灵符网请符

过程展现:

1. 如果直接定义类 dairy,其中的data text文件将不会被序列化太原道教灵符网请符

2. 需要设定init才可以把以下属性序列化进去太原道教灵符网请符

3. 反序列化如下显示太原道教灵符网请符

4. 序列化数组亦可,如下显示太原道教灵符网请符

5. pickle不仅可以序列化字符串,也可以读写文件,使用pickle.dump()和pickle.load() 即可太原道教灵符网请符

小结:

(一)序列化过程

从对象中提取所有属性(__dict__)太原道教灵符网请符,并将属性转为键值对

写入对象的类名

写入键值对

(二)反序列化过程

获取 pickle 输入流

重建属性列表

根据保存的类名创建一个新的对象

将属性复制到新的对象中

02 __reduce__()

__reduce__()类似于PHP中的__wakeup__魔法函数太原道教灵符网请符。如果当__reduce__返回值为一个元组(2到5个参数),第一个参数是可调用(callable)的对象,第二个是该对象所需的参数元组。在这种情况下,反序列化时会自动执行__reduce__里面的操作。

1. 测试代码太原道教灵符网请符

2.运行结果太原道教灵符网请符

3.弹计算机太原道教灵符网请符

03 pickle简介

pickle 是一种栈语言,有不同的编写方式,是基于一个轻量的 PVM(Pickle Virtual Machine)太原道教灵符网请符

(一)PVM 的组成部分太原道教灵符网请符

·指令处理器

从流中读取 opcode 和参数,并对其进行解释处理太原道教灵符网请符。重复这个动作,直到遇“.”这个结束符后停止。最终留在栈顶的值将被作为反序列化对象返回。

·stack

由 Python 的 list 实现,被用来临时存储数据、参数以及对象太原道教灵符网请符

·memo

由 Python 的 dict 实现,为 PVM 的整个生命周期提供存储太原道教灵符网请符

备注:注意 stack、memo 的实现方式,方便理解接下来的指令太原道教灵符网请符

当前用于 pickling 的协议共有 5 种太原道教灵符网请符。使用的协议版本越高,读取生成的 pickle 所需的 Python 版本就要越新。

v0 版协议是原始的 “人类可读” 协议,并且向后兼容早期版本的 Python太原道教灵符网请符

v1 版协议是较早的二进制格式,它也与早期版本的 Python 兼容太原道教灵符网请符

v2 版协议是在 Python 2.3 中引入的太原道教灵符网请符。它为存储 newstyle class 提供了更高效的机制。欲了解有关第 2 版协议带来的改进,请参阅 PEP 307。

v3 版协议添加于 Python 3.0太原道教灵符网请符。它具有对 bytes 对象的显式支持,且无法被 Python 2.x 打开。这是目前默认使用的协议,也是在要求与其他 Python 3 版本兼容时的推荐协议。

v4 版协议添加于 Python 3.4太原道教灵符网请符。它支持存储非常大的对象,能存储更多种类的对象,还包括一些针对数据格式的优化。有关第 4 版协议带来改进的信息,请参阅 PEP 3154。

(二)指令集太原道教灵符网请符

(三)汇总:

1. c:读取新的一行作为模块名module,读取下一行作为对象名object,并将module.object压入到堆栈中太原道教灵符网请符

2. (:将一个标记对象插入到堆栈中太原道教灵符网请符。为实现目的,该指令会与t搭配使用,以产生一个元组。

3. t:从堆栈中弹出对象,直到一个“(”被弹出和创建一个包含弹出对象(除了“(”)的元组对象,并且这些对象的顺序必须与它们压入堆栈时的顺序一致,再将该元组压入到堆栈中太原道教灵符网请符

4. S:读取引号中的字符串直到换行符处,并将它压入堆栈太原道教灵符网请符

5. R:将一个元组和一个可调用对象弹出堆栈,以该元组作为参数可调用的对象,并将结果压入到堆栈中太原道教灵符网请符

6. .:结束pickle太原道教灵符网请符

7. 动态图解释:

参考:

8. opmode版本如下显示太原道教灵符网请符

9. pickle3版本的opcode示例太原道教灵符网请符

04 pickletools 工具使用

pickletools.optimize目的就是为了去除声明q ,q:储存栈顶的字符串长度为一个字节(即\x00)太原道教灵符网请符

1. 变量覆盖太原道教灵符网请符

/usr/local/var/pyenv/versions/3.7.0/bin/python

/Users/Tkith/Tkitn'sCodeProject/Tkitnpygogogo/aix.py

0: \x80 PROTO3

2: cGLOBAL'builtins exec'

17: qBINPUT0

19: XBINUNICODE "key1=b'1'\nkey2=b'2'"

43: qBINPUT1

45: \x85 TUPLE1 #声明第一个元祖

46: qBINPUT2

48: RREDUCE

49: qBINPUT3

51: .STOP

highest protocol among opcodes = 2

b'1' b'2'

None

Process finished with exit code 0

2. 简单rce太原道教灵符网请符

import pickle

import os

class genpoc(object):

def __reduce__(self):

s = """echo test poc.txt""" # 要执行的命令

return os.system, (s,) # reduce函数必须

返回元组或字符串

e = genpoc()

poc = pickle.dumps(e)

print(poc) # 此时,如果 pickle.loads(poc),就会执行命令太原道教灵符网请符

3. 手写opcode

·在CTF中,很多时候需要一次执行多个函数或一次操作多个指令,此时就不能只用__reduce__ 来解决问题太原道教灵符网请符。因为reduce一次只能执行一个函数,当exec被禁用时,就不能一次执行多条指令了,所以需要手动拼接或构造opcode了。手写opcode也是pickle反序列化中较难之处。

·此处可以体会到为何pickle是一种语言,直接编写opcode的灵活性比使用pickle序列化生成的代码更高太原道教灵符网请符。只要符合pickle语法,就可以进行变量覆盖、函数执行等操作。

·根据前文不同版本的opcode可以看出,版本0的opcode更便于阅读太原道教灵符网请符。所以手动编写时,一般选用版本0的opcode。下文中,所有opcode均为版本0的opcode。

全局变量覆盖

# secret.py

name='TEST3213qkfsmfo'

#main.py

import pickle

import secret

opcode='''c__main__

secret

(S'name'

S'1'

db.'''

print('before:',secret.name)

output=pickle.loads(opcode.encode())

print('output:',output)

print('after:',secret.name)

通过c获取全局变量secret,建立一个字典,并使用b对secret进行属性设置,将会使用到payload太原道教灵符网请符

opcode='''c__main__

secret

(S'name'

S'1'

db.'''

4. 函数执行

与函数执行相关的opcode有三个:R、i、o ,所以我们可以从三个方向进行构造太原道教灵符网请符

练习题:ikun

练习题目:

[watevrCTF2019]Pickle Store

wp:

wp2:

wp3:不出网

推荐使用的wp:

05 了解小星太原道教灵符网请符,了解星云博创

星云博创科技有限(简称“星云博创”)成立于2016年,是国内新兴的网络安全产品、可信安全管理平台、专业安全服务与解决方案的综合提供商太原道教灵符网请符。星云博创设北京为北方总部,广州为南方总部,并于成都、合肥、南昌、贵州、武汉、太原、哈尔滨等多个城市设立分支机构。同时,星云博创为不断完善客户服务体系和应急响应体系,在全国10余个省、市、自治区、直辖市建立三级服务支持中心,7×24小时接收客户需求,及时提供标准一致的安全服务。

作为一家以技术先导的企业,星云博创始终坚持在网络安全、数据安全、态势感知、等级保护、合规性安全管理等领域进行技术创新,利用安全分析、大数据分析、人工智能等技术,对网络空间安全要素、安全风险进行深度挖掘与关联分析,构建了多层次的纵深防御体系,持续推出态势感知平台、静态脱敏系统、终端安全监测系统等一系列优秀的安全产品和行业解决方案,广泛应用于政府、运营商、医疗、教育、电力、能源等多个领域,让风险无所遁形太原道教灵符网请符

星云博创已获得ISO9001、ISO27001、 ISO20000管理体系认证,CMMI5软件成熟度认证,信息系统安全集成服务、信息安全风险评估服务、软件安全开发服务资质的CCRC二级认证,及安全运维服务资质、应急处理服务资质的CCRC三级认证太原道教灵符网请符。此外,星云博创还是国家信息安全漏洞库(CNNVD)技术支撑单位、海南省网络安全应急技术支撑单位、广州市应急联动机构支撑单位。

免费测八字 今年运势 请加师父微信

免费测八字 今年运势 请加师父微信

免费看八字运势 请加师父微信: sanqingge8

寻找符咒,灵符,符咒网,道教符咒网,灵符网站,灵符网官网,购买符咒请灵符,这里有各种手绘开光符咒:财运符,财运符咒,财运亨通符咒,五路财神符咒,太岁符咒,化太岁符咒,回心转意符咒,护身符咒,文昌符咒,学业灵符符,开运符咒,转运灵符,桃花符,月老姻缘符咒,偏财符,五鬼运财符咒,化小人符咒,事业符咒,升官符咒,去病符咒,去疾符咒,健康符咒,平安符咒,夫妻和合符,情感和合符咒。


寻找符咒,灵符,符咒网,道教符咒网,灵符网站,灵符网官网,购买符咒请灵符,这里有各种手绘开光符咒:财运符,财运符咒,财运亨通符咒,五路财神符咒,太岁符咒,化太岁符咒,回心转意符咒,护身符咒,文昌符咒,学业灵符符,开运符咒,转运灵符,桃花符,月老姻缘符咒,偏财符,五鬼运财符咒,化小人符咒,事业符咒,升官符咒,去病符咒,去疾符咒,健康符咒,平安符咒,夫妻和合符,情感和合符咒。

咨询道教符咒 咨询师父微信: sanqingge8

符咒类型如下:

01.财运符-增财运补财库开运   02.太岁符-化解不利顺利度过   03. 回心符-挽回感情增缘复合  04. 护身符-辟邪镇宅转运护身   05. 学业符 -魁星点斗文昌帝君  06. 开运符-开运转运驱除霉运  07. 桃花符-桃花早到月老姻缘   08. 偏财符-五鬼运财偏财运势  09 .小人符-化解小人是非口舌  10 .事业符-事业有成无往不利  11. 去疾符-药王化疾祛病消愈  12. 健康符-身心健康得偿所愿  13. 平安符-诸事顺利健康平安  14 .和合符-夫妻情感姻缘和合   15.定制符-心有所想 专属定制


法事科仪.png01.化解太岁法事——解太岁、谢太岁       02.升官晋职法事 ——官运亨通提升政绩    03.文昌考试法事—— 开窍聪慧考试顺利    04.偿还阴债法事—— 生债阴宅逢凶化吉   05.开财门补财库—— 增加财运助旺事业       06.助种生基法事—— 病魔缠身增寿增运   07.催子受孕法事—— 生子布阵子女满堂     08.开运转运法事—— 改运天命一帆风顺    09.催财发财法事—— 偏财运势正财持久    10.化解童子法事—— 姻缘顺利仙灵护佑   11.化解小人法事—— 化解小人防人陷害      12.小儿平安法事—— 驱邪回魂活泼健康  13.超度亡灵法事—— 祭奠亲人早登极乐     14.超度宠物法事—— 人类朋友转生脱苦   15.超度婴灵法事—— 打胎坠胎消灾除难    16.祈福许愿法事—— 许愿还愿祈求祈福

咨询道教法事 咨询师父微信:sanqingge8

01.化解太岁法事——解太岁、谢太岁       02.升官晋职法事 ——官运亨通提升政绩    03.文昌考试法事—— 开窍聪慧考试顺利    04.偿还阴债法事—— 生债阴宅逢凶化吉   05.开财门补财库—— 增加财运助旺事业       06.助种生基法事—— 病魔缠身增寿增运   07.催子受孕法事—— 生子布阵子女满堂     08.开运转运法事—— 改运天命一帆风顺    09.催财发财法事—— 偏财运势正财持久    10.化解童子法事—— 姻缘顺利仙灵护佑   11.化解小人法事—— 化解小人防人陷害      12.小儿平安法事—— 驱邪回魂活泼健康  13.超度亡灵法事—— 祭奠亲人早登极乐     14.超度宠物法事—— 人类朋友转生脱苦   15.超度婴灵法事—— 打胎坠胎消灾除难    16.祈福许愿法事—— 许愿还愿祈求祈福

本文链接:https://fuzhouwang.org/index.php/post/11637.html

转载声明:本站文章中有转载或采集其他网站内容, 如有转载的文章涉及到您的权益及版权,还麻烦及时联系我们,我们将及时删除,谢谢配合。

上一篇   下一篇

相关文章