自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 第七届强网杯-PWN-【WTOA】

由于指令集和运行时环境本身与web场景并不绑定,因此随着后来的发展,WebAssembly指令集出现了可以脱离浏览器的独立运行时环境,WebAssembly的用途也变得更加广泛。相比于浏览器的运行时,wasmtime是一个独立运行时环境,它可以脱离Web环境来执行wasm代码。根据字符串定位时发现没有引用的,后来发现是通过偏移的,发现第 3 个参数原来是 .rodata.wasm 段内的偏移值。起改为flag的偏移,然后show可以泄露处flag,当然长度不够,再把size改大就行。

2024-08-23 09:34:27 426

原创 2024 D^3CTF pwn(d3note write_flag_where D3BabyEscape pwnshell)

然后找能够存有freegot表地址的pie地址,并且pie地址要是余8的,另外不能更低了,更低的got表地址没有写权限,没找到,想看能不能存有chunk_array的pie地址的pie地址,没找到,找存有低于chunk_array的pie地址的pie地址,找到了,能写,然后写chunk_array里的len和ptr,达到任意地址读写的效果,然后写got表。然后此时可以改原来的第一个chunk的chunk2ptr和size(edithacker要用),然后覆盖为efree的got表地址,

2024-08-16 00:04:54 621

原创 2019 *CTF Pwn OOB

如果将B的类型修改为A的类型,那么再次访问B[0]时,返回的就不是对象元素B[0],而是B[0]对象元素转换为浮点数即B[0]对象的内存地址了;通过array的element内容来伪造一个数组对象的内存,泄露该array地址后,得到array的element的元素内容地址,利用类型混淆漏洞将其写入floatarray,然后改为objectarray,得到元素内容地址伪造的对象,进而可以通过array中对元素内容中的element修改,然后通过读写伪造对象来任意地址读写。

2024-07-30 00:22:36 639

原创 2019数字经济公测大赛-VMware逃逸

发现其中有关于channel的字符串GuestMsg: Channel %u, Not enough memory to receive a message,加上函数开头的switch case判断number的范围为0-6,很容易联想到这就是GuestRPC Handler(是处理 RPC 通信的代码),一个RPC指令处理函数,下面代码只包含了漏洞所在的部分,可以看到这个路径是当subcommand=0x4,也就是Receive reply data的处理部分。打开 GuestRPC 通道。

2024-07-25 23:09:56 732

原创 2023 N1CTF-n1proxy

文章目录参考rsa握手rust_proxy源码公匙交换和签名会话钥匙后续通信生命周期和裸指针代码审计漏洞点 libc-2.27.so大致思路(exp还有变化)调试exp泄露libc写free_hook执行命令exp参考https://github.com/Nu1LCTF/n1ctf-2023/tree/main/pwn/n1proxyhttps://eqqie.cn/index.php/tag/Rust-Pwnhttps://github.com/importcjj/rust-miniproxy/b

2024-07-24 19:05:19 951 1

原创 Chrome v8 pwn 前置

v8 是 Google 用 C++ 开发的一个开源 JavaScript 引擎. 简单来说, 就是执行 js 代码的一个程序. Chromium, Node.js 都使用 v8 解析并运行 js.v8是chrome浏览器的JavaScript解析引擎,v8编译后二进制名称叫d8而不是v8。

2024-07-22 14:55:58 1199

原创 CTF-pwn-虚拟化-vmmware 前置

虚拟机操作系统发送敏感请求,使操作系统陷入内核态某些特权指令会进入ring0以下的状态,即交给Hypervisor处理利用Hypervisor的脆弱性漏洞使得Hypervisor执行完特权指令后不产生指令状态的返回,使得执行完指令后依然停留在内核态实现了提权后,可以渗透到Hypervisor和虚拟机的其他区域,破坏虚拟化的隔离机制,完成逃逸操作。(或者说虚拟机执行某些操作会发送请求到主机vmx,然后主机vmx来处理请求,通过利用vmx中的漏洞来使得达到提权目的)

2024-07-21 21:28:27 986

原创 2024 HNCTF PWN(hide_flag Rand_file_dockerfile Appetizers TTOCrv_)

通过和stdout的内容交换来任意地址读,将栈上存有大量的指向环境变量的栈地址(某些栈地址对应的内容是到libc地址)泄露出来,从而得到大量栈地址,并保存尾地址为合适的栈地址(如需要修改第三个字节,就寻找栈地址末尾为3或者b,这往其交换时候此时最后一个字节正好是栈地址+8的的第三个字节,正好对应ptr和canary异或然后反转的最后一个字节,也就是ptr的第一个字节)利用swap将栈上的pie地址相关的内容和栈地址末尾为2或者a的地址+5交换,然后方法和上面一样,最终要将其改成pop rdi;

