heap - 13 - off_by_one && __realloc_hook

1. off-by-one 介绍

  • off-by-one 漏洞是一种特殊的溢出漏洞,off-by-one 指程序向缓冲区中写入时,写入的字节数超过了这个缓冲区本身所申请的字节数并且 只越界了一个字节

  • off-by-one 是指单字节缓冲区溢出,这种漏洞的产生往往与边界验证不严和字符串操作有关
    例如以下代码:

    1
    2
    3
    4
    5
    6
    char* note = malloc(noteSize);
    char* input = malloc(noteSize + 1);
    fgets(stdin, input, noteSize);
    // 注意下面两条代码
    if (strlen(input) <= noteSize>) // strlen计算字符串长度时不会加上'\0'
    strcpy(note, input); // 而strcpy会把'\0'一起复制过去,如此便多写入了一个字节('\0')
  • glibc中的内存管理机制ptmalloc 极度依赖 chunk的size成员,故off-by-one漏洞威力强大

  • 同时, 由于Linux 的堆管理机制 ptmalloc 验证的松散性, off-by-one 漏洞的利用难度不大

阅读更多...

heap - 12 - fastbin attack

利用Fastbin attack进行任意地址读写

1. 原理

  • fastbin attack 存在的原因在于 fastbin 是使用fast chunk的fd指针,即单链表来维护释放的堆块的
  • 并且由 fastbin 管理的 chunk 即使被释放,其 next_chunk 的 prev_inuse 位也不会被清空
  • 利用的条件是
    • 能够控制fast chunk的fd指针
    • 漏洞发生在fast chunk类型上

2. Arbitrary Alloc

1) 介绍

  • 如果我们更改fastbin链尾的fast chunk fd指针为我们的目的地址
    则在几次malloc后,fastbin指针就会指向我们的目的地址
    下一次malloc fast_chunk就会取得目的地址的指针,然后就可以进行读写了(操作取决于程序)

阅读更多...

heap - 11 - malloc_consolidate 源码及其部分分析

fast chunk的内存整合

1. 介绍

  • 看了之前关于malloc和free的相关源码

    1
    2
    if (have_fastchunks (av))
    malloc_consolidate (av);

    就算不看malloc_consolidate的源码,也猜得出来其功能
    该函数是对 fast chunk 进行内存整合

    但为什么该函数取名为malloc_consolidate呢?真误导人呀 :-(

  • 但即便如此,该函数还起到了一个堆的初始化作用

    感到奇怪? 看源码咯~

阅读更多...

heap - 8 - UAF漏洞的简单介绍及其例子

A good Hacker should always take good notes! —— hacknote

1. UAF简介

UAF —— Use After Free. 指的是当某个指针被free后,没有及时将这个指针置空,导致该指针成为悬浮指针,在程序中仍然可以对该指针指向的内存执行某些操作,例如写入数据,查看数据等(操作取决于程序)

2. 例子 — pwnable.tw_hacknote

点击 这里 下载题目

查看保护

1
2
3
4
5
6
7
8
# root @ Kiprey in ~/Desktop/Pwn [14:16:43]
$ checksec hacknote
[*] '/root/Desktop/Pwn/hacknote'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x8048000)

执行流程

  1. 提示用户选择选项,有 添加笔记删除笔记输出笔记退出程序四个选项
  2. 根据用户的选择,执行不同的操作
阅读更多...

CTF Web 的笔记

一点点曾经整理的Web笔记,篇幅会相对较小一点。

1. XXE 攻击 (XML)

  1. 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE foo [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php"> ]>
    <user>
    <username>
    &xxe;
    </username>
    <password>
    </password>
    </user>

2. SSRF

函数的注意点

1. cURL

2. file_get_contents

  • gopher 协议无法URLencode
  • 关于gopher的302跳转有bug,导致利用失败
阅读更多...

CTF Reverse 的笔记

  • 笔者会把一些曾经遇到过的Reverse知识点记录在这里。
  • 但笔者并非主攻二进制逆向,故逆向笔记会相对较少。

1. 迷宫问题(maze)

迷宫问题有以下特点:

  • 在内存中布置一张 “地图”,这个地图可能是字符(例如#之类的),也可能是一些数字的二进制
  • 将用户输入限制在少数几个字符范围内.
  • 一般只有一个迷宫入口和一个迷宫出口

详情CTF-Wiki

阅读更多...
  • Copyrights © 2020-2023 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~