自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(798)
  • 收藏
  • 关注

原创 Java 反序列化

反序列化基础Java 的序列化(Serialization)和反序列化(Deserialization)是将对象的状态转换为字节流并恢复的过程。这个过程使对象可以保存到文件、通过网络传输或保存到数据库中,并在稍后恢复成对象。序列化(Serialization):将 Java 对象的状态转换为字节流的过程。这使得对象可以保存到文件、发送到其他 JVM 甚至通过网络传输。反序列化(Deserialization):将字节流转换回 Java 对象的过程。这允许恢复先前序列化的对象状态。序列化条件要使

2024-09-09 03:48:04 987

原创 PHP 反序列化

在 PHP 4 中,提供了__sleep和__wakeup这两个魔术方法来自定义对象的序列化。这两个方法并不会改变对象序列化的格式,而是影响被序列化字段的个数。__sleep:在对象被序列化时调用。它应该返回一个包含对象中所有需要被序列化的属性名的数组。__wakeup():在对象被反序列化时调用。它通常用来完成序列化后的初始化任务。// 模拟数据库连接// 在序列化前关闭数据库连接// 返回需要序列化的属性数组// 在反序列化时重新建立数据库连接// 创建对象并序列化。

2024-06-28 00:39:54 781

原创 XML 外部实体注入漏洞

DTD(Document Type Definition,文档类型定义)用于定义 XML 文档的结构和合法元素。DTD 可以在 XML 文档内部定义,也可以引用外部 DTD 文件。通过 DTD,可以定义元素、属性、实体和注释等。元素类型(Element Type):用于定义元素及其内容模型。属性列表类型(Attribute List Type):用于定义元素的属性。实体类型(Entity Type):用于定义和重用文本片段。符号声明。

2024-06-24 23:57:42 973

原创 AFL 源码阅读

AFL 白皮书afl-gccafl-gcc 是 gcc/clang 的替代编译器。afl-gcc 其实就是 gcc 的包装,使用 afl-gcc 依赖 afl-as,因此需要知道 afl-as 的安装路径。afl-as 的默认安装路径是 /usr/local/lib/afl/,通过编译的方式,可以更改安装路径,更改之后,可以通过 AFL_PATH 设置环境变量。如果设置了 AFL_HARDEN ,afl-gcc 可以用更多的编译选项编译目标程序,这样可以检测到更加可靠的内存问题。比如,通过 AFL_U

2024-04-29 02:25:03 601

原创 IOT pwn

很多开源项目需要交叉编译到特定架构上。

2024-01-21 17:16:12 1079 2

原创 C++ 逆向基础

方法3:在 C++11 及以后标准中,可使用 关键字设置结构体的对齐值。不过请注意, 关键字的参数必须是常量表达式,对齐值必须是 2 的幂且不能小于结构体中最大的成员。结构体对齐策略假设一个结构体中有 nnn 个元素,每个元素大小为 ai(1≤i≤n)a_i(1\le i\le n)ai​(1≤i≤n) 并且按照 kkk 字节对齐,则结构体大小计算方式如下:注意以下特殊情况:通常采用 的方式访问结构体成员。如果结构体比较小则利用寄存器进行拷贝。如果结构体比较大则优化为 指令。结构体传参

2023-09-25 01:46:02 1346

原创 LLVM 与代码混淆技术

项目源码什么是 LLVMLLVM 计划启动于2000年,开始由美国 UIUC 大学的 Chris Lattner 博士主持开展,后来 Apple 也加入其中。最初的目的是开发一套提供中间代码和编译基础设施的虚拟系统。LLVM 命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写,随着 LLVM 项目的不断发展,原先的全称已不再适用,目前 LLVM 就是该项目的全称。简单来说,可以将 LLVM 理解为一个现代化、可拓展的编译器。GCC 与 LLVM 编译流程GCC

2023-09-06 20:24:21 3407 1

原创 IDA Python 使用总结

运行 IDA 安装目录下的,选择使用的 python 解释器。

2023-08-29 10:40:50 5887 4

原创 linux pwn 基础知识

