91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

musl堆使用技巧有哪些

發布時間:2022-02-19 17:04:25 來源:億速云 閱讀:169 作者:iii 欄目:開發技術

這篇“musl堆使用技巧有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“musl堆使用技巧有哪些”文章吧。

    題目分析

    1、首先是add函數,使用了calloc,申請的最大size是0x90

    musl堆使用技巧有哪些

    2、接著是delete函數,free之后將指針清空了

    musl堆使用技巧有哪些

    3、然后是edit函數,漏洞就出現在這里,這里存在溢出空字節的漏洞,可以對index清零指向 fake_meta

    musl堆使用技巧有哪些

    4、最后來看這個update函數,這個realloc函數會將原來chunk的內容復制到新的chunk里面,我們可以用這個來進行泄露libc地址

    musl堆使用技巧有哪些

    調試分析

    musl的chunk跟glibc的區別就是,chunk頭的結構存放了比較少的堆塊信息,沒有像glibc那樣存放了一些指針地址信息,所以我們如果要泄露libc地址的話也是要特定的條件,就是要chunk里面保存著另外一個chunk的指針地址或者其他指針地址的信息,而且也再不能直接改指針去達到任意分配的效果,而是要改chunk頭僅有的信息去偽造meta進行任意分配。

    malloc_context

    add(0x20,'a'*0x20)

    musl堆使用技巧有哪些

    1、secret是用來校驗meta域的一個key

    2、free_meta_head存放著釋放掉的meta,是個單鏈表結構,這里還沒有釋放,所以為空

    3、active是根據size大小分出來的不同的meta

    4、usage_by_class是對應meta的數量

    meta

    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    free(3)

    musl堆使用技巧有哪些

    1、prev和next分別是上一個和下一個meta頁,這里都指向本身,表示只有一個meta頁

    2、 mem表示group的地址,它是由多個chunk組成

    3、avail_mask表示可以分配的chunk情況,0x3f0=0b01111110000,因為我們已經分配了4個堆塊,所以這里表示前四個不可分配。

    4、freed_mask表示已經釋放的chunk情況,因為我們釋放掉了第一個chunk,所以這里的0x1表示的是free掉的第一個chunk

    5、last_idx表示最后一個chunk的下標,這里是0x9,總數是0xa個

    6、freeable表示已經釋放的堆塊個數

    7、sizeclass表示管理的group的大小

    8、maplen如果不為零表示mmap分配的內存頁數

    chunk

    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    add(0x20,'a'*0x20)
    free(3)

    musl堆使用技巧有哪些

    1、表示距離group首地址的偏移分別為0x0、0x30、0x60,系統是根據這個偏移來找到對應的meta地址,所以我們如果能改這個偏移比如把chunk1的偏移置零的話,就能在chunk1-0x10的地方偽造一個meta的指針,而這個地方又是我們可以控制的chunk0的data域,于是我們就可以在任意地方偽造一個meta,不過這個地址必須是跟0x1000對齊的。

    2、表示當前chunk的下標,當chunk被free之后會變成0xff

    3、表示剩下用戶空間的大小,chunk頭后面的4個字節跟glibc的prev_size那樣可以被上一個chunk復用, 所以我們就可知道我們分配的大小跟chunk大小的關系

    0x10:0-0xc
    0x20:0xd-0x1c
    0x30:0x1d-0x2c
    0x40:0x2d-0x3c
    ...

    chunk的分配釋放

    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    free(0)
    add(0x50,'a'*0x50)

    musl堆使用技巧有哪些

    avail_mask = 0x10=0b10000

    freed_mask = 0x1 =0b00001

    musl的chunk釋放了之后并不會馬上分配,這里group里面有5個chunk,先是申請了3個chunk,然后free掉第一個,再次申請的時候并不會把第一個chunk分配出來,而是把group的第四個chunk申請出來,然后對應的avail_mask置零

    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    free(0)
    free(1)
    free(2)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)

    musl堆使用技巧有哪些

    avail_mask = 0x6 =0b0110

    freed_mask = 0x0 =0b0000

    耗盡group的chunk的時候,musl會把釋放掉的申請出來,并把其他chunk對應的avail_mask置1

    meta的釋放

    add(0x50,'a'*0x50)
    free(0)

    musl堆使用技巧有哪些

    當只有一個chunk是被分配出去的,而freed_mask=0,我們把這個chunk給free掉之后,系統會回收整塊meta空間

    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    add(0x50,'a'*0x50)
    free(0)
    free(1)
    free(2)
    free(3)
    free(4)

    musl堆使用技巧有哪些

    總結起來,就是說avail_mask |freed_mask的結果是滿狀態的時候,就會釋放這個meta。

    以上就是關于“musl堆使用技巧有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    界首市| 田东县| 榆中县| 白朗县| 天全县| 抚州市| 新河县| 湾仔区| 北票市| 聂荣县| 阿拉善盟| 大兴区| 威海市| 英超| 新野县| 武鸣县| 博客| 托克逊县| 体育| 平江县| 新竹市| 大田县| 张掖市| 沁阳市| 梁平县| 湟中县| 宝山区| 五指山市| 高邮市| 瓮安县| 达州市| 自治县| 宜黄县| 海林市| 卢湾区| 西青区| 宁陵县| 新乡市| 灵武市| 屯昌县| 阳泉市|