off-by-one

off-by-one

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

char buf[size];
for (int i = 0; i <= size; i++) {
    buf[i] = getchar();
}

通常是在buf[size]位置在非法写入一个字节,堆上(heap based) 的 off-by-one 是 CTF 中比较常见的

Asis-2016-b00ks | off-by-one

IDA分析,已下是逆向过的代码,方便理解

off-by-one

Change先在author处输入32个字节,此处有off-by-one漏洞,触发需要注意代码执行顺序

off-by-one

off-by-one

之后是菜单选择,Create主要是创建book结构体以及book_list

off-by-one

为方便理解用调试看一下

off-by-one

off-by-one

绿框是我们输入的author name,红框是book1,蓝框是booklist,可以容纳最多20本书(20的原因是下面的check full函数)

off-by-one

off-by-one

绿色,红色,橙色分别对应name,description,book,红色框是可以变化的,取决于size,下图的后三行中的0x30大小的chunk是截止到目前调用一次Create(3次malloc)

off-by-one

off-by-one

可以看出Print是按地址解析的。

上一篇:Android - 接收蓝牙状态改变的广播


下一篇:智能家居调用接口文档