环境搭建虚拟机安装镜像下载网站为了避免环境问题建议 22.04 ,20.04,18.04,16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界,256 G 不是真就占了 256 G,而后期如果硬盘空间不足会很麻烦。基础工具vimsudo apt install vimgedit不习惯 vim 的可以使用 gedit 文本编辑器。sudo apt install geditgit

2023-08-11 17:12:36 2724

原创 2023 年实验班选拔试题

邀请码:2023qsb。

2023-08-07 20:01:59 4459 2

原创 windows pwn

附件下载链接程序保护如下,没有开 GS 保护。程序是一个简单的栈溢出:利用方法如下:这里有几个易错点:64 位栈溢出附件下载链接和 32 位的程序相似,不过这里溢出字节数较少,需要栈迁移。ORW如果题目开启了 保护禁用了 ,那么我们就需要采用 ORW 的方式获取 flag 。Windows 中的 ORW 示例代码如下,其中 和 位于 , 位于 。由于传递的参数过多 gadget 不好找并且会导致 ROP 过长,因此采取 修改内存属性写 shellcode 的方式 进行 OR

2023-07-13 10:49:30 1690

原创 windows pwn 基础知识

在 Win10 和 Win Server2016 版本之前,只有一种堆类型 NT Heap在 Win10 和 Win Server2016 之后,引入了 Segment Heap(段堆)在之后版本中,除了 UWP 程序之外 一般都继续使用 NT Heap 进行堆管UWP(Universal Windows Platform)是 Win10 引入的一种新的应用程序开发模型,他们采用了一套共享的 API。所以采用 UWP开发的程序,可以在所有 Win10 设备上运行。

2023-06-21 09:26:51 4808 3

原创 VMware 逃逸基础知识

运行在 VMM 上的程序必须和原始硬件运行一样,需要高效。大部分指令必须直接在真实的处理器上运行,而不需要解释每条指令VMM 必须完全控制硬件,任何 VM 不能穿越 VMM 直接控制硬件。

2023-06-19 07:17:09 2846

原创 QEMU 逃逸相关例题

实际上只能使用第二种方式,因为 PCI 设备内部会对访问的内存区域进行检查,不允许超过分配。的合法区间,因而我们只能通过第二种方式构造越界读写原语。上设置定时任务,不过时间设置为 -1 因此不会执行。函数定义如下,也就是说这里会将该定时任务时间设置为。位于 qemu 上,地址小于堆地址,而越界写。无法将下标设为负数,因此考虑其他方法。指向参数地址,从而实现任意命令执行。结构体的内容如下,其中。从前面的调试结果可以看到。实现虚拟机逃逸,由于。函数调用链如下,根据。的参数可知,最终会将。初始值为 1 ,而在。

2023-06-13 16:56:35 1131 1

原创 Qemu 逃逸基础知识

QEMU 与 KVM 的完整架构如下图所示。其中 VMX root 和 VMX non-root 都是 CPU 引入了支持硬件虚拟化的指令集 VT-x 之后出现的概念。虚拟机在 VMX root 模式和 VMX non-root 模式下都有 ring 0 到 ring 3 四个特权级别。

2023-06-12 20:34:25 1816 1

原创 linux kernel pwn 常用结构体

tty 设备在/dev下的一个伪终端设备ptmx。

2023-05-28 14:46:02 1712

原创 linux kernel pwn 基础知识

驱动程序设备驱动文件系统驱动内核拓展模块LKMs 的文件格式和用户态的可执行程序相同,Linux 下为 ELF ,Windows 下为 exe/dll ,mac 下为 MACH-O ,因此我们可以使用 IDA 等工具来分析内核模块。模块可以被单独编译,但不能单独运行,它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程不同。模块通常用来实现一种文件系统,一个驱动程序或者其它内核上层的功能。

2023-05-22 21:44:36 3049

原创 linux kernel pwn 内核利用