2024-07-19 22:35:29 791

原创 2024 HNCTF PWN(close ezpwn idea what beauty)

为了走到格式化字符串那里,需要s1=yes,利用int类型赋值给char类型会截断绕过为0x73时return0,然后利用格式化字符串泄露地址,然后循环再次触发格式化字符串漏洞。作为填充符在这里实际上并不起作用,因为%c本身就只处理一个字符,不管前面的数字是多少,它都只会输出一个字符或者在字符不存在时输出nothing(即不输出任何东西)。格式化字符串泄露canary,然后溢出修改,构造rop泄露libc地址,然后返回到vuln函数再进行一次rop修改返回地址为system。关闭标准输出,重定向即可。

2024-07-17 13:12:35 569

原创 HITCON-CTF-2024-Quals-setjmp

setjmp函数用于设置一个返回点,而longjmp函数则用于从程序的任何位置跳回到setjmp所设置的返回点。

2024-07-16 11:46:18 1517

原创 2023 N1CTF-n1canary

这里将0x4f4aa0作为第二个参数0x4f4aa0所在栈地址作为第一个参数,然后检查第二个参数不为空就会call 第二个参数指向的值+8作为地址指向的内容作为函数指针,所以0x4f4aa0所在地址的值为0x4f4aa0然后+8作为地址0x4f4aa0+8的位置的内容为函数指针,最后就会跳转到这个函数这里去,所以0x4f4aa0+8的值为后门的地址即可。函数是在 Linux 内核版本 3.17 中引入的,旨在提供一种更安全的方式来获取随机数,尤其是当应用程序需要高质量的随机数据时,比如在加密应用中。

2024-07-11 21:26:43 697

原创 2024春秋杯网络安全联赛夏季赛-PWN

gadget不够,用csu里的,通过rop的一个特殊gadget修改got表,然后利用gadget满足onegadget的条件,最后调用覆盖got表。没有时间限制,也没有次数限制,可以爆破,26*7次,然后触发格式化字符串泄露canary和libc地址,然后溢出rop绕过沙箱。然后写入shellcode即可(没有栈,通过mmap分配的内容作为栈,进而存储字符串和iovec这个结构体)函数在 Linux 和类 Unix 系统中用于从文件描述符指定的文件中读取数据,但与普通的。如果读取失败,函数将返回。

2024-07-10 12:24:21 1139 1

原创 CTF-PWN-kernel-前置

操作数顺序目的操作数在前,源操作数在后源操作数在前,目的操作数在后寄存器标识不带前缀带有百分号前缀立即数标记通常无特殊标记明确表示,例如$1代表立即数1。

2024-07-09 17:35:40 377

原创 CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)

文章目录参考qwb2018 core检查逆向调试打包上传测试脚本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )开启KPTI利用swapgs_restore_regs_and_return_to_usermode开启KPTI利用SIGSEGVrop设置CR3寄存器再按照没有KPTI返回kernel rop + ret2userpt_regs 构造 kernel ROPret2dir参考https://arttnba3.cn/

2024-07-09 16:50:53 1173

原创 操作系统-文件的物理结构(文件分配方式)

FCB就是目录项内容。

2024-06-29 22:35:40 753

原创 CTF-PWN-LLVM-【红帽杯-2021 simpleVM】

调试的时候可以把断点下载llvm::Pass::preparePassManager,程序执行到这里的时候就已经加载了LLVMHello.so文件(或者到main+11507),我们就可以根据偏移进一步将断点下在LLVMHello.so文件里面。不太行,调用的不是pie中的free,使用其他函数在最后的free,根据指定的寄存器,将指定的寄存器的值指向的内容赋值给另一个寄存器。根据指定的寄存器,将另一个寄存器赋值给指定的寄存器的值指向的内容。got表,发现两个got表,都试试吧。以块为单位遍历该函数。

2024-06-28 23:59:06 725

原创 NepnepxCATCTF Pwn-Chao

修改ret地址后,unwind_resume会跳到对于ret地址对应函数中的catch部分,然后_Unwind_RaiseException最后会将对应的原来ebp上面的那部分的值赋值给esi (可以通过修改ebp上面的那个内容来修改esi) 结合覆盖ebp的同时,当到异常处理函数时由于会恢复覆盖的rbp为当前rbp,然后跳转到leave ret实现栈迁移。分配的内存用来存放异常实例。结束符,二是留有一些额外的缓冲区,可能用于后续的字符串操作,或是作为简单的边界保护,减少缓冲区溢出的风险。

