版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
靶機反序列化漏洞與審計項目11Web安全漏洞及代碼審計(第2版)(微課版)01項目知識準備項目知識準備01當程序?qū)τ脩糨斎氲膬?nèi)容(不可信數(shù)據(jù))進行反序列化處理時,攻擊者可以通過構(gòu)造惡意輸入,利用反序列化產(chǎn)生非預期的對象,而非預期的對象在產(chǎn)生過程中就會造成反序列化漏洞。漏洞介紹一基礎(chǔ)知識二1.序列化與反序列化在PHP中,可以通過序列化與反序列化很方便地進行對象的傳遞,輕松地存儲和傳輸數(shù)據(jù)。從本質(zhì)上來說,這并不存在安全隱患,但是由于用戶可以控制輸入的序列化內(nèi)容,即用戶可以傳入惡意的序列化數(shù)據(jù),因此程序在對惡意數(shù)據(jù)進行反序列化處理時就可能存在安全風險。常見的PHP序列化和反序列化方式主要包括使用serialize()、unserialize()、json_encode()、json_decode()等函數(shù)。項目知識準備01這里需要強調(diào)的是__sleep()、__toString()和__wakeup()魔術(shù)方法。serialize()函數(shù)在對象被序列化之前會檢查類中是否存在__sleep()魔術(shù)方法,如果存在,則會先調(diào)用該方法,再執(zhí)行序列化操作,并返回一個包含對象中所有應(yīng)被序列化的變量名稱的數(shù)組。如果該方法未返回任何內(nèi)容,則NULL會被序列化,并產(chǎn)生一個E_NOTICE級別的錯誤。__toString()魔術(shù)方法是在一個對象被當作一個字符串使用時被調(diào)用的,如果該方法返回了字符串,則表明是該對象轉(zhuǎn)換為字符串的結(jié)果,如果沒有定義該方法,則該對象無法被當作字符串使用,此魔術(shù)方法也是比較常見的。unserialize()函數(shù)在反序列化之前會檢查是否存在__wakeup()魔術(shù)方法,如果存在,則會先調(diào)用__wakeup()魔術(shù)方法,并預先準備對象需要的資源,再返回void。__wakeup()魔術(shù)方法常用于反序列化操作中需要重新建立數(shù)據(jù)庫連接或執(zhí)行其他初始化操作的情況?;A(chǔ)知識二2.常用魔術(shù)方法項目知識準備01基礎(chǔ)知識二2.常用魔術(shù)方法項目知識準備01面向?qū)傩跃幊蹋≒roperty-OrientedProgramming)用于構(gòu)造特定調(diào)用鏈,類似于二進制利用中的面向返回編程(Return-OrientedProgramming),二者都是先從現(xiàn)有運行環(huán)境中尋找一系列代碼或指令調(diào)用,然后根據(jù)需求構(gòu)造一組連續(xù)的調(diào)用鏈,在控制代碼或程序的執(zhí)行流程后,就能夠使用這組調(diào)用鏈來執(zhí)行一些操作。要想利用PHP的反序列化漏洞,需要滿足兩個條件:一個是可以控制傳入unserialize()函數(shù)的參數(shù);另一個是存在魔術(shù)方法和危險函數(shù)。反序列化漏洞就是程序在進行反序列化操作時執(zhí)行魔術(shù)方法,導致魔術(shù)方法中的危險函數(shù)被執(zhí)行而產(chǎn)生的漏洞。在進行反序列化攻擊時,如果需要利用的危險函數(shù)不在魔術(shù)方法中,而是在一個類的普通方法中,此時就需要構(gòu)造POP鏈,尋找相同的函數(shù)名,將類的屬性和敏感函數(shù)的屬性聯(lián)系起來?;A(chǔ)知識二3.構(gòu)造POP鏈項目知識準備01審計思路三在審計反序列化漏洞時一般可以通過全局搜索__wakeup()和__destruct()等魔術(shù)方法追蹤整個調(diào)用過程,判斷反序列化數(shù)據(jù)是否可控,以及被利用的危險函數(shù)是否在魔術(shù)方法中執(zhí)行。02任務(wù)1反序列化漏洞分析任務(wù)1反序列化漏洞分析02能夠進行反序列化漏洞的分析了解世界技能大賽中的網(wǎng)絡(luò)安全項目和我國選手的參賽情況,弘揚勞動光榮、技能寶貴、創(chuàng)造偉大的時代風尚。任務(wù)目標一任務(wù)實施二1.serialize()函數(shù)serialize(mixed$value)函數(shù)用于序列化對象或數(shù)組,并返回一個字符串。其中,參數(shù)$value就是要序列化的對象或數(shù)組。測試代碼如下:任務(wù)1反序列化漏洞分析02將$data數(shù)組序列化,結(jié)果如圖11-1所示??梢钥吹剑蛄谢慕Y(jié)果為“a:3:{i:0;s:1:"A";i:1;s:2:"BB";i:2;s:3:"CCC";}”,其中:a:3代表有3個數(shù)組。i:0代表第1個數(shù)組,s:1表示有1個字符,為A。i:1代表第2個數(shù)組,s:2表示有2個字符,為BB。i:2代表第3個數(shù)組,s:3表示有3個字符,為CCC。任務(wù)實施二1.serialize()函數(shù)任務(wù)1反序列化漏洞分析02unserialize(mixed$value)函數(shù)用于將序列化的對象或數(shù)組反序列化,恢復為原始的對象。測試代碼如下。輸入?yún)?shù)“O:4:"Test":1:{s:5:"value";s:10:"phpinfo();";}”,由于危險函數(shù)在__wakeup()魔術(shù)方法中,且反序列化的參數(shù)可控,因此在反序列化數(shù)據(jù)的過程中無意間觸發(fā)了魔術(shù)方法,從而產(chǎn)生了漏洞,測試結(jié)果如圖11-2所示。任務(wù)實施二2.unserialize()函數(shù)03任務(wù)2反序列化漏洞代碼審計任務(wù)2反序列化漏洞代碼審計03能夠進行反序列化漏洞的代碼審計了解網(wǎng)絡(luò)安全眾測的發(fā)展狀況。任務(wù)目標一任務(wù)實施二1.環(huán)境搭建本任務(wù)使用Typecho1.0,在部署好源代碼后,進入“歡迎使用”界面,如圖11-3所示。任務(wù)2反序列化漏洞代碼審計031.環(huán)境搭建任務(wù)實施二單擊“我準備好了,開始下一步”按鈕,進入“初始化配置”界面,需要填寫關(guān)于數(shù)據(jù)庫的配置信息及預創(chuàng)建的管理員賬號等,如圖11-4所示。在信息填寫完成后,單擊界面底部的“確認,開始安裝”按鈕,即可開始安裝。在安裝成功后,界面如圖11-5所示。任務(wù)2反序列化漏洞代碼審計032.漏洞分析任務(wù)實施二在/install.php文件中,獲取Cookie中的參數(shù)__typecho_config,使用Base64解碼后進行反序列化操作,導致此入口存在反序列化漏洞,代碼如下。這里有一處明顯的反序列化漏洞,關(guān)鍵在于如何利用該漏洞。反序列化能夠利用的點必須有相應(yīng)的魔術(shù)方法來配合。上述代碼反序列化的結(jié)果最終會被存儲到變量$config中,之后將$config['adapter']和$config['prefix']作為Typecho_Db類的初始化變量來創(chuàng)建類實例。在/var/Typecho/Db.php文件中找到該類的構(gòu)造函數(shù)代碼,具體代碼如下:任務(wù)2反序列化漏洞代碼審計032.漏洞分析任務(wù)實施二在對傳入的$adapterName進行字符串的拼接時,對于PHP來說,如果$adapterName類型為對象,就會調(diào)用對應(yīng)類中的__toString()魔術(shù)方法。在/var/Typecho/Feed.php文件中全局搜索__toString()魔術(shù)方法,部分代碼如下。上述代碼調(diào)用了$item['author']->screenName,此時需要提及一個魔術(shù)方法__get(),該魔術(shù)方法主要用于讀取不可訪問的屬性數(shù)據(jù)。在/var/Typecho/Request.php文件中尋找對應(yīng)的__get()魔術(shù)方法,部分代碼如下:任務(wù)2反序列化漏洞代碼審計032.漏洞分析任務(wù)實施二跟蹤get()函數(shù),代碼如下。最后跟蹤_applyFilter()函數(shù),發(fā)現(xiàn)array_map()函數(shù)和回調(diào)函數(shù)call_user_func()都可以作為利用點,并使用$filter作為調(diào)用函數(shù)、$value作為函數(shù)參數(shù),代碼如下:任務(wù)2反序列化漏洞代碼審計033.構(gòu)造PoC任務(wù)實施二如果在$item[‘a(chǎn)uthor’]中存儲Typecho_Request類實例,就會調(diào)用$item[‘a(chǎn)uthor’]->screenName,但是如果在Typecho_Request類中沒有該屬性,就會調(diào)用類中的__get($key)魔術(shù)方法,其中,$key傳入的值就是screenName。所以將$this->_param[‘screenName’]的值設(shè)置為需要執(zhí)行的函數(shù)的參數(shù)值,并構(gòu)造$this->_filter為調(diào)用函數(shù)的參數(shù)值,具體構(gòu)造代碼如下。到/var/Typecho/Feed.php文件的__toString()魔術(shù)方法中,部分代碼如下:任務(wù)2反序列化漏洞代碼審計033.構(gòu)造PoC任務(wù)實施二在上述代碼中可以看到,首先需要構(gòu)造$this->_type來滿足if(self::RSS2==$this->_type)條件以進入分支,其次需要構(gòu)造$_item['author']來觸發(fā)__get()魔術(shù)方法以使用對象,并構(gòu)造$_item['category']來觸發(fā)錯誤,最終PoC代碼如下:任務(wù)2反序列化漏洞代碼審計034.漏洞利用任務(wù)實施二在/install.php文件中,首先會判斷參數(shù)finish是否存在,可以通過傳入任意參數(shù)來繞過;然后會判斷是否存在跨站請求,可以將Referer設(shè)置為站內(nèi)URL來繞過,代碼如下:任務(wù)2反序列化漏洞代碼審計034.漏洞利用任務(wù)實施二在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年公共空間設(shè)計與可持續(xù)社區(qū)建設(shè)
- 2026年綠色施工與環(huán)境影響最小化的策略
- 2026年關(guān)鍵橋梁的實時監(jiān)測與維護策略
- 2026年智能化建筑的供電系統(tǒng)設(shè)計
- 貨運安全資料員培訓課件
- 貨站消防安全培訓課件
- 神經(jīng)科護理實踐與護理管理
- 2026年福建華南女子職業(yè)學院單招綜合素質(zhì)考試模擬試題帶答案解析
- 2026年河南經(jīng)貿(mào)職業(yè)學院單招職業(yè)技能考試模擬試題帶答案解析
- 2026年廣東松山職業(yè)技術(shù)學院單招綜合素質(zhì)考試備考題庫帶答案解析
- 昆山鈔票紙業(yè)有限公司2026年度招聘備考題庫附答案詳解
- 2025年巴楚縣輔警招聘考試備考題庫附答案
- 2026云南省產(chǎn)品質(zhì)量監(jiān)督檢驗研究院招聘編制外人員2人考試參考試題及答案解析
- GB/T 46793.1-2025突發(fā)事件應(yīng)急預案編制導則第1部分:通則
- 老人再婚協(xié)議書
- 泥漿護壁成孔灌注樁施工操作規(guī)程
- 舞臺燈光效果課件
- 2025年中國工藝美術(shù)館面向社會招聘工作人員2人筆試歷年典型考題及考點剖析附帶答案詳解
- 滬教版生物科學八年級上冊重點知識點總結(jié)
- 焊縫的圖示法
- 2020年云南省中考英語試卷真題及答案詳解(含作文范文)
評論
0/150
提交評論