ptmalloc2源码详解 Part1
本系列讲解的版本为Glibc2.23
高版本的diff比如tcache bin的增加等会被放在heap exploitation系列中进行分析
非栈上格式化字符串漏洞特指在printf(char *fmt, ...)
函数调用中,格式字符串参数fmt
的存储位置不在当前函数栈帧中的情况。其常见表现形式主要包括以下两种类型:
.bss
段)的全局变量进行传递时malloc
等函数动态分配的堆内存区域时非栈上格式化字符串和栈上格式化字符串漏洞利用最大的区别就是非栈上格式化字符串漏洞无法通过操控或者布局栈上的变量来实现任意地址写等操作。对于Part1,我们先来介绍一个比较简单的例子:
内核版本下载,这里随便选一个LTS版本
1 | curl -O -L https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.4.98.tar.xz |
下载完解压进入对应的目录来配置一些选项
关键知识点:tx.origin
和msg.sender
的区别
tx.origin vs msg.sender[¶](https://ctf-wiki.org/blockchain/ethereum/basics/#txorigin-vs-msgsender)
- 这里区分一下 tx.origin 和 msg.sender ,msg.sender 是函数的直接调用方,在用户手动调用该函数时是发起交易的账户地址,但也可以是调用该函数的一个智能合约的地址。而 tx.origin 则必然是这个交易的原始发起方,无论中间有多少次合约内 / 跨合约函数调用,而且一定是账户地址而不是合约地址。
- 给定这样一个场景如:用户通过合约 A 调合约 B,此时:
- 对于合约 A : tx.origin 和 msg.sender 都是用户
- 对于合约 B : tx.origin 是用户,msg.sender 是合约 A
——CTF-WIKI
主要是对之前所学习的内容进行细节补充
House of orange是一种针对低版本堆题无free函数来进行IO流攻击的手法。其大致思路为利用unsortedbin_attack劫持_IO_list_all指针,然后劫持_IO_FILE_plus的vtable来进行getshell
因为不想再在这种题上爆零,所以开了这个系列😭
LLVM Pass 是一个在 LLVM 编译框架中执行的独立的代码变换或优化步骤。LLVM 本身是一个开源的编译器框架,广泛用于生成机器代码、优化代码和进行程序分析。Pass 是 LLVM 中处理中间表示(IR, Intermediate Representation)的基本单位。