python反序列化和php反序列化类似(还没接触过java。。),相当于把程序运行时产生的变量,字典,对象实例等变换成字符串形式存储起来,以便后续调用,恢复保存前的状态
python中反序列化的库主要有两个,和,这俩除了运行效率上有区别外,其他没啥区别
的常用 *** 有
输出反序列化
读入反序列化
可以看出,和之间反序列化的结果有些许差别,我们先以目前的支持版本为主要对象,在后期给出exp的时候再补上
python3大多版本中反序列化的字符串默认版本为3号版本,我这里的默认版本为4
为了便于分析和兼容,我们统一使用号版本
在挖掘反序列化漏洞之前,我们需要了解python反序列化的流程是怎样的
直接分析反序列化出的字符串是比较困难的,我们可以使用帮助我们进行分析
指令集如下:(更具体的解析可以查看)
依照上面的表格,这一个序列化的例子就很好理解了
我们再来看另一个更复杂的例子
这样另一个更复杂的例子就分析完成了
我们现在能大体了解序列化与反序列化的流程
ctf中大多数常见的pickle反序列化,利用 *** 大都是
触发的指令码为
大意为:
取当前栈的栈顶记为,然后把它弹掉。
取当前栈的栈顶记为,然后把它弹掉。
以为参数,执行函数,把结果压进当前栈。
只要在序列化中的字符串中存在指令, *** 就会被执行,无论正常程序中是否写明了 ***
例如:
把生成的payload拿到无的正常程序中,命令仍然会被执行
记得生成payload时使用的python版本尽量与目标上的版本一致
前两个例子开头都有指令码
简单来说,指令码可以用来调用全局的的值
看下面的例子
在我们不知道中值的情况下,如何构造满足条件的payload,拿到flag呢?
利用c指令:
这是一般情况下的flag类
第27行和第37行分别进行了传参,如果我们手动把payload修改一下,将a和b的值改为,
我们成功的调用了中的变量
还记得刚才说过的build指令码吗
通过BUILD指令与C指令的结合,我们可以把改写为或其他函数
假设某个类原先没有 *** ,我们可以利用来BUILE这个对象
BUILD指令执行时,因为没有 *** ,所以就执行update,这个对象的 *** 就改为了我们指定的
接下来利用来再次BUILD这个对象,则会执行,而此时已经被我们设置为,因此实现了RCE.
看一看具体如何实现的:
还是以flag类为例
接下来需要我们手撕payload了
根据BUILD的说明,我们需要构造一个字典
接下来往字典里放值,先放一个mark
放键值对
之一次BUILD
放参数
第二次BUILD
完成
我们来试一下
成了,我们在不使用指令的情况下完成了RCE
python2 区别不是很大:
输出:
修改payload:
https://blog.csdn.net/weixin_44377940/article/details/106863514
https://zhuanlan.zhihu.com/p/89132768
按照家用激光脱毛仪的使用说明书和注意事项,一般是不会对身体有危害,在使用家用脱毛仪出现危害和副作用,大多数是因为家用脱毛仪质量不过关,以及操作方法不正确,或没有做好脱毛后护理,可能出现以下情况: 1...
第三方责任保险是什么意思?什么是第三方责任保险?第三方责任保险(简称三责任险)是一种商业保险,是指被保险机动车在保险期间行驶过程中发生事故,被保险公司依法应当承担的经济赔偿责任。超过强制保险赔偿限...
端午节的由来和风俗,端午节的习俗有哪些。 1,侗族 贵州省侗族端午除与汉族相同以外,也有自己本民族的特色。其中,以锦屏县圭叶村的端午风俗犹为独特。 这个侗寨端午节,每家...
中新网11月29日电 据欧联网援引欧联通讯社报道,28日,德国病毒学专家亚历山大·凯库勒(Alexander Kekulé)表示,目前全球正在传播的新冠疫情,绝大多数是来自于意大利北部的一种新冠病...
现如今很多女人生了小孩后,由于小孩还小,便挑选辞退工作中在家里做宝妈妈。别以为仿佛它是一件非常简单的事儿,实际上做宝妈妈是一件十分操劳的工作中,但实际上在照料小孩的空隙,还能够做一些小买卖帮补家庭装,...
本文导读目录: 1、黑客是怎么截取数据包的? 2、世界上最顶尖的黑客能厉害到什么程度 3、黑客入侵15万个监控摄像头,都有哪些知名企业中招? 4、木马向黑客发送的数据是什么?图片还是字符串...