网鼎杯2020 朱雀部分writeup
Reverse –go
替換了base64字典
解題思路:
程序?qū)⑽覀冚斎氲膋ey,經(jīng)過(guò)換了編碼字典的base64加密后,去掉最后==,計(jì)算key加密后的長(zhǎng)度,長(zhǎng)度為0x16,就開(kāi)始解密。那么我們只需要輸入正確的key就有flag了,知道了base64加密字典XYZFGHI2+/Jhi345jklmEnopuvwqrABCDKL6789abMNWcdefgstOPQRSTUVxyz01,和密文nRKKAHzMrQzaqQzKpPHClX==,解密如下:
Reverse –tree
解題思路:
先找到根節(jié)點(diǎn),上面內(nèi)存塊為子節(jié)點(diǎn),還原二叉樹(shù)結(jié)構(gòu),通過(guò)調(diào)試器在內(nèi)存中定位到根節(jié)點(diǎn),依次還原每個(gè)子節(jié)點(diǎn),當(dāng)然也可以拷出來(lái)使用。
最后需要得到zvzjyvosgnzkbjjjypjbjdvmsjjyvsjx,按圖索驥在二叉樹(shù)中獲取查找方向,得到如下字符串- -:
10101111101001000001111111001000010101110100111100010010010010000001101010000100100111010111111101110001001000001111100010011100
轉(zhuǎn)ascii:
afa41fc8574f12481a849d7f7120f89c
整理下格式:
flag{afa41fc8-574f-1248-1a84-9d7f7120f89c}
解密代碼:
Pwn-Magic
題目邏輯:
1是創(chuàng)建多大空間 并保存你輸入的字符串
2根據(jù)索引釋放空間
3 根據(jù)索引打印對(duì)應(yīng)的字符串
解題思路:
在忘記魔法的函數(shù)里,釋放空間是根據(jù)給定的索引來(lái)釋放對(duì)應(yīng)的空間。但是刪除的時(shí)只free,而沒(méi)有設(shè)置為 NULL,這里是存在 Use After Free 的情況的。
同時(shí)還提供了這個(gè)函數(shù):
可以修改的輸入字段為 magic 函數(shù)的地址,從而實(shí)現(xiàn)在執(zhí)行“使用魔法”即調(diào)用輸入的字符串的時(shí)候執(zhí)行 magic 函數(shù)。
也可以自己構(gòu)造一個(gè)system(/bin/sh),我這里采用的是后者。
學(xué)習(xí)魔法創(chuàng)建的內(nèi)存結(jié)構(gòu)如下
| Name ptr |
我們通過(guò)寫(xiě)name的時(shí)候,覆蓋magic:
原理:
對(duì)于大小為(16 Bytes~ 64 Bytes)的堆塊來(lái)說(shuō)則是使用fastbin,在fastbin中,是由單項(xiàng)鏈表連接起來(lái)的,每個(gè)chunk的pre_chunk指向之前回收的chunk,即回收的chunk出于鏈表頭部,此時(shí)分配時(shí)也會(huì)從頭部分配。
這里的magic分配空間為0x10,顯然是一個(gè) fastbin chunk(大小為 16 字節(jié))。
我們通過(guò)連續(xù)申請(qǐng)空間,形成一個(gè)鏈表,釋放鏈表頭的空間后,再次申請(qǐng)內(nèi)存會(huì)從頭部分配。
即我們最后申請(qǐng)magic2的而空間保存到chunk0中,由于沒(méi)有將釋放的指針置空,我們?cè)俅握{(diào)用第0個(gè)magic,就會(huì)將最后magic2填入的name給執(zhí)行了。
步驟:
學(xué)習(xí)魔法,申請(qǐng)空間0,0x100,大小要不同于0x10 maigc的大小
學(xué)習(xí)魔法,申請(qǐng)空間1,0x100
忘記魔法,釋放空間0
忘記魔法,釋放空間1
學(xué)習(xí)魔法,申請(qǐng)空間2,大小為 0x10,和magic申請(qǐng)的一樣大,那么根據(jù)堆的分配規(guī)則
空間2 其實(shí)會(huì)分配空間1 對(duì)應(yīng)的內(nèi)存塊,這時(shí)name對(duì)應(yīng)的是magic 0地址。
如果我們這時(shí)候向magic 2 的name寫(xiě)入 需要執(zhí)行的地址(system啥的),那么由于沒(méi)有置magic 0為NULL。當(dāng)我們?cè)俅螄L試輸出magic 0 的時(shí)候,程序就會(huì)調(diào)用magic2處的代碼。
代碼:
總結(jié)
以上是生活随笔為你收集整理的网鼎杯2020 朱雀部分writeup的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Aarch64汇编语言
- 下一篇: Windbg+sos调试.net笔记