基础知识内核概述内核架构通常来说我们可以把内核架构分为两种:宏内核和微内核,现在还有一种内核是混合了宏内核与微内核的特性,称为混合内核。宏内核(Monolithic kernel),也译为集成式内核、单体式内核,一种操作系统内核架构,此架构的特性是整个内核程序是一个单一二进制可执行文件,在内核态以监管者模式(Supervisor Mode)来运行。相对于其他类型的操作系统架构,如微内核架构或混合内核架构等,这些内核会定义出一个高端的虚拟接口,由该接口来涵盖描述整个电脑硬件,这些描述会集合成一组硬

2023-05-17 21:54:25 2019 1

原创 linux 内核内存管理

物理内存相关数据结构page(页)Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h 头文件中,大量使用了 C 语言的联合体(union)来优化其数据结构的大小,因为每个物理页面都需要一个 page 数据结构来跟踪和管理这些物理页面的使用情况,所以管理成本很高。struct page { // 第一部分,

2023-05-12 04:07:22 1129

原创 Chrome v8 pwn

它是⼀个多进程+IPC的程序, 不同的进程管理不同的内容,

2023-04-17 21:53:04 3066

原创 musl pwn

调试环境搭建debug_musl 可以源码调试。运行 setup.sh 将源码及相关动态链接库解压到根目录下 musl 文件夹下,用的时候只需要将对应版本的 libc.so 文件复制到目录下,然后利用 patchelf 运行如下命令修改可执行文件所依赖的 ld 为 libc.so 即可进行源码调试。patchelf --set-interpreter ./libc.so ./pwn另外该项目中的 build.sh 可以自动下载和编译 musl 到根目录下的 musl 文件夹中,建议在 ubuntu

2023-04-03 01:27:29 1082

原创 LLVM PASS pwn

LLVM的核心是一个库,其设计了一种通用的LLVM IR,并提供一系列接口来操作LLVM IR,生成目标平台代码等等后端的功能.LLVM Pass就是遍历传入的IR并进行一些处理,在实现上,LLVM的核心库中存在一些Pass类,通过继承这些类并重载一些方法,就可以方便的处理传入的IRLLVM Pass的用处:在Pass遍历LLVM IR的同时,就可以非常方便的完成插桩,静态分析,机器无关的代码优化等等操作.下面列出了几个重要的命令行工具.llvm-asLLVM IRllvm-disllvm-asopt。

2023-03-22 22:27:28 686

原创 2022强网杯线上赛 qmachine

附件下载链接逆向还原分析可知程序的大致逻辑如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>typedef long long i64;typedef unsigned long long u64;typedef unsigned int u32;int code[420] = {14593309, 328982, 6816276,

2023-03-21 10:20:02 561 2

原创 2022CTF培训(十三)虚拟化&QEMU架构分析&QEMU CVE示例分析

全虚拟化结构如下图所示,Guest被给予Ring1层的特权级。实际上,Guest也可以在Ring3层中执行。由于GuestOS不是运行在内核态,所以其不能直接操作硬件设备。为了解决这个问题,VMM引用了两个机制——二进制翻译和陷入模拟。陷入模拟在陷入模拟方式的VMM中,客户机代码直接运行在CPU上,但降低权限(reduced privilege)。 当客户机尝试读或修改特权状态时,处理器会将控制权交给VMM的相关处理函数。 VMM随后使用解释器模拟指令并在下一条指令恢复客户机代码的直接执行。X86

2023-02-08 01:50:47 1278 2

原创 2022CTF培训(十二)IOT 相关 CVE 漏洞分析

版本存在 UPnP 栈溢出漏洞,该漏洞在后续版本中被修复,但是 UPnP 模块中还存在其它栈溢出漏洞。漏洞存在于 uhttpd 中,由于该功能比较独立,可以直接用 qemu user mode 仿真。可以看到之前的栈溢出已经修复,但是只要通过前面一些列的验证会调用 sub_248F8 函数。通过调试发现 v13 实际上是用户输入的密码,因此存在命令注入漏洞。sub_248F8 函数中 strncpy 中的长度参数可以通过。之间字符串长度控制,如果构造出过长的字符串就会造成栈溢出。

2023-01-11 00:14:56 1036

原创 2022CTF培训(十一)IOT 相关 CVE 漏洞分析

是采用 qemu-user 对个别程序进行仿真,而对于完整的仿真需要使用 qemu-system。直接使用 qemu-system 仿真需要进行复杂的环境配置,而可以将这个过程自动化。是在 Firmadyne 的基础上开发的固件仿真框架,接下来会利用该框架尝试仿真 DIR823GA1_FW102B03。首先下载 firmware-analysis-toolkit 并运行初始化脚本。(由于要安装大量的环境依赖,如果对自己的网络没有信心的话建议拍个快照,安装失败的话可以恢复快照重新安装)之后配置。

2023-01-04 18:34:55 1466

原创 2022CTF培训(十)IOT 相关 CVE 漏洞分析

这里选择的设备是一款家用路由器,型号为 D-Link DIR-850L(EOL)。由于该款路由器已停产,官网无法下载到固件,不过目前这个还能下载到相关的固件,当然附件中也会提供需要分析的固件。

2022-12-31 18:57:18 2060 2

原创 2022CTF培训(九)MIPS PWN环境搭建&MIPS PWN入门

mips pwn

2022-12-22 02:20:57 1922 2

原创 MIPS32汇编逆向分析基础

MIPS 有 32 个通用寄存器 (General purpose registers),以美元符号 ($) 表示。可以表示为 $0~$31,也可以用寄存器名称表示如,$sp、 $t9 、$fp 等等。

2022-12-16 23:36:16 1765

原创 2022CTF培训(八)ARM PWN 环境搭建&ARM PWN 入门

而 docker 镜像是根据配置文件 DockerFile 来创建的,分析 DockerFile 可知首先是拉取一个 Ubuntu16.04 的镜像并安装了相关的软件,由于安装了文件传输工具 curl ,因此可以考虑通过利用漏洞执行 curl 命令来将 flag 文件下载下来。根据 ARM 的函数调用约定,LR 寄存器存储返回地址,因此这条 gadget 中的 PC 决定 下一个函数的地址,而 LR 决定下一个函数的返回地址。qemu是一款可执行硬件虚拟化的虚拟机,与他类似的还有Bochs、PearPC,

2022-12-16 00:32:48 1432

原创 ARM32汇编逆向分析基础

指令编码的立即数为目标地址与 PC 寄存器的差值除 4。由于涉及读 PC 寄存器,因此根据当前模式要加上相应的偏移。触发断点实现,且 IDA 调试器 无法分辨出改指令是否是自己设置的,在读取数据时会按实际情况返回数据。IT 指令的 mask 编码为从高到低,T 为 0,E 为 1 ,最后填一个 1 表示结束。由于 ARM 汇编指令长度的影响,对立即数范围有严格的限制。cond 标志位位于指令硬编码的高 4 比特,在执行时根据标志寄存器决定该指令是否执行。的 mask 的二进制形式为。

2022-12-12 21:26:47 1149

原创 2022CTF培训(六)逆向题目选讲

分析可知,函数首先调用 sub_4017C0 初始化 v4 数组,之后根据 v4 数组中的内容依次调用 funcs_4018AB 数组中的函数对输入的 1 到 32 字节进行变换。通过改变断点位置可以判断出,该函数表中 sub_B232A0 函数的前一个函数 sub_AD1000 同样存在反调试。必然会触发除零异常,因此会执行 loc_4010BE 处的代码,将局部变量 a0 和 a1 分别异或 dword_41F038 和 dword_41F03C。并用魔改的 tea 对其进行加密。

2022-12-08 23:01:54 1256

原创 2022CTF培训(五)字符串混淆进阶&代码自解密

之前的字符串混淆是一次性解密的,找到解密函数即可获得所有字符串,同时执行解密函数后内存中也可直接获得所有字符串。因此对抗人员升级了混淆技术,使得解密仅在使用时发生,从而避免了全部泄露的问题。常见的形式是提供一个函数获取解密字符串,通过参数来决定返回的字符串。同样分为静态和动态两种。静态解密可以直接获取可分析到的全部引用点,但缺点也是同样的,可能会遗漏掉动态解密的引用点,例如SMC代码自解密技术。动态记录虽然能够捕捉所有执行到的解密,但无法记录未被执行到的分支,对于需求代码的搜索能力较差。

2022-12-06 22:33:10 1525

原创 2022CTF培训(七)逆向专项练习

附件下载链接首先是一个迷宫,由于答案不唯一,因此到 dfs 求出所有路径。求得路径如下:第二部分加密函数前半段没用后面每次取 4 次 6 比特转成 3 个 8 比特存在 a2 中,猜测是 base64 。观察 v14 发现是 base64 码表的反向映射,确认是 base64 。因此该部分输入为 第三部分求逆,解得答案为 把所有合法的 flag 交一遍,可得flag为盲猜 FlagActivity 类中的 onClick 方法是打印 flag 的。将资源导出,搜索 得资源名称再搜索资源名

2022-11-30 23:44:45 2159

原创 2022CTF培训(四)花指令&字符串混淆入门

逆向工程中一个常用的技巧就是通过字符串来寻找核心代码,例如通过错误提示来找到判断的相关代码、通过提示语句找到相近的功能代码、通过日志输出找到相关的功能代码等等。可见字符串对于逆向人员是一个很重要的切入点。因此,保护方使用字符串混淆技术,对静态文件中的字符串进行加密,使得直接在文件中搜索字符串无法获得信息。当程序运行时再对字符串进行解密,恢复其的可读性。静态解密指的是对解密函数进行逆向,从而直接根据解密算法和加密内容进行恢复。好处有以下几点无需执行,避免环境配置、反调试等问题。

2022-11-28 22:53:03 2684

原创 2022CTF培训(三)windows&linux&安卓平台调试机制原理

使用 CreateProcess 函数创建待调试进程,创建时指定 dwCreationFlags 参数为 DEBUG_ONLY_THIS_PROCESS 将会告诉操作系统我们需要让当前调用者(线程)接管所有子进程的调试事件,包括进程创建、进程退出、线程创建、线程退出以及最重要的等等。

2022-11-26 19:37:20 2373

原创 2022CTF培训(二)Hook进阶&反调试

已在 GitHub 上被开源。是微软官方的 Hook 软件包,用于监视和检测 Windows 上的 API 调用(实际上不仅仅限于对 API 函数的调用监控,还可以实现任意函数调用的监控,得益于非常易于使用的调用方式)。Detours 可以用于拦截 ARM,x86,x64 和 IA64 计算机上的二进制函数。Detours 最常用于拦截应用程序中的 Win32 API 调用,例如添加调试用的工具、 拦截代码在运行时动作等等。通过跳转到用户提供的回调函数的无条件来替换目标功能的前几条指令。

2022-11-23 01:19:46 1389

原创 WindowsPE(二)空白区添加代码&新增,扩大,合并节

在 PE 中插入一段调用 MessageBox 的代码。利 OD 定位出 MessageBoxA 函数的地址为 0x77D507EA 。构造 shellcode :其中 shellcode 中的地址需要根据 shellcode 在 PE 中插入的位置来确定。节表中的 SizeOfRawData 为 该节在 PE 文件中关于文件对齐后的大小,Misc.VirtualSize 为该节加载到内存后的真实大小。因此可以添加内容的空白区域大小为 SizeOfRawData - Misc.VirtualSize

2022-11-20 01:12:12 941

原创 WindowsPE(一)PE头字段&节表

PE

2022-11-16 20:37:43 798

原创 2022CTF培训(一)脱壳技术&Hook入门

绝大多数加壳程序会在被加密的程序中加上一个或多个段(Section),在最后跳转至 OEP 时一般都是通过一个跨段跳转指令进行转移,所以依据跨段的转移指令(JMP 等)就可找到真正的入口点,并且在该跳转指令前一般会有 POPAD / POPFD 指令出现(恢复入口现场)。在 x32dbg 中 Ctrl+B 搜索E9找到长跳转指令在该位置下断点后执行即可进入程序真正的入口点,此时程序已完成脱壳。使用 Scylla 将程序 dump 下来。

2022-11-16 19:58:05 1749 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除