2024-06-24 21:24:08 891

原创 2024 cicsn 西南赛区 半决赛

不能联网搜是真坐牢本来想等着全写了再发的,但qeme卡到某个地方了,想发出来看看有没有师傅有想法欢迎留言,自己准备再学学做做其他qeme题看能不能找到思路,链式前向星的基本思想是为图中的每个顶点维护一个链表,链表中的每个节点代表从该顶点出发的一条边,节点中通常存储目标顶点编号以及边的权值(如果有)。这样,每个顶点的邻接点可以通过遍历链表快速访问。int to;// 目标顶点编号int weight;// 边的权值,可选,对于无权图可以忽略int next;// 指向下一条边的指针,构成链表。

2024-06-24 11:41:33 844

原创 CTF-pwn-虚拟化-qemu前置知识

当对设备其所在的内存访问时,会调用注册的读mmio函数d3dev_mmio_read,读的位置是基地址+0x128,是4字节。每个qemu虚拟机都是宿主机上的一个进程,在进程中用mmap分配出大小为0x40000000字节的宿主机的虚拟内存来作为虚拟机的物理内存。设备会注册自己的MMIO和PMIO读写函数,当检测到访问其所在的内存或端口时调用注册的读写函数,实现对设备内存的读写功能。其中对于形如0000:00:03.0的数据,0000是域,00是总线号,03是设备号,0是功能号。

2024-06-21 17:42:29 624

原创 docker +tmux 远程本地gdb调试

使得在宿主机上对文件修改在docker也生效,然后在docker中调试运行,在宿主机修改这个文件夹或者文件。:一旦连接成功,你就可以在宿主机的GDB中设置断点、单步执行、查看变量等,就像直接在本地调试程序一样。应当是宿主机上与容器中相同的程序副本或符号文件,确保GDB能够识别并加载正确的调试信息。附加到你想调试的程序,并指定监听的端口。例如,如果你的程序名为。在容器中启动你的程序,并监听2345端口等待来自GDB的连接。:打开宿主机上的终端,使用GDB连接到容器中的。

2024-06-21 17:35:03 1065

原创 CTF-pwn-虚拟化-初探【d3ctf-2021-d3dev】

v4 = opaque->seek + (unsigned int)(addr >> 3)如果opaque->mmio_write_part为0会修改opaque->blocks[v4] = (unsigned int)val;addr == 8并且val seek = val,addr > 8并且addr == 28会opaque->r_seed = val然后调用。要求通过对设备的操作函数中的漏洞获得docker环境host机的shell,获取宿主机上的flag。

2024-06-20 13:08:47 987

原创 c++异常处理-漏洞利用

throw 函数会从当前函数找,然后往上找上个调用当前函数的函数,查看是否有函数有合适的catch处理模块,当前函数没有合适的catch处理模块就会把当前函数的栈帧给清除掉恢复到调用当前函数的函数,依次这样,知道找到合适的catch处理模块,然后再该模块下继续往后执行。最后,当异常被正确地传递给一个catch块时,控制权会转移给catch块中的代码,程序可以从异常发生点之后继续执行,此时寄存器和堆栈已经恢复到一个已知的、安全的状态。显示DWARF信息中的框架信息(Frame Information)。

2024-06-14 09:52:21 813

原创 CTF-PWN-kernel-初探

在SLUB分配器中,通常CPU局部的partial链表上的SLAB是冻结的,而Node级别的partial链表上的SLAB是解冻的,这是因为Node级别的SLAB是所有CPU共享的资源,需要保持较高的可用性。当一个 kmem_cache 在创建时,若已经存在能分配相等/近似大小的 object 的 kmem_cache ,则不会创建新的 kmem_cache,而是为原有的 kmem_cache 起一个 alias,作为“新的” kmem_cache 返回。:这是要创建的设备自己的设备号。

2024-06-10 16:27:47 860

原创 IO-源码阅读 glibc 2.35

会分配sizeof (struct locked_FILE)大小的结构体,然后_IO_no_init 初始化分配的结构体,_IO_JUMPS 对vatable赋值,_IO_new_file_init_internal 对结构体链接到list_all中,然后_IO_file_fopen 会系统调用打开文件并设置文件描述符。_IO_doallocbuf 会申请分配缓冲区并将指针_IO_buf_base和_IO_buf_end赋值。_IO_sputn 会调用到_IO_new_file_xsputn函数。

2024-06-09 19:01:17 854

原创 2024 cicsn ezbuf

