# HW7 ## heapmath ### 解題&觀察 這次的題目一進去介面如下,這題考點是想測試解題者對於tacche、fastbin、small bin等等的bin其架構跟header是否了解  由於nc edu-ctf.zoolab.org 10006進入的介面是有Timeout時間限制的 所以我解題是透過寫Python來解 總共分五大題 : 1. tcache chall : 回答Tcache的0x30、0x40的subbin內有哪些chunk、 此題只須求個別的chunk size即可得出結果,chunk size = malloc size - 0x8 + 0x10  2. address chall : 此題會給出一個chunk的address,讓我們求另一個chunk的address,其解法舉例來說,假設求D的chunk address = C的chunk address + C的chunk size  3. index chall : 此題會給出Y的某個element = 0xdeadbeef,讓我們求X第幾個element可以是0xdeadbeef,解題方式就是去計算&X[0]到Y[6]有多少Bytes,再將Bytes整除8即可求出 以下圖為例,由於X資料內容 + Y chunk header = 0x50 Bytes = 80 Bytes (10進位),且Y[0~5]共6*8 = 48 Bytes,offset共128 Bytes, 128/8 = 16,故回答16  4. tcache fd chall : 這題可以透過下圖簡報來求,題目會給出Y chunk address,讓我求Y chunk fd,求法為Y chunk address - chunk size ,以下題為例,0x55b51c043f0 - 0x50 = 0x55b51c0e43a0   5. fastbin fd chall : 此題為最後一題,此題與上題類似,差別只在Fastbin的fd指向header,Tcache指向data,算法為Y chunk address - chunk size - 0x10 header size ,以下圖為例,0x55b51c0e43f0 - 0x50 - 0x10 = 0x55b51c0e4390  最後可以得到FALG!!  ## babynote ### 觀察&解題 此題是一題選單題,其解法講師都有寫在簡報中,而我理解其題目後再將Code寫出而已,我程式所做的行為如下,可以對映pwn2簡報124~129頁: 1. 堆結構,堆出A、B、C三個結構  2. leak from unsorted bin,可以leak到main_arena的address  3. 構造fake chunk,並利用overflow蓋寫object的"data" member  4. 最後 Get shell  但由於我的程式最後的delete好像會被吃掉,所以沒辦法直接獲取shell,需要在執行程式之後在做一次delete就可以拿到shell  最後就可以把FLAG讀出!!  ## babyums ### 觀察&解題 此題跟babynote相似,不同之處在於其struct內容多了一個password,並且有兩個FLAG 解題流程一樣是4步 1. 堆結構,堆出A、B、C三個結構  2. leak from unsorted bin,可以leak到main_arena的address  3. 構造fake chunk,並利用overflow蓋寫object的"data" member  4. 最後 Get shell  因為與LAB其struct不同,所以需要注意下面幾點: 1. add user時需要多send密碼  2. fake_chunk需要增加密碼的部分  3. 在sendline(data + fake_chunk)前要送出size,因為struct增加了password,所以送出的size從LAB的0x38變成0x48 最後執行起來直接cat /home/chal/flag即可獲取到FLAG2  想要獲取FLAG1直接cat /home/chal/babyums.c就好  但這裡需要注意,我直接將這個FLAG上傳會失敗,之後cat /home/chal/chal去看程式的binary,看到FLAG需要小寫  所以FLAG1為flag{C8763}!!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up