漏洞原理筆記

2021-09-24 10:46:25 字數 2326 閱讀 2199

按利用原理分類:

拒絕服務,緩衝區溢位,記憶體篡改,設計缺陷。

比如if(mmisadressvaild(buffer)),只比較第乙個位元組。如果傳一頁最後乙個位元組,長度大於2,就會發生問題。

比如neitherio不做probeforread/write,就r3傳入乙個核心位址,一般是要被呼叫的函式,想辦法將該位址值設為0,然後乙個辦法在r3分配乙個0位址空間,呼叫zwallocatevirtualmemory,並將r0shellcode拷貝入這裡。

要很少被呼叫的函式,因為程序隔離,如果其他程序使用這個函式會呼叫0位址**,而其他程序沒有0位址的**,會產生崩潰。

ntstatus zwallocatevirtualmemory(

_in_ handle processhandle,

_inout_ pvoid *baseaddress,

_in_ ulong_ptr zerobits,

_inout_ psize_t regionsize,

_in_ ulong allocationtype,

_in_ ulong protect

);

baseaddress如果指向0傳入,函式不會認為你是在0位址分配,二十認為你想在任何可以位址分配記憶體,而不是0.繞過方法就是指定allocationtype為mem_top_down從上而下分配。此時指定baseaddress為1,長度大於這個值,然後分配成功位址範圍急速從負的值,到1,把0位址就包含在內了,此時再去嘗試指向null指標指向位址寫入,就不會異常了。

然後r0shellcode可以提公升程序許可權到system程序(比如這個許可權可以訪問登錄檔sam,security,更新系統檔案,手工防毒),恢復核心的hook,新增呼叫門等。

就是多執行緒多程序程式設計出的問題,是一種異常行為,由對事件相對節奏依賴關係的破壞引發的。屬於toctou漏洞一種,即程式先檢查某個物件特徵,然後的動作是在假設這些特性保持情況下作出的,但是可能已經改變,因為程序不是原子方式執行,會進行程序切換,所以如果處理不好,會互相干擾,引起安全問題。

競爭條件漏洞發生要具備以下條件:

多個事件發生,事件間有一定隔離,有一定的關係,比如後面事件依賴前面事件。

攻擊者能改變第乙個事件所產生的,第二個事件所依賴的假設。

以為linux臨時檔案都有許可權,所以在open函式,要加o_excl,獨佔,不然就要出問題。

理論上密碼是高許可權,普通使用者也可以修改密碼原因是,set-uid是unix重要的安全機制,當乙個set-uid程式執行時,它被假設為具有擁有者許可權。比如密碼是root擁有,其他使用者啟動這個程式,就有了擁有者許可權。設定set-uid的命令是chmod u+s ***,前提是chown root ***,先讓擁有者成為root。

這個漏洞就是個競爭條件漏洞,參考部落格

大概就是tty中溢位,ops覆蓋成自己的payload。

就是自己不寫shellcode,利用系統自己的**,合起來並湊出自己的程式,比如在kernel32.dll,找到ret1,指令是pop r,ret,另外ret2,call r,然後利用棧溢位之類的漏洞,將返回值放在棧上,比如從上到下依次防ret1,system位址,ret2,函式退出時,先執行ret1,指令是pop r,就將system放到了r裡,在執行ret2,就call r,執行了call system。 

使用者通常會通過呼叫核心函式完成特定功能,當核心函式兩次從同一使用者記憶體位址讀取同一資料時,通常第一次讀取用來驗證資料或建立聯絡,第二次則用來使用該資料。與此同時,另乙個使用者執行緒,使用者空間併發執行的惡意執行緒可以在兩次核心讀取操作之間,利用竟爭條件對該資料進行篡改,從而造成核心使用資料篡改。

double fetch漏洞可造成包括緩衝區溢位、資訊洩露、空指標引用等後果,最終造成核心崩潰或者惡意提權。

就是使用了已經被釋放的記憶體。比如釋放了申請的堆沒有將指標指向null,然後對其進行是否指向null進行了判斷然後執行**。我們可以利用這個,用佔位的思想,有漏洞的執行緒釋放了記憶體,惡意程序裡面申請跟有漏洞的程序釋放大小相同的記憶體,就得到剛才釋放的記憶體,然後就可以利用這個執行shellcode,或者有些程式利用引用計數管理記憶體,然後對技術多加或者少減,造成引用計數不為0,但是已經被釋放掉了。

指分配一塊記憶體後未經初始直接進行使用,我們為了控制未初始化物件的內容會先釋放乙個與之相同大小的已經布置好內容的記憶體,然後讓未初始化物件來重用我們的內容。

或者未初始化指標,釋放乙個野指標,導致奔潰,可能引起提權。

就是越界讀寫,可以繞過位址隨機化保護,比如通過溢位得到虛表位址,對於c++程式來說虛函式表斯被編譯在全域性資料段,對於模組的基位址偏移是固定的,通過洩露的虛函式表的位址減去偏移就可以知道物件所處的dll模組的基位址。也就可以使用這個模組中的工具指令了。

檔案上傳漏洞原理

在檔案上傳的功能處,若服務端指令碼語言未對上傳的檔案進行嚴格驗證和過濾,導致惡意使用者上傳惡意的指令碼檔案時,就有可能獲取執行服務端命令的能力,這就是檔案上傳漏洞。相簿 頭像上傳 附件上傳 論壇發帖 郵箱 檔案管理器 值得注意的是,如果移動端也存在類似的操作的話,那麼相同的原理,也存在檔案上傳漏洞的...

檔案上傳漏洞原理

當檔案上傳點沒有對上傳的檔案進行嚴格的驗證和過濾時,就容易造成任意檔案上傳,包括上傳動態檔案 asp,php,jsp 等 如果上傳的目標目錄沒有限制執行許可權,導致所上傳的動態檔案可以正常執行,就導致了檔案上傳漏洞 存在上傳漏洞的必要條件 1 存在上傳點 2 可以上傳動態檔案 3 上傳目錄有執行許可...

SSRF漏洞原理介紹

比如一家公司的內網 你是訪問不到的 你只能訪問該公司的外部伺服器 可是有一天你通過伺服器訪問到了該公司的內網 這就是ssrf漏洞 記住curl是乙個函式 php中使用curl實現get和post請求的方法 curl init 初始化乙個新的會話 curl exec 抓取url並把它傳遞給瀏覽器 cu...