new_pwn
# 记录两道 PWN 题
给新生出题,出累了,随便看了两个 PWN 题,发现这两个 PWN 都值得记录一下
ONE
# [NISACTF 2022]shop_pwn
题目标签:
pthread_create 多线程竞争
执行程序如下:
放入 IDA 看一下具体的函数:
看一下主要的函数
脚本如下:
这里利用了 pthread_create 创建进程,那么如果我们指令发送得快的话,那么就可以实现第一次售卖功能执行的时候正在 unsleep,接着执行第二次售卖功能,那么就能卖出两次得到可以购买 flag 的金钱了
pwntool 的 sendline 发送指令很快
from...
more...
bins
# pwn 堆 bins 学习。
# 一、bin 链的介绍
bin 是一个由 struct chunk 结构体组成的链表。
前面介绍过,不同的 chunk 根据特点不同分为不同的 chunk,为了将这些 chunk 进行分类的管理,glibc 采用了 bin 链这种方式管理不同的 chunk。
不同的 bin 链是由 arena 管理的。
bin 链中的 chunk 均为 free chunk。
# 二、bin 链分类
根据 bin 链成员的大小不同,分为以下几类:
fast bin 是单链表,其他都是双向链表。
Fast bin。
Unsorted bin。
Small...
more...
b_canary
# canary 介绍:
在函数调用发生时,向栈帧内压入一个额外的随机 DWORD,这个随机数被称为 “Canary”
如果使用 IDA 反汇编的话,您可能会看到 IDA 会将这个随机数标注为 “Security Cookie”,在部分书籍的叙述中会用 Security Cookie 来引用这种随机数
Canary 位于 EBP 之前,系统还将在内存区域中存放一个 Canary 的副本
当栈中发生溢出时,Canary 将被首先淹没,之后才是 EBP 和返回地址
在函数返回之前,系统将执行一个额外的安全验证操作,被称作 “Security check” 在 Security check...
more...
srop
# srop
# srop 原理
# signal 机制 ¶
signal 机制是类 unix 系统中进程之间相互传递信息的一种方法。一般,我们也称其为软中断信号,或者软中断。比如说,进程之间可以通过系统调用 kill 来发送软中断信号。一般来说,信号机制常见的步骤如下图所示:
内核向某个进程发送 signal 机制,该进程会被暂时挂起,进入内核态。
内核会为该进程保存相应的上下文,主要是将所有寄存器压入栈中,以及压入 signal 信息,以及指向 sigreturn 的系统调用地址。此时栈的结构如下图所示,我们称 ucontext 以及 siginfo 这一段为 Signal...
more...