CTF Misc 的笔记

一点点曾经整理的Misc笔记,数量较少。

1. git

  1. 查找所有 commit - 参考链接

    1
    2
    3
    4
    # 查看所有commit,包括已撤回的提交
    git log --reflog
    # 重置commit头
    git reset --hard [commit-Hash]
  2. 查看 git 提交的文件内容 - git 对象库

    1
    2
    3
    4
    5
    6
    7
    8
    # 查看所有提交log(包括已撤回的提交)
    git log --pretty=raw
    # 查看某个Hash值对应的类型
    git cat-file -t [Hash]
    # 查看某个Hash值对应的内容
    git cat-file -p [tree/file-Hash]
    # 查看树的内容
    git ls-tree [-r是否递归][-t输出更完整的信息(包括子树)] [commit/tree-hash]
阅读更多...

CTF Pwn 的杂项笔记

这里是笔者记录的一些内容较少、不便于整理出一篇博客的Pwn杂项知识点。

1. docker 使用 - 使用手册

2. 漏洞

  1. 格式化字符串

    1
    2
    3
    4
    // %lln 四字 / %ln 双字 / %hn 单字 / %hhn 字节
    printf("%(n-1)$[format]"); // -> 第n个参数
    printf("%{n-1}$n"); // -> 将输出的字符个数写入第n个参数
    printf("%nc"); // -> 输出对应参数n个字符
阅读更多...

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 - 1 - arena

堆的 管理者

1. 什么是 arena

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

2. arena 的特点

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

阅读更多...

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;
};
阅读更多...

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
阅读更多...
  • Copyrights © 2020-2021 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~