add会检查索引,然后根据索引分配会固定得到0x40大小的chunk,并且会把whatcon的内容赋值过去,10次delete,会检查索引范围,和对应索引的chunk是否为空,但free后没有清零,3次show。会在会检查索引范围,和对应索引的chunk是否为空,并且在whatsthis == '\xFF’和 whatsize == 48都不满足会打印出chunk的内容。当时压根不知道用了protobuf这个玩意,提取工具也没提取出来,还是做题做太少了,很多关键性的结构都没看出来是protobuf。

2024-06-08 20:06:23 752 6

原创 2024 cicsn SuperHeap

我们要使得分配到一个非tcache大小的chunk,然后不是来自bin中的,然后free后能够进入unsortedbin,再通过溢出填充然后能够泄露,接下来分配book_struct不会来自bin中,由于是通过内容溢出,所以内容的chunk也要不来自bin,连着两个就可以实现第一个的内容溢出到第二个的内容。然后泄露libc基地址,虽然有很多无用的已经free掉的chunk干扰,但我们可以使得要构造的堆布局的大小不符合已经free的chunk就行,至于一些不会用到的堆布局的堆,我们让他依然来自bin就行了。

2024-06-07 23:07:12 1041

原创 2024 cicsn magicvm

最后没有指令可以执行vm::run退出会执行之前写入的rop,最后这里加个ret是system执行时候对齐。vud和改变值不是立即如果解析得到vid之后改变值(之前的指令到达mem步),那么就可以绕过vid检查。存在延迟,有个依赖关系,各个结构体的isvalid变量,代表前一步是否执行完。往database在vm结构体所在地址写入栈的返回地址所在地址。控制到database在vm上的位置。得到environ内的栈地址。泄露database的地址。泄露environ地址。写入system地址。

2024-06-02 23:34:14 1198

原创 C++的类和new和delete和菱形继承机制

要声明一个虚函数,需要在基类的成员函数声明前加上。

2024-06-02 09:52:01 1073

原创 2023 N1CTF Junior pwn 顶级签到

的设计理念是零成本的字符串引用,它不涉及内存管理,不对字符串进行拷贝,仅提供对已存在字符串的视图。是一个轻量级的字符串视图类,它不拥有字符串的内存,而是一个对现有字符串的引用。提供了完全的字符串管理,包括内存分配和所有权,适合需要修改字符串或独立存储字符串数据的场景。是一个模板类,可以用来同时存储两个相关的值,通常这两个值可以是不同类型。这里,即使传入的是一个临时的字符串字面量,str也会在栈上创建一个副本。作为一个高效的只读视图,适用于不需要修改字符串且希望避免拷贝开销的场合。对象是否使用了SSO。

2024-06-01 21:04:42 875

原创 2024 cicsn Ezheap

0x80个chunk,遍历选一个没有被用的,输入的size<0x501,然后malloc后会清零安装输入的size,然后输入内容,长度也是输入的size。指定索引,并判断是否存在,然后输入size<0x501,再往索引对应的chunk输入size长度内容,这里存在越界读。堆题开启沙盒会出现一堆被malloc和free的堆,要着重过滤下。指定索引,并判断是否存在,然后输出索引的chunk内容。指定索引,并判断是否存在,然后free和清零。

2024-06-01 17:37:17 797

原创 2024 cicsn orange_cat_diary

一次free和一次show,可以修改超过创建定义的长度多八个字节,存在edit after free 和show after free。题目提示orange,libc2.23 没有检查得到的fastbin中的chunk的size是否对齐,为0x7f也可以得到其中的chunk。

2024-05-30 21:23:49 360

原创 2024 cicsn gostack

Go语言中的切片是一种动态数据结构,可以看作是对底层数组的封装,包含指向数组的指针、长度和容量三个要素。错误起始于尝试写入一个非常长的字符串到缓冲区时,这个操作在内部触发了切片扩容,但由于字符串过长,导致扩容失败。会尝试构建一个缓冲区来存放格式化后的字符串,如果字符串过长导致所需缓冲区的容量超过了Go所能支持的最大值,就会引发“cap out of range”的错误。这里,程序试图格式化输出一个很长的字符串(你的输入),但在构建输出缓冲时遇到了容量限制问题。打印这个字符串时,就可能会遇到上述错误。

2024-05-29 23:49:43 606

原创 2024 京麟ctf -MazeCodeV1

