我们联合,形成两面包夹芝士!

pstack

分析

非常经典的没有回显的0x10字节溢出,栈迁移。第一件事就要先考虑怎么泄露出libc地址。我们选择将栈劫持到bss段。从汇编代码可知vuln函数栈帧开辟了0x30大小,所以把rbp劫持为某个选定的bss段+0x30,这样rbp就会跳到bss+0x30。

阅读此文

前置知识

  1. PIE的概念

  2. 有关__libc_start_main的文章

不过其实就算没看懂这篇文章问题也不大,只要是题目做多了的话都能知道一点就是,正常gcc编译出来的elf程序都会经历一个_start__libc_start_main的过程。

阅读此文

自己的理解与尝试

编写demo看执行结果

参考资料然后根据资料里的demo自己改了一下看看实际try…catch是怎么运行的

阅读此文

0x00 前言

之前傻乎乎的在网上找资料学习的时候学得一头雾水,最近才忽然想到为什么不去roderick师傅的博客直接看本人的分析呢。然后发现roderick师傅写的是最详细最易懂的,推荐正在学习apple2的师傅直接去看。

我这里据两道题来分析,记录一下学习的过程。

阅读此文

相关数据结构

_IO_FILE_plus

_IO_FILE_plus定义如下:

阅读此文
post @ 2024-07-30

0x01 Super CPP Calc

分析

main函数:

阅读此文

0x00 前言

本来这篇文章想5月份写的,拖到了现在。其实是之前在VN面试的时候Qanux师傅给我做的几道题里的其中一道要用到这个技术,也是第一次见,所以打算记录一下。后来题目做了三天,才发现是24年geekCTF的memo2。接下来就从这道题讲讲劫持l_addr绕过栈溢出检测或者getshell的思路,以及调试方法。

0x01 题目

阅读此文

0x00 前言

在glibc2.34或更高版本,没有了hook用来劫持,所以一般会用IO之类的路子来劫持。如果条件允许,还可以考虑劫持劫持libc的got表来getshell。libc一般是partial relro,所以got表可写。但准确来说,接下来的PoC,其实针对的是劫持.got.plt段执行one gadget而设计的。劫持libcgot的技术还可以结合context的gadget实现rop,后面再深入研究。

0x01 PoC

阅读此文

0x00 前言

最近给战队出了一道pwn题,第一次体验完整的出题流程,涉及到docker的使用。因为是第一次使用docker来封装题目环境,所以遇到了很多问题。网上有一些关于出pwn题的使用方法,但是有些问题没有提到,所以这里记录一下我遇到的问题,还有解决方法。docker的安装网上教程很多这里不多赘述。

顺带一提,我的操作环境是wsl2的Ubuntu 22.04.3 LTS,若有因环境不同而引起的操作不同,具体请查询其他资料。

阅读此文

前置知识

首先每个Large Bin中存在63个bin链表,在binmap中的index是64-126。每个bin中存的是一定范围内大小的chunk,而不是像tcachebin那样的一个bin一个大小。举个栗子,index64的bin中存的是0x400到0x430的chunk。每个bin能存取的范围一般是0x30。

Large Bin既不是FIFO也不是LIFO,它的排序是根据chunk大小来进行的,并且结构更加复杂。large chunk被释放的时候不仅会被写入fd和bk,还有fd_nextsize和bk_nextsize两个指针来维护bin的结构。fd和bk用来链接bin中相同大小的chunk,而nextsize则用来链接bin中不同大小的chunk。更具体地说,fd指向比自己晚释放的相同大小的chunk,bk则指向比自己晚释放的相同大小的chunk,fd_nextsize用来指向比自己大的chunk,bk_nextsize则指向比自己小的chunk。在相同大小的chunkbin中只有首堆块会有nextsize的指针。bin中首尾chunk的nextsize会指向另一端,首堆块的fd会指向对应index的bin头地址,尾堆块的bk会指向对应index的bin头地址。

阅读此文
⬆︎TOP