<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近比賽出的musl題型的越來越多,不得不學習一波musl的堆利用來應對今後的比賽。這裡要講的是musl1.22版本的利用,因為網上可以找到很多審計原始碼的文章,所以這篇文章是通過一道題目來debug去學習堆的利用技巧,這裡用到的是2021第五空間線上賽的notegame題目。
1、首先是add函數,使用了calloc,申請的最大size是0x90
2、接著是delete函數,free之後將指標清空了
3、然後是edit函數,漏洞就出現在這裡,這裡存在溢位空位元組的漏洞,可以對index清零指向 fake_meta
4、最後來看這個update函數,這個realloc函數會將原來chunk的內容複製到新的chunk裡面,我們可以用這個來進行洩露libc地址
musl的chunk跟glibc的區別就是,chunk頭的結構存放了比較少的堆塊資訊,沒有像glibc那樣存放了一些指標地址資訊,所以我們如果要洩露libc地址的話也是要特定的條件,就是要chunk裡面儲存著另外一個chunk的指標地址或者其他指標地址的資訊,而且也再不能直接改指標去達到任意分配的效果,而是要改chunk頭僅有的資訊去偽造meta進行任意分配。
add(0x20,'a'*0x20)
1、secret是用來校驗meta域的一個key
2、free_meta_head存放著釋放掉的meta,是個單連結串列結構,這裡還沒有釋放,所以為空
3、active是根據size大小分出來的不同的meta
4、usage_by_class是對應meta的數量
add(0x20,'a'*0x20) add(0x20,'a'*0x20) add(0x20,'a'*0x20) add(0x20,'a'*0x20) free(3)
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分配的記憶體頁數
add(0x20,'a'*0x20) add(0x20,'a'*0x20) add(0x20,'a'*0x20) add(0x20,'a'*0x20) free(3)
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)
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)
avail_mask = 0x6 =0b0110
freed_mask = 0x0 =0b0000
耗盡group的chunk的時候,musl會把釋放掉的申請出來,並把其他chunk對應的avail_mask置1
add(0x50,'a'*0x50) free(0)
當只有一個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)
總結起來,就是說avail_mask |freed_mask
的結果是滿狀態的時候,就會釋放這個meta。
本篇先通過debug的方法來簡單闡述musl堆塊的結構,後續再講如何對它進行利用。
更多關於網路安全滲透測試musl堆的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45