这里将/bin/sh作为系统调用输入是作为指令部分不知道mmap起始地址,并且也不好绕过操作码部分。所以关键就是系统调用read和系统调用execve,想想好基本gadget然后变化符合到绕过。IDA中存在地图字符串,然后由于是行列为42的正方形地图,根据地图得到最后的路线,然后根据路线需要的指令得到合适的指令字节。asm使用时,对应的汇编指令要有换行符号,不然连着两个指令在一行会出现问题。"SPL"通常指的是寄存器esp(栈指针寄存器)

2024-05-29 22:44:43 879

原创 从零自制docker-15-【实现 mydocker run -d 支持后台运行容器】

然后之前在后面发现upper中出现root是调用相关命令就会出现root,但当时没有啥修改的文件,这次全的busybox发现出现了下面的这个,那么确实就是因为调用命令引起的日志记录的变化导致的。当时是容器在挂载前就找相关命令,找到的这个是宿主机上的,但我们要的是在pivoroot后的根目录下的相关命令的路径,所以后面运行这个宿主机上的路径会显示路径找不到,因为此时是以容器的根目录为相对参考。加入的,因为我最后关闭了主进程最后自动删除cgroup的函数),最终可以看到top进程在后台运行。

2024-05-27 15:22:14 1184

原创 从零自制docker-14-【实现 mydocker commit 打包容器成镜像】

这个归档文件内部的所有文件和目录结构,每一项占一行,但并不会展开或提取这个归档文件的实际内容。返回的是一个字节切片,包含命令执行后的输出文本。piveroot切换工作目录到/merged后,通过docker commit将此时工作目录的文件系统保存下来,使用tar包将该文件系统打包为tar文件。它接受一个可变数量的字符串参数,第一个参数是命令名,后面的参数是传递给该命令的各个选项和参数。: 这是一个变量,代表要创建的归档文件的名称(包括路径)。综上所述,这段代码的功能是:在Go程序中执行一个命令,使用。

2024-05-25 16:44:18 911

原创 Kata Containers零基础学习从零到一

Docker容器通过命名空间和控制组提供逻辑隔离,共享宿主机的内核,资源利用高效,但隔离度相对较低。Kata Containers等使用MicroVM技术,为每个容器提供独立的内核和硬件抽象层,隔离度高,安全性增强,但可能牺牲一点启动速度和资源效率。这张图可能详细展示了从应用管理层到基础虚拟化层的整个流程,强调了不同层次之间的信息流动和职责划分。

2024-05-22 19:02:35 1264

原创 c++虚表和虚基类和析构和构造和继承相关机制

抽象类是一种不能直接实例化的类,其存在的目的是作为基类,为派生类提供一个公共接口。抽象类中可以包含具体的方法(即有实现的方法)和抽象方法(即没有实现的方法)。抽象类通常用来定义一个接口规范,强制要求继承它的子类必须实现某些方法。在C++中,一个类只要包含至少一个纯虚函数,它就是抽象类。抽象类的实例化是不被允许的,即不能直接创建抽象类的对象。抽象类:不能直接实例化,包含至少一个纯虚函数,为派生类提供接口规范。纯虚函数:没有具体实现的虚函数,强制派生类必须实现,使得一个类成为抽象类。虚函数。

2024-05-20 00:29:40 959

原创 gdb添加libc调试信息和导入libc源码

symtab是全面的,包含程序中的所有符号信息,既包括本地静态符号也包括全局符号,主要用于链接和调试。.dynsym则更加精简,仅记录那些动态链接过程中需要用到的符号,通常这些符号属于动态链接库或者需要被其他共享对象链接的全局符号。

2024-05-16 21:35:59 881

原创 2023 PWNHUB 3月赛-【three_edit】

通过篡改_IO_2_1_stdout_结构体中的flags字段和_IO_write_base字段,通过篡改flags字段来绕过一些检查,通过篡改_IO_write_base字段使得当下次put函数系统调用write打印_IO_write_base字段与_IO_write_ptr字段之间的内容泄露出libc地址。注意数组内的index的限制,index的值为有符号,所以可以为负数绕过。只能分配size在0x50~0x70的堆,chunk数组的下标为15以内。或者直接使用p来通信兼调试如下。

2024-05-15 14:50:01 693

原创 Protobuf(基本使用和IDA中的protobuf解包逆向识别和重新利用)

创建一个.proto文件来定义你的数据结构。例如,创建一个。

2024-05-14 19:58:54 886

适合大学生复习的数据结构作业

适合大学生复习的数据结构作业

2023-10-25

适合大学生速通的老师课后布置的离散数学习题

内容为大学老师课后布置的离散数学习题,附有详细答案和题目。 适合期末或期中想要复习或者突击的同学们

2023-10-25

空空如也

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

TA关注的人

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