LOADING

首次加载会比较慢,果咩~

请打开缓存,下次打开就会很快啦

pickle反序列化

#什么是pickle?

  pickle是python的序列化工具,可以将python对象序列化为字节流,然后再反序列化为python对象。当然,其中的原理还是比较复杂的,具体可以看看这篇文章,写的还是非常详细滴~
  这里主要记一下怎么利用这里存在的漏洞喵~

#pickle和__reduce__方法

  python中类的__reduce__方法,在pickle反序列化的时候会被执行。它应当返回字符串或者一个元组,这里主要考虑返回元组的状况。
  下例:

class PickleRCE(object):
    def __reduce__(self):
        import subprocess
        return (subprocess.getoutput,(command,)) #也可以是(map,(subprocess.getoutput,command))

  这里返回一个二元组,第一个元素是某个对象,而第二个参数也是一个元组,是我们希望传输给首个元素这个对象的参数。像这个例子,相当于是调用了subprocess.getoutput(command),即用子进程执行命令command。
  这时我们将其序列化,在存在反序列化漏洞的站点上传这串序列化字符串,就能达到rce的效果。这就是比较经典的pickle反序列化漏洞的利用手法。