1. 程式人生 > 其它 >off-by-one

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分析,已下是逆向過的程式碼,方便理解

Change先在author處輸入32個位元組,此處有off-by-one漏洞,觸發需要注意程式碼執行順序

之後是選單選擇,Create主要是建立book結構體以及book_list

為方便理解用除錯看一下

綠框是我們輸入的author name,紅框是book1,藍框是booklist,可以容納最多20本書(20的原因是下面的check full函式)

綠色,紅色,橙色分別對應name,description,book,紅色框是可以變化的,取決於size,下圖的後三行中的0x30大小的chunk是截止到目前呼叫一次Create(3次malloc)

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

zer0_1s