heap - 3 - bins分类

存放free chunks的链表 ——— bins !

1. bin链的介绍

  • bin链是由struct chunk组成的链表
  • 不同的chunk根据不同的特点将它们区分开,为了便于分开管理,glibc引入了bin链这个概念
  • bin链上的chunk都是free chunk
  • bin链都是由当前线程的arena管理的

2. bin链的分类

  1. Fast bin
  2. Small bin
  3. Unsorted bin
  4. Large bin
阅读更多...

heap - 2 - chunk的分类

堆块最小分配的单位 —— malloc_chunk !

1. chunk的结构体

1
2
3
4
5
6
7
8
9
10
11
12
struct malloc_chunk {

INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */
INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */

struct malloc_chunk* fd; /* double links -- used only if free. */
struct malloc_chunk* bk;

/* Only used for large blocks: pointer to next larger size. */
struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
struct malloc_chunk* bk_nextsize;
};
阅读更多...

heap - 1 - arena

堆的 管理者

1. 什么是 arena

堆,是内存分配所用的内存,在计算机世界中是一种比较复杂的部件,里面有大量的信息需要被管理
arena,就是管理堆的一个结构

2. arena 的特点

一个线程只有一个arena,这些arena是互不相同的。
主线程的arena称为main_arena,子线程的arena称为thread_arena

阅读更多...

pwnable.tw 部分题解

pwnable.tw 部分详细题解

1. start

点击 这里 下载题目

易知信息

  • 所有保护都被禁用
  • 有明显的栈溢出
  • sys_readsys_write所操作的内存空间都是esp指向的位置

分析

  • 程序没有开启NX保护,所以我们可以通过写入并执行shellcode来获得shell
  • 但在执行shellcode之前,我们需要先得到esp的具体值,从而计算出shellcode在栈上的具体地址
    • 分析汇编代码和栈结构,我们可以发现,old esp被存到了栈的底部。
    • 所以只要我们将这个地址泄露出来,那么就可以得知栈顶地址。
    • 而当程序第一次ret后,esp就指向old esp
    • 所以我们可以通过retsys_write,将old esp泄露,同时还可以进行二次栈溢出,写入并跳转至shellcode
阅读更多...

HNUCTF2020 部分题解

HNUCTF2020新生赛 部分pwn题题解

1. calculator

点击 这里 下载题目

查看保护

1
2
3
4
5
6
7
root@Kiprey:~/Desktop/HNUCTF/pwn# checksec pwn6
[*] '/root/Desktop/HNUCTF/pwn/pwn6'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x8048000)
阅读更多...
  • Copyrights © 2020-